W5500 driver for mbed OS 5

Dependents:   http-webserver-example mbed-os-example-sockets

Fork of W5500Interface by Sergei G

Revision:
2:06b6f9f7c071
Parent:
1:2dee44ea52a9
Child:
3:61ff27ed8355
--- a/WIZnet/W5500.cpp	Thu Jun 15 20:19:23 2017 +0000
+++ b/WIZnet/W5500.cpp	Sat Jul 01 07:29:02 2017 +0000
@@ -23,7 +23,7 @@
 #define INFO(x, ...)
 #endif
 
-#define DBG_SPI 0
+#define DBG_SPI 1
 
 WIZnet_Chip* WIZnet_Chip::inst;
 
@@ -49,7 +49,8 @@
 
 bool WIZnet_Chip::setmac()
 {
-    for (int i =0; i < 6; i++) reg_wr<uint8_t>(SHAR+i, mac[i]);
+    reg_wr_mac(SHAR, mac);
+    //for (int i =0; i < 6; i++) reg_wr<uint8_t>(SHAR+i, mac[i]);
     return true;
 }
 
@@ -148,6 +149,8 @@
         sreg<uint8_t>(socket, Sn_RXBUF_SIZE, 2);
         sreg<uint8_t>(socket, Sn_TXBUF_SIZE, 2);
     }
+    
+    reg_rd_mac(SHAR, mac); // read the MAC address inside the module
 }
 
 
@@ -244,30 +247,49 @@
     if (socket < 0) {
         return -1;
     }
+    debug("send: Sn_TX_WR: %d\n", Sn_TX_WR);
     uint16_t ptr = sreg<uint16_t>(socket, Sn_TX_WR);
     uint8_t cntl_byte = (0x14 + (socket << 5));
+    debug("send: spi_write cntl_byte: %d, len: %d\n", cntl_byte, len);
     spi_write(ptr, cntl_byte, (uint8_t*)str, len);
+    debug("send: Sn_TX_WR: %d\n", Sn_TX_WR);
     sreg<uint16_t>(socket, Sn_TX_WR, ptr + len);
+    debug("send: scmd SEND: %d\n", SEND);
     scmd(socket, SEND);
     uint8_t tmp_Sn_IR;
+    debug("send: 1st sreg<uint8_t>(socket, Sn_IR)\n");
     while (( (tmp_Sn_IR = sreg<uint8_t>(socket, Sn_IR)) & INT_SEND_OK) != INT_SEND_OK) {
         // @Jul.10, 2014 fix contant name, and udp sendto function.
         switch (sreg<uint8_t>(socket, Sn_SR)) {
             case SOCK_CLOSED :
+                debug("send: return on close socket\n");
                 close(socket);
                 return 0;
                 //break;
             case SOCK_UDP :
+                debug("send: SOCK_UDP\n");
                 // ARP timeout is possible.
                 if ((tmp_Sn_IR & INT_TIMEOUT) == INT_TIMEOUT) {
+                    debug("send: return on ARP timeout\n");
                     sreg<uint8_t>(socket, Sn_IR, INT_TIMEOUT);
                     return 0;
                 }
                 break;
             default :
+                debug("send: default - nothing\n");
                 break;
         }
+        debug("send: Nth sreg<uint8_t>(socket, Sn_IR)\n");
     }
+    /*
+        while ((sreg<uint8_t>(socket, Sn_IR) & INT_SEND_OK) != INT_SEND_OK) {
+            if (sreg<uint8_t>(socket, Sn_SR) == CLOSED) {
+                close(socket);
+                return 0;
+            }
+        }
+    */
+    debug("send: return INT_SEND_OK\n");
     sreg<uint8_t>(socket, Sn_IR, INT_SEND_OK);
 
     return len;
@@ -325,9 +347,9 @@
     debug("[SPI]W %04x(%02x %d)", addr, cb, len);
     for(int i = 0; i < len; i++) {
         debug(" %02x", buf[i]);
-        if (i > 16) {
-            debug(" ...");
-            break;
+        if (i % 16 == 0) {
+            debug("\n");
+//            break;
         }
     }
     debug("\r\n");
@@ -352,9 +374,9 @@
     debug("[SPI]R %04x(%02x %d)", addr, cb, len);
     for(int i = 0; i < len; i++) {
         debug(" %02x", buf[i]);
-        if (i > 16) {
-            debug(" ...");
-            break;
+        if (i % 16 == 0) {
+            debug("\n");
+//            break;
         }
     }
     debug("\r\n");