WIZnet WIZ550io (w5500) support
Dependents: HTTPClient_HelloWorld_WIZ550io NTPClient_HelloWorld_WIZ550io
Fork of WIZ820ioInterface by
Revision 9:615198a7b82b, committed 2013-12-23
- Comitter:
- ban4jp
- Date:
- Mon Dec 23 13:51:35 2013 +0000
- Parent:
- 8:8bdf6aac8cea
- Commit message:
- Use on-board MAC Address.; Fixed compatibility.
Changed in this revision
diff -r 8bdf6aac8cea -r 615198a7b82b Socket/Socket.h --- a/Socket/Socket.h Sun Dec 15 12:29:47 2013 +0000 +++ b/Socket/Socket.h Mon Dec 23 13:51:35 2013 +0000 @@ -20,6 +20,11 @@ #include "WIZ820io.h" +#define htons(x) __REV16(x) +#define ntohs(x) __REV16(x) +#define htonl(x) __REV(x) +#define ntohl(x) __REV(x) + /** Socket file descriptor and select wrapper */ class Socket {
diff -r 8bdf6aac8cea -r 615198a7b82b Socket/UDPSocket.cpp --- a/Socket/UDPSocket.cpp Sun Dec 15 12:29:47 2013 +0000 +++ b/Socket/UDPSocket.cpp Mon Dec 23 13:51:35 2013 +0000 @@ -18,6 +18,8 @@ #include "UDPSocket.h" +static int udp_local_port; + UDPSocket::UDPSocket() { } @@ -41,7 +43,12 @@ } } // set local port - eth->sreg<uint16_t>(_sock_fd, Sn_PORT, port); + if (port != 0) { + eth->sreg<uint16_t>(_sock_fd, Sn_PORT, port); + } else { + udp_local_port++; + eth->sreg<uint16_t>(_sock_fd, Sn_PORT, udp_local_port); + } // set udp protocol eth->setProtocol(_sock_fd, UDP); eth->scmd(_sock_fd, OPEN);
diff -r 8bdf6aac8cea -r 615198a7b82b WIZ820io/WIZ820io.cpp --- a/WIZ820io/WIZ820io.cpp Sun Dec 15 12:29:47 2013 +0000 +++ b/WIZ820io/WIZ820io.cpp Mon Dec 23 13:51:35 2013 +0000 @@ -139,14 +139,22 @@ reset_pin = 1; //wait_ms(150); // 150ms wait_ms(300); // 300ms (w5500) - reg_wr<uint8_t>(MR, 1<<7); -#ifdef TARGET_LPC1114 - uint8_t mac[6] = {0x00,0x02,0xf7,0xf0,0x00,0x00}; -#else - uint8_t mac[6]; - mbed_mac_address((char*)mac); -#endif - reg_wr_mac(SHAR, mac); + + //reg_wr<uint8_t>(MR, 1<<7); + +//#ifdef TARGET_LPC1114 +// uint8_t mac[6] = {0x00,0x02,0xf7,0xf0,0x00,0x00}; +//#else +// uint8_t mac[6]; +// mbed_mac_address((char*)mac); +//#endif +// reg_wr_mac(SHAR, mac); + + // set RX and TX buffer size + for (int socket = 0; socket < MAX_SOCK_NUM; socket++) { + sreg<uint8_t>(socket, Sn_RXBUF_SIZE, 2); + sreg<uint8_t>(socket, Sn_TXBUF_SIZE, 2); + } } bool WIZ820io::close(int socket) @@ -162,6 +170,7 @@ scmd(socket, DISCON); } scmd(socket, CLOSE); + sreg<uint8_t>(socket, Sn_IR, 0xff); return true; } @@ -215,6 +224,15 @@ spi_write(ptr, cntl_byte, (uint8_t*)str, len); sreg<uint16_t>(socket, Sn_TX_WR, ptr + len); scmd(socket, SEND); + + 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; + } + } + sreg<uint8_t>(socket, Sn_IR, INT_SEND_OK); + return len; }
diff -r 8bdf6aac8cea -r 615198a7b82b WIZ820io/WIZ820io.h --- a/WIZ820io/WIZ820io.h Sun Dec 15 12:29:47 2013 +0000 +++ b/WIZ820io/WIZ820io.h Mon Dec 23 13:51:35 2013 +0000 @@ -45,6 +45,14 @@ }; +enum Interrupt { + INT_CON = 0x01, + INT_DISCON = 0x02, + INT_RECV = 0x04, + INT_TIMEOUT = 0x08, + INT_SEND_OK = 0x10, +}; + enum Status { SOCK_CLOSED = 0x00, SOCK_INIT = 0x13, @@ -64,16 +72,19 @@ #define SIPR 0x000f #define PHYSTATUS 0x0035 // socket -#define Sn_MR 0x0000 -#define Sn_CR 0x0001 -#define Sn_SR 0x0003 -#define Sn_PORT 0x0004 -#define Sn_DIPR 0x000c -#define Sn_DPORT 0x0010 -#define Sn_TX_FSR 0x0020 -#define Sn_TX_WR 0x0024 -#define Sn_RX_RSR 0x0026 -#define Sn_RX_RD 0x0028 +#define Sn_MR 0x0000 +#define Sn_CR 0x0001 +#define Sn_IR 0x0002 +#define Sn_SR 0x0003 +#define Sn_PORT 0x0004 +#define Sn_DIPR 0x000c +#define Sn_DPORT 0x0010 +#define Sn_RXBUF_SIZE 0x001e +#define Sn_TXBUF_SIZE 0x001f +#define Sn_TX_FSR 0x0020 +#define Sn_TX_WR 0x0024 +#define Sn_RX_RSR 0x0026 +#define Sn_RX_RD 0x0028 class WIZ820io { public: