Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 /* Wiznet W5500 Test Program 00002 * 00003 * TCP server(192.168.1.125) is listening with port number 3000 and send back the data to the peer. 00004 * 00005 */ 00006 00007 #include "mbed.h" 00008 #include "Ethernet/wizchip_conf.h" 00009 #include "Ethernet/socket.h" 00010 00011 SPI spi(p5, p6, p7); // mosi, miso, sclk 00012 DigitalOut cs(p8), nRESET(p9); // reset pin of Wiz550io 00013 DigitalIn RDY(p10); // ready pin of Wiz550io 00014 00015 Serial pc(USBTX, USBRX); // tx, rx 00016 00017 void wizchip_select(void); 00018 void wizchip_deselect(void); 00019 uint8_t wizchip_read(); 00020 void wizchip_write(uint8_t wb); 00021 int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t size); 00022 int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t size); 00023 00024 #define DATA_BUF_SIZE 2048 00025 uint8_t gDATABUF[DATA_BUF_SIZE]; 00026 wiz_NetInfo gWIZNETINFO; 00027 00028 int main() 00029 { 00030 uint8_t tmp; 00031 uint8_t tmpstr[6] = {0,}; 00032 int32_t ret = 0; 00033 uint8_t memsize[2][8] = { {2,2,2,2,2,2,2,2},{2,2,2,2,2,2,2,2}}; 00034 00035 pc.baud(115200); 00036 00037 spi.format(8,0); // 8bit, mode 0 00038 spi.frequency(7000000); // 7MHz 00039 00040 00041 nRESET = 0; 00042 wait(0.001); // 1ms 00043 nRESET = 1; 00044 00045 cs = 1; 00046 wait(0.1); // 100ms 00047 00048 // register the chip select/ deselect fucntion 00049 reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect); 00050 00051 // register the chip read/ write fucntion 00052 reg_wizchip_spi_cbfunc(wizchip_read, wizchip_write); 00053 00054 /* wizchip initialize*/ 00055 if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1) { 00056 pc.printf("WIZCHIP Initialized fail.\r\n"); 00057 while(1); 00058 } 00059 00060 do 00061 { 00062 if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1) 00063 pc.printf("Unknown PHY Link stauts.\r\n"); 00064 }while(tmp == PHY_LINK_OFF); 00065 00066 /* wizchip netconf */ 00067 ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); 00068 00069 gWIZNETINFO.ip[0] = 192; 00070 gWIZNETINFO.ip[1] = 168; 00071 gWIZNETINFO.ip[2] = 1; 00072 gWIZNETINFO.ip[3] = 125; 00073 00074 // set network configuration 00075 ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO); 00076 00077 // get network configuration 00078 ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO); 00079 00080 // Display network configuration 00081 ctlwizchip(CW_GET_ID,(void*)tmpstr); 00082 pc.printf("=== %s NET CONF ===\r\n",(char*)tmpstr); 00083 pc.printf("MAC:%02X.%02X.%02X.%02X.%02X.%02X\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2], 00084 gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]); 00085 pc.printf("GAR:%d.%d.%d.%d\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]); 00086 pc.printf("SUB:%d.%d.%d.%d\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]); 00087 pc.printf("SIP:%d.%d.%d.%d\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]); 00088 00089 while(1) 00090 { 00091 uint8_t sn = 2; 00092 if((ret = socket(sn,Sn_MR_TCP,3000,SF_TCP_NODELAY)) != sn) 00093 { 00094 printf("%d:socket() error:%ld\r\n", sn,ret); 00095 close(sn); 00096 continue; 00097 } 00098 printf("%d:socket() ok.\r\n",sn); 00099 00100 00101 if((ret = listen(sn)) != SOCK_OK) 00102 { 00103 printf("%d:listen() error:%ld",sn,ret); 00104 close(sn); 00105 return ret; 00106 } 00107 printf("%d:listen() ok.\r\n",sn); 00108 00109 00110 if(((ret = socket(sn+1, Sn_MR_UDP, 3000, 0)) != sn+1)) 00111 { 00112 printf("%d:socket() error:%ld\r\n", sn+1,ret); 00113 continue; 00114 } 00115 do 00116 { 00117 getsockopt(sn,SO_STATUS, &tmp); 00118 }while(tmp != SOCK_CLOSED && tmp != SOCK_ESTABLISHED); 00119 if(tmp == SOCK_CLOSED) continue; 00120 //Accept for client 00121 printf("%d:connected\r\nLBStarted Blocking mode\r\n",sn); 00122 00123 while(1) 00124 { 00125 if((ret = loopback_tcps(sn, gDATABUF, DATA_BUF_SIZE)) < 0) 00126 { 00127 printf("%d:loopback_tcps error:%ld\r\n",sn,ret); 00128 break; 00129 } 00130 /* 00131 if((ret=loopback_udps(sn+1,gDATABUF,10)) < 0) 00132 { 00133 printf("%d:loopback_udps error:%ld\r\n",sn+1,ret); 00134 break; 00135 } 00136 */ 00137 } 00138 } 00139 } 00140 00141 void wizchip_select(void) 00142 { 00143 cs = 0; 00144 } 00145 00146 void wizchip_deselect(void) 00147 { 00148 cs = 1; 00149 } 00150 00151 uint8_t wizchip_read() 00152 { 00153 return spi.write(0x00); 00154 } 00155 00156 void wizchip_write(uint8_t wb) 00157 { 00158 spi.write(wb); 00159 } 00160 00161 int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t size) 00162 { 00163 int32_t ret = 0; 00164 ret = recv(sn,buf,size); 00165 if(ret != size) 00166 { 00167 if(ret < 0) 00168 { 00169 printf("%d:recv() error:%ld\r\n",sn,ret); 00170 close(sn); 00171 return ret; 00172 } 00173 } 00174 size = ret; 00175 ret = send(sn,buf,size); 00176 if(ret != size) 00177 { 00178 if(ret < 0) 00179 { 00180 printf("%d:send() error:%ld\r\n",sn,ret); 00181 close(sn); 00182 } 00183 } 00184 return ret; 00185 } 00186 00187 int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t size) 00188 { 00189 int32_t ret = 0; 00190 static uint8_t addr[4] = {0,}; 00191 static uint16_t port = 0; 00192 uint8_t packinfo; 00193 00194 if((ret = recvfrom(sn,buf,size, addr,&port,&packinfo)) < 0) 00195 { 00196 printf("%d:recvfrom error:%ld\r\n",sn,ret); 00197 return ret; 00198 } 00199 if(packinfo & 0x80) 00200 { 00201 printf("%d:recvfrom %d.%d.%d.%d(%d), size=%ld.\r\n",sn,addr[0],addr[1],addr[2],addr[3],port, ret); 00202 } 00203 if(packinfo & 0x01) 00204 { 00205 printf("%d:recvfrom remained packet.\r\n",sn); 00206 } 00207 else 00208 { 00209 printf("%d:recvfrom completed.\r\n",sn); 00210 } 00211 if( (ret = sendto(sn, buf, ret, addr, port)) < 0) 00212 { 00213 printf("%d:sendto error:%ld\r\n",sn,ret); 00214 return ret; 00215 } 00216 printf("%d:sendto %d.%d.%d.%d(%d), size=%ld\r\n",sn,addr[0],addr[1],addr[2],addr[3],port, ret); 00217 return ret; 00218 }
Generated on Tue Jul 12 2022 18:48:21 by
1.7.2
WIZ550io
W5500