w5500.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. #ifndef _W5500_H_
  2. #define _W5500_H_
  3. #include "Types.h"
  4. extern void setkeepalive(SOCKET s);
  5. #define MR (0x000000)
  6. /**brief Gateway IP Register address*/
  7. #define GAR0 (0x000100)
  8. #define GAR1 (0x000200)
  9. #define GAR2 (0x000300)
  10. #define GAR3 (0x000400)
  11. /**brief Subnet mask Register address*/
  12. #define SUBR0 (0x000500)
  13. #define SUBR1 (0x000600)
  14. #define SUBR2 (0x000700)
  15. #define SUBR3 (0x000800)
  16. /**brief Source MAC Register address*/
  17. #define SHAR0 (0x000900)
  18. #define SHAR1 (0x000A00)
  19. #define SHAR2 (0x000B00)
  20. #define SHAR3 (0x000C00)
  21. #define SHAR4 (0x000D00)
  22. #define SHAR5 (0x000E00)
  23. /**@brief Source IP Register address*/
  24. #define SIPR0 (0x000F00)
  25. #define SIPR1 (0x001000)
  26. #define SIPR2 (0x001100)
  27. #define SIPR3 (0x001200)
  28. /**@brief set Interrupt low level timer register address*/
  29. #define INTLEVEL0 (0x001300)
  30. #define INTLEVEL1 (0x001400)
  31. /**@brief Interrupt Register*/
  32. #define IR (0x001500)
  33. /**@brief Interrupt mask register*/
  34. #define IMR (0x001600)
  35. /**@brief Socket Interrupt Register*/
  36. #define SIR (0x001700)
  37. /**@brief Socket Interrupt Mask Register*/
  38. #define SIMR (0x001800)
  39. /**@brief Timeout register address( 1 is 100us )*/
  40. #define RTR0 (0x001900)
  41. #define RTR1 (0x001A00)
  42. /**@brief Retry count reigster*/
  43. #define RCR (0x001B00)
  44. /**@briefPPP LCP Request Timer register in PPPoE mode*/
  45. #define PTIMER (0x001C00)
  46. /**@brief PPP LCP Magic number register in PPPoE mode*/
  47. #define PMAGIC (0x001D00)
  48. /**@brief PPP Destination MAC Register address*/
  49. #define PDHAR0 (0x001E00)
  50. #define PDHAR1 (0x001F00)
  51. #define PDHAR2 (0x002000)
  52. #define PDHAR3 (0x002100)
  53. #define PDHAR4 (0x002200)
  54. #define PDHAR5 (0x002300)
  55. /**
  56. @brief PPP Session Identification Register
  57. */
  58. #define PSID0 (0x002400)
  59. #define PSID1 (0x002500)
  60. /**@brief PPP Maximum Segment Size(MSS) register*/
  61. #define PMR0 (0x002600)
  62. #define PMR1 (0x002700)
  63. /**@brief Unreachable IP register address in UDP mode*/
  64. #define UIPR0 (0x002800)
  65. #define UIPR1 (0x002900)
  66. #define UIPR2 (0x002A00)
  67. #define UIPR3 (0x002B00)
  68. /**@brief Unreachable Port register address in UDP mode*/
  69. #define UPORT0 (0x002C00)
  70. #define UPORT1 (0x002D00)
  71. /**@brief PHY Configuration Register*/
  72. #define PHYCFGR (0x002E00)
  73. /**@brief chip version register address*/
  74. #define VERSIONR (0x003900)
  75. /**@brief socket Mode register*/
  76. #define Sn_MR(ch) (0x000008 + (ch<<5))
  77. /**@brief channel Sn_CR register*/
  78. #define Sn_CR(ch) (0x000108 + (ch<<5))
  79. /**@brief channel interrupt register*/
  80. #define Sn_IR(ch) (0x000208 + (ch<<5))
  81. /**@brief channel status register*/
  82. #define Sn_SR(ch) (0x000308 + (ch<<5))
  83. /**@brief source port register*/
  84. #define Sn_PORT0(ch) (0x000408 + (ch<<5))
  85. #define Sn_PORT1(ch) (0x000508 + (ch<<5))
  86. /**@brief Peer MAC register address*/
  87. #define Sn_DHAR0(ch) (0x000608 + (ch<<5))
  88. #define Sn_DHAR1(ch) (0x000708 + (ch<<5))
  89. #define Sn_DHAR2(ch) (0x000808 + (ch<<5))
  90. #define Sn_DHAR3(ch) (0x000908 + (ch<<5))
  91. #define Sn_DHAR4(ch) (0x000A08 + (ch<<5))
  92. #define Sn_DHAR5(ch) (0x000B08 + (ch<<5))
  93. /**@brief Peer IP register address*/
  94. #define Sn_DIPR0(ch) (0x000C08 + (ch<<5))
  95. #define Sn_DIPR1(ch) (0x000D08 + (ch<<5))
  96. #define Sn_DIPR2(ch) (0x000E08 + (ch<<5))
  97. #define Sn_DIPR3(ch) (0x000F08 + (ch<<5))
  98. /**@brief Peer port register address*/
  99. #define Sn_DPORT0(ch) (0x001008 + (ch<<5))
  100. #define Sn_DPORT1(ch) (0x001108 + (ch<<5))
  101. /**@brief Maximum Segment Size(Sn_MSSR0) register address*/
  102. #define Sn_MSSR0(ch) (0x001208 + (ch<<5))
  103. #define Sn_MSSR1(ch) (0x001308 + (ch<<5))
  104. /**@brief IP Type of Service(TOS) Register */
  105. #define Sn_TOS(ch) (0x001508 + (ch<<5))
  106. /**@brief IP Time to live(TTL) Register */
  107. #define Sn_TTL(ch) (0x001608 + (ch<<5))
  108. /**@brief Receive memory size reigster*/
  109. #define Sn_RXMEM_SIZE(ch) (0x001E08 + (ch<<5))
  110. /**@brief Transmit memory size reigster*/
  111. #define Sn_TXMEM_SIZE(ch) (0x001F08 + (ch<<5))
  112. /**@brief Transmit free memory size register*/
  113. #define Sn_TX_FSR0(ch) (0x002008 + (ch<<5))
  114. #define Sn_TX_FSR1(ch) (0x002108 + (ch<<5))
  115. /**@brief Transmit memory read pointer register address*/
  116. #define Sn_TX_RD0(ch) (0x002208 + (ch<<5))
  117. #define Sn_TX_RD1(ch) (0x002308 + (ch<<5))
  118. /**@brief Transmit memory write pointer register address*/
  119. #define Sn_TX_WR0(ch) (0x002408 + (ch<<5))
  120. #define Sn_TX_WR1(ch) (0x002508 + (ch<<5))
  121. /**@brief Received data size register*/
  122. #define Sn_RX_RSR0(ch) (0x002608 + (ch<<5))
  123. #define Sn_RX_RSR1(ch) (0x002708 + (ch<<5))
  124. /**@brief Read point of Receive memory*/
  125. #define Sn_RX_RD0(ch) (0x002808 + (ch<<5))
  126. #define Sn_RX_RD1(ch) (0x002908 + (ch<<5))
  127. /**@brief Write point of Receive memory*/
  128. #define Sn_RX_WR0(ch) (0x002A08 + (ch<<5))
  129. #define Sn_RX_WR1(ch) (0x002B08 + (ch<<5))
  130. /**@brief socket interrupt mask register*/
  131. #define Sn_IMR(ch) (0x002C08 + (ch<<5))
  132. /**@brief frag field value in IP header register*/
  133. #define Sn_FRAG(ch) (0x002D08 + (ch<<5))
  134. /**@brief Keep Timer register*/
  135. #define Sn_KPALVTR(ch) (0x002F08 + (ch<<5))
  136. /* MODE register values */
  137. #define MR_RST 0x80 /**< reset */
  138. #define MR_WOL 0x20 /**< Wake on Lan */
  139. #define MR_PB 0x10 /**< ping block */
  140. #define MR_PPPOE 0x08 /**< enable pppoe */
  141. #define MR_UDP_FARP 0x02 /**< enbale FORCE ARP */
  142. /* IR register values */
  143. #define IR_CONFLICT 0x80 /**< check ip confict */
  144. #define IR_UNREACH 0x40 /**< get the destination unreachable message in UDP sending */
  145. #define IR_PPPoE 0x20 /**< get the PPPoE close message */
  146. #define IR_MAGIC 0x10 /**< get the magic packet interrupt */
  147. #define IR_ALL 0xf0 /**< all interrupts */
  148. /* SIR/SIMR register values */
  149. #define SIR_SOCK7 0x80 /**< SOCK7 interrupt enable/mask */
  150. #define SIR_SOCK6 0x40 /**< SOCK6 interrupt enable/mask */
  151. #define SIR_SOCK5 0x20 /**< SOCK5 interrupt enable/mask */
  152. #define SIR_SOCK4 0x10 /**< SOCK4 interrupt enable/mask */
  153. #define SIR_SOCK3 0x08 /**< SOCK3 interrupt enable/mask */
  154. #define SIR_SOCK2 0x04 /**< SOCK2 interrupt enable/mask */
  155. #define SIR_SOCK1 0x02 /**< SOCK1 interrupt enable/mask */
  156. #define SIR_SOCK0 0x01 /**< SOCK0 interrupt enable/mask */
  157. #define SIR_SOCKALL 0xff /**< all SOCK interrupt enable/mask */
  158. /* Sn_MR values */
  159. #define Sn_MR_CLOSE 0x00 /**< unused socket */
  160. #define Sn_MR_TCP 0x01 /**< TCP */
  161. #define Sn_MR_UDP 0x02 /**< UDP */
  162. #define Sn_MR_IPRAW 0x03 /**< IP LAYER RAW SOCK */
  163. #define Sn_MR_MACRAW 0x04 /**< MAC LAYER RAW SOCK */
  164. #define Sn_MR_PPPOE 0x05 /**< PPPoE */
  165. #define Sn_MR_UCASTB 0x10 /**< Unicast Block in UDP Multicating*/
  166. #define Sn_MR_ND 0x20 /**< No Delayed Ack(TCP) flag */
  167. #define Sn_MR_MC 0x20 /**< Multicast IGMP (UDP) flag */
  168. #define Sn_MR_BCASTB 0x40 /**< Broadcast blcok in UDP Multicating */
  169. #define Sn_MR_MULTI 0x80 /**< support UDP Multicating */
  170. /* Sn_MR values on MACRAW MODE */
  171. #define Sn_MR_MIP6N 0x10 /**< IPv6 packet Block */
  172. #define Sn_MR_MMB 0x20 /**< IPv4 Multicasting Block */
  173. //#define Sn_MR_BCASTB 0x40 /**< Broadcast blcok */
  174. #define Sn_MR_MFEN 0x80 /**< support MAC filter enable */
  175. /* Sn_CR values */
  176. #define Sn_CR_OPEN 0x01 /**< initialize or open socket */
  177. #define Sn_CR_LISTEN 0x02 /**< wait connection request in tcp mode(Server mode) */
  178. #define Sn_CR_CONNECT 0x04 /**< send connection request in tcp mode(Client mode) */
  179. #define Sn_CR_DISCON 0x08 /**< send closing reqeuset in tcp mode */
  180. #define Sn_CR_CLOSE 0x10 /**< close socket */
  181. #define Sn_CR_SEND 0x20 /**< update txbuf pointer, send data */
  182. #define Sn_CR_SEND_MAC 0x21 /**< send data with MAC address, so without ARP process */
  183. #define Sn_CR_SEND_KEEP 0x22 /**< send keep alive message */
  184. #define Sn_CR_RECV 0x40 /**< update rxbuf pointer, recv data */
  185. #ifdef __DEF_IINCHIP_PPP__
  186. #define Sn_CR_PCON 0x23
  187. #define Sn_CR_PDISCON 0x24
  188. #define Sn_CR_PCR 0x25
  189. #define Sn_CR_PCN 0x26
  190. #define Sn_CR_PCJ 0x27
  191. #endif
  192. /* Sn_IR values */
  193. #ifdef __DEF_IINCHIP_PPP__
  194. #define Sn_IR_PRECV 0x80
  195. #define Sn_IR_PFAIL 0x40
  196. #define Sn_IR_PNEXT 0x20
  197. #endif
  198. #define Sn_IR_SEND_OK 0x10 /**< complete sending */
  199. #define Sn_IR_TIMEOUT 0x08 /**< assert timeout */
  200. #define Sn_IR_RECV 0x04 /**< receiving data */
  201. #define Sn_IR_DISCON 0x02 /**< closed socket */
  202. #define Sn_IR_CON 0x01 /**< established connection */
  203. /* Sn_SR values */
  204. #define SOCK_CLOSED 0x00 /**< closed */
  205. #define SOCK_INIT 0x13 /**< init state */
  206. #define SOCK_LISTEN 0x14 /**< listen state */
  207. #define SOCK_SYNSENT 0x15 /**< connection state */
  208. #define SOCK_SYNRECV 0x16 /**< connection state */
  209. #define SOCK_ESTABLISHED 0x17 /**< success to connect */
  210. #define SOCK_FIN_WAIT 0x18 /**< closing state */
  211. #define SOCK_CLOSING 0x1A /**< closing state */
  212. #define SOCK_TIME_WAIT 0x1B /**< closing state */
  213. #define SOCK_CLOSE_WAIT 0x1C /**< closing state */
  214. #define SOCK_LAST_ACK 0x1D /**< closing state */
  215. #define SOCK_UDP 0x22 /**< udp socket */
  216. #define SOCK_IPRAW 0x32 /**< ip raw mode socket */
  217. #define SOCK_MACRAW 0x42 /**< mac raw mode socket */
  218. #define SOCK_PPPOE 0x5F /**< pppoe socket */
  219. /* IP PROTOCOL */
  220. #define IPPROTO_IP 0 /**< Dummy for IP */
  221. #define IPPROTO_ICMP 1 /**< Control message protocol */
  222. #define IPPROTO_IGMP 2 /**< Internet group management protocol */
  223. #define IPPROTO_GGP 3 /**< Gateway^2 (deprecated) */
  224. #define IPPROTO_TCP 6 /**< TCP */
  225. #define IPPROTO_PUP 12 /**< PUP */
  226. #define IPPROTO_UDP 17 /**< UDP */
  227. #define IPPROTO_IDP 22 /**< XNS idp */
  228. #define IPPROTO_ND 77 /**< UNOFFICIAL net disk protocol */
  229. #define IPPROTO_RAW 255 /**< Raw IP packet */
  230. /****************************************************************************************/
  231. #define MAX_SOCK_NUM 8 /**< Maxmium number of socket */
  232. #define __DEF_IINCHIP_MAP_BASE__ 0x0000
  233. #define COMMON_BASE 0x0000
  234. #define __DEF_IINCHIP_MAP_TXBUF__ (COMMON_BASE + 0x8000) /* Internal Tx buffer address of the iinchip */
  235. #define __DEF_IINCHIP_MAP_RXBUF__ (COMMON_BASE + 0xC000) /* Internal Rx buffer address of the iinchip */
  236. //#define __DEF_IINCHIP_PPP
  237. #define IINCHIP_ISR_DISABLE()
  238. #define IINCHIP_ISR_ENABLE()
  239. #define DEVICE_ID "W5500"
  240. #define FW_VER_HIGH 1
  241. #define FW_VER_LOW 0
  242. /********************************************************/
  243. //Define the buffer len for w5500 and tcp
  244. #define W5500BUFLEN 1400
  245. /*********************************************************
  246. * iinchip access function
  247. *********************************************************/
  248. uint16_t getIINCHIP_RxMAX(uint8_t s);
  249. uint16_t getIINCHIP_TxMAX(uint8_t s);
  250. void IINCHIP_WRITE( uint32_t addrbsb, uint8_t data);
  251. uint8_t IINCHIP_READ(uint32_t addrbsb);
  252. uint16_t wiz_write_buf(uint32_t addrbsb,uint8_t* buf,uint16_t len);
  253. uint16_t wiz_read_buf(uint32_t addrbsb, uint8_t* buf,uint16_t len);
  254. void iinchip_init(void); // reset iinchip
  255. void sysinit(const uint8_t * tx_size,const uint8_t * rx_size); // setting tx/rx buf size
  256. /*********************************************************/
  257. void setMR(uint8_t val);
  258. void setGAR(uint8_t * addr); // set gateway address
  259. void setSUBR(uint8_t * addr); // set subnet mask address
  260. void setSHAR(uint8_t * addr); // set local MAC address
  261. void setSIPR(uint8_t * addr); // set local IP address
  262. void clearIR(uint8_t mask); // clear interrupt
  263. void setIR(uint8_t val);
  264. void setIMR(uint8_t val);
  265. void setSIR(uint8_t val);
  266. void setSIMR(uint8_t val);
  267. void setRTR(uint16_t timeout); // set retry duration for data transmission, connection, closing ...
  268. void setRCR(uint8_t retry); // set retry count (above the value, assert timeout interrupt)
  269. void setPHYCFGR(uint8_t val);
  270. uint8_t getMR( void );
  271. void getGAR(uint8_t * addr);
  272. void getSUBR(uint8_t * addr);
  273. void getSHAR(uint8_t * addr);
  274. void getSIPR(uint8_t * addr);
  275. uint8_t getIR( void );
  276. uint8_t getIMR( void );
  277. uint8_t getSIR( void );
  278. uint8_t getSIMR(void);
  279. uint8_t getPHYCFGR( void);
  280. uint8_t getVersion(void);
  281. /*********************************************************/
  282. uint8_t getSn_MR(SOCKET s);
  283. void setSn_MR(uint8_t s, uint8_t val);
  284. uint8_t getSn_CR(SOCKET s);
  285. void setSn_CR(uint8_t s, uint8_t val);
  286. uint8_t getSn_IR(SOCKET s); // get socket interrupt status
  287. void setSn_IR(uint8_t s, uint8_t val);
  288. uint8_t getSn_IMR(SOCKET s);
  289. void setSn_IMR(uint8_t s, uint8_t val);
  290. uint8_t getSn_SR(SOCKET s); // get socket status
  291. void setSn_MSS(SOCKET s, uint16_t Sn_MSSR); // set maximum segment size
  292. void setSn_TTL(SOCKET s, uint8_t ttl);
  293. uint16_t getSn_TX_FSR(SOCKET s); // get socket TX free buf size
  294. uint16_t getSn_RX_RSR(SOCKET s); // get socket RX recv buf size
  295. void setkeepalive(SOCKET s);
  296. void send_data_processing(SOCKET s, uint8_t *wizdata, uint16_t len);
  297. void recv_data_processing(SOCKET s, uint8_t *wizdata, uint16_t len);
  298. /*********************************************************/
  299. /**
  300. @brief WIZCHIP_OFFSET_INC on IINCHIP_READ/WRITE
  301. * case1.
  302. * IINCHIP_WRITE(RTR0,val);
  303. * IINCHIP_WRITE(RTR1,val);
  304. * case1.
  305. * IINCHIP_WRITE(RTR0,val);
  306. * IINCHIP_WRITE(WIZCHIP_OFFSET_INC(RTR0,1));
  307. */
  308. //#define WIZCHIP_OFFSET_INC(ADDR, N) (ADDR + (N<<8)) //< Increase offset address
  309. #endif