Basic example using W5500 Ported to LPC800_Max (LPC812)

Dependencies:   Ethernet mbed

Fork of W5500_Porting_WIZnetLib by WIZnet

Revision:
2:12863af451af
Parent:
0:496d676b6364
--- a/main.cpp	Tue Feb 18 05:42:27 2014 +0000
+++ b/main.cpp	Mon Mar 31 04:01:59 2014 +0000
@@ -2,9 +2,9 @@
 #include "Ethernet/wizchip_conf.h"
 #include "Ethernet/socket.h"
 
-SPI spi(p5, p6, p7); // mosi, miso, sclk
-DigitalOut cs(p8), nRESET(p9);
-DigitalIn RDY(p10);
+SPI spi(P0_14, P0_15, P0_12); // mosi, miso, sclk
+DigitalOut cs(P0_13), nRESET(P0_16); // reset pin of Wiz550io
+DigitalIn RDY(P0_17);  // ready pin of Wiz550io
 
 Serial pc(USBTX, USBRX); // tx, rx
 
@@ -29,22 +29,15 @@
     pc.baud(115200);
 
     spi.format(8,0); // 8bit, mode 0
-    //spi.frequency(80000000); // 80MHz
-    //spi.frequency(8000000); // 8MHz
-    spi.frequency(7000000); // 7MHz
-    //spi.frequency(6000000); // 6MHz
-    //spi.frequency(5000000); // 5MHz
-    //spi.frequency(1000000); // 1MHz
-    //spi.frequency(100000); // 100KHz
-    //spi.frequency(10000); // 10KHz
+    spi.frequency(1000000); // 1MHz.  Do not use more than 1Mhz on the LPC800, errors result
 
     nRESET = 0;
     wait(0.001); // 1ms
     nRESET = 1;
     
     while(RDY!=1);
+
     cs = 1;
-    //wait(0.1); // 100ms
 
 #if   _WIZCHIP_IO_MODE_ == _WIZCHIP_IO_MODE_SPI_VDM_
     reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
@@ -65,47 +58,27 @@
         pc.printf("WIZCHIP Initialized fail.\r\n");
         while(1);
     }
-    do
-    {
+
+    do {
         if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1)
-            pc.printf("Unknown PHY Link stauts.\r\n");
-    }while(tmp == PHY_LINK_OFF);
+            pc.printf("Unknown PHY Link status.\r\n");
+    } while(tmp == PHY_LINK_OFF);
+    
     /* wizchip netconf */
-#if _WIZCHIP_ == 5200
-    gWIZNETINFO.mac[0] = 0x00;
-    gWIZNETINFO.mac[1] = 0x08;
-    gWIZNETINFO.mac[2] = 0xDC;
-    gWIZNETINFO.mac[3] = 0x00;
-    gWIZNETINFO.mac[4] = 0xAB;
-    gWIZNETINFO.mac[5] = 0xCD;
+    ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);
+
     gWIZNETINFO.ip[0] = 192;
     gWIZNETINFO.ip[1] = 168;
-    gWIZNETINFO.ip[2] = 1;
-    gWIZNETINFO.ip[3] = 119;
-    gWIZNETINFO.gw[0] = 192;
-    gWIZNETINFO.gw[1] = 168;
-    gWIZNETINFO.gw[2] = 1;
-    gWIZNETINFO.gw[3] = 1;
-    gWIZNETINFO.sn[0] = 255;
-    gWIZNETINFO.sn[1] = 255;
-    gWIZNETINFO.sn[2] = 255;
-    gWIZNETINFO.sn[3] = 0;
-    gWIZNETINFO.dns[0] = 0;
-    gWIZNETINFO.dns[1] = 0;
-    gWIZNETINFO.dns[2] = 0;
-    gWIZNETINFO.dns[3] = 0;
+    gWIZNETINFO.ip[2] = 43;
+    gWIZNETINFO.ip[3] = 116;
     gWIZNETINFO.dhcp = NETINFO_STATIC;
-#else
-    ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);
-#endif
-    gWIZNETINFO.ip[0] = 192;
-    gWIZNETINFO.ip[1] = 168;
-    gWIZNETINFO.ip[2] = 1;
-    gWIZNETINFO.ip[3] = 119;
+
     ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO);
     ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);
+
     //DISPLAY NETWORK
     ctlwizchip(CW_GET_ID,(void*)tmpstr);
+
     pc.printf("=== %s NET CONF ===\r\n",(char*)tmpstr);
     pc.printf("MAC:%02X.%02X.%02X.%02X.%02X.%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],
                                                       gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
@@ -116,43 +89,44 @@
    while(1)
    {
       uint8_t sn = 2;
-      if((ret = socket(sn,Sn_MR_TCP,3000,SF_TCP_NODELAY)) != sn)
+
+      if((ret = socket(sn, Sn_MR_TCP, 3000, SF_TCP_NODELAY)) != sn)
       {
-         printf("%d:socket() error:%ld\r\n", sn,ret);
+         pc.printf("%d:socket() error: %ld\r\n", sn,ret);
          close(sn);
          continue;
       }
-      printf("%d:socket() ok.\r\n",sn);
-      if((ret = listen(sn)) != SOCK_OK)
-      {
-         printf("%d:listen() error:%ld",sn,ret);
+      pc.printf("%d:socket() ok.\r\n", sn);
+      
+      if((ret = listen(sn)) != SOCK_OK) {
+         pc.printf("%d:listen() error:%ld", sn, ret);
          close(sn);
          return ret;
       }
-      printf("%d:listen() ok.\r\n",sn);
-      if((ret = socket(sn+1, Sn_MR_UDP, 3000, 0)) != sn+1)
-      {
-         printf("%d:socket() error:%ld\r\n", sn+1,ret);
+      pc.printf("%d:listen() ok.\r\n", sn);
+      
+      if((ret = socket(sn + 1, Sn_MR_UDP, 3000, 0)) != sn + 1) {
+         pc.printf("%d:socket() error:%ld\r\n", sn + 1, ret);
          continue;
-      }      
-      do
-      {
-         getsockopt(sn,SO_STATUS, &tmp);
-      }while(tmp != SOCK_CLOSED && tmp != SOCK_ESTABLISHED);
+      }
+            
+      do {
+         getsockopt(sn, SO_STATUS, &tmp);
+      } while(tmp != SOCK_CLOSED && tmp != SOCK_ESTABLISHED);
+      
       if(tmp == SOCK_CLOSED) continue;
+      
       //Accept for client
-      printf("%d:connected\r\nLBStarted Blocking mode\r\n",sn);
-      while(1)
-      {
-         if((ret = loopback_tcps(sn, gDATABUF, DATA_BUF_SIZE)) < 0)
-         {
-            printf("%d:loopback_tcps error:%ld\r\n",sn,ret);
+      pc.printf("%d:connected\r\nLBStarted Blocking mode\r\n", sn);
+      
+      while(1) {
+         if((ret = loopback_tcps(sn, gDATABUF, DATA_BUF_SIZE)) < 0) {
+            pc.printf("%d:loopback_tcps error:%ld\r\n", sn, ret);
             break;
          }
 /*
-         if((ret=loopback_udps(sn+1,gDATABUF,10)) < 0)
-         {
-            printf("%d:loopback_udps error:%ld\r\n",sn+1,ret);
+         if((ret=loopback_udps(sn+1,gDATABUF,10)) < 0) {
+            pc.printf("%d:loopback_udps error:%ld\r\n", sn + 1, ret);
             break;
          }
 */
@@ -183,23 +157,27 @@
 int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t size)
 {
    int32_t ret = 0;
-   ret = recv(sn,buf,size);
-   if(ret != size)
-   {
+   
+   ret = recv(sn, buf, size);
+   
+   if(ret != size) {
       if(ret < 0)
       {
-         printf("%d:recv() error:%ld\r\n",sn,ret);
+         pc.printf("%d:recv() error:%ld\r\n", sn, ret);
          close(sn);
          return ret;
       }
    }
+   
    size = ret;
-   ret = send(sn,buf,size);
-   if(ret != size)
-   {
-      if(ret < 0)
-      {
-         printf("%d:send() error:%ld\r\n",sn,ret);
+   ret = send(sn, buf, size);
+
+   for(int x = 0; x < size; x++)
+     pc.printf("%c", buf[x]);
+   
+   if(ret != size) {
+      if(ret < 0) {
+         pc.printf("%d:send() error:%ld\r\n", sn, ret);
          close(sn);
       }
    }
@@ -215,26 +193,26 @@
 
    if((ret = recvfrom(sn,buf,size, addr,&port,&packinfo)) < 0)
    {
-      printf("%d:recvfrom error:%ld\r\n",sn,ret);
+      pc.printf("%d:recvfrom error:%ld\r\n", sn, ret);
       return ret;
    }
    if(packinfo & 0x80)
    {
-      printf("%d:recvfrom %d.%d.%d.%d(%d), size=%ld.\r\n",sn,addr[0],addr[1],addr[2],addr[3],port, ret);
+      pc.printf("%d:recvfrom %d.%d.%d.%d(%d), size=%ld.\r\n", sn, addr[0], addr[1], addr[2], addr[3], port, ret);
    }
    if(packinfo & 0x01)
    {
-      printf("%d:recvfrom remained packet.\r\n",sn);
+      pc.printf("%d:recvfrom remained packet.\r\n", sn);
    }
    else
    {
-      printf("%d:recvfrom completed.\r\n",sn);
+      pc.printf("%d:recvfrom completed.\r\n", sn);
    }
    if( (ret = sendto(sn, buf, ret, addr, port)) < 0)
    {
-      printf("%d:sendto error:%ld\r\n",sn,ret);
+      pc.printf("%d:sendto error:%ld\r\n", sn, ret);
       return ret;
    }
-   printf("%d:sendto %d.%d.%d.%d(%d), size=%ld\r\n",sn,addr[0],addr[1],addr[2],addr[3],port, ret);
+   pc.printf("%d:sendto %d.%d.%d.%d(%d), size=%ld\r\n", sn, addr[0], addr[1], addr[2], addr[3], port, ret);
    return ret;
 }
\ No newline at end of file