当前位置:   article > 正文

W5500网络模块与SPI总线_spi访问w5500用主模式

spi访问w5500用主模式

前言:需要了解的知识点有W5500,SPI,socket套接字流程,TCP/IP

 

我是通过给的源码来分析知识点的,这样子感觉目标明确一点,模块是在某宝买的,大概15块左右。

(之前用的是另一个模组串口转以太网的,但是不方便的地方就是不能通过屏幕的方式直接修改ip,或者是模式,而且在速度上因为串口转以太网模组要经过一个mcu,速度上比不过spi,所以就有了这篇博文)

先从寄存器和内存构成开始梳理

寄存器和内存构成

W5500有1个通用寄存器,8个Socket寄存器区,以及对应每个Socket的收/发缓存区。(每个区域均通过SPI数据帧的区域选择位BSB[4:0]来选取),下图显示了区域选择位选择的区域以及收/发缓存区可用的偏移地址范围。每个Socket的发送缓存区都在一个16KB的物理发送内存中,初始化分配为2KB。每个Socket的接收缓存区都在一个16KB的物理接收内存中,初始化分配为2KB,无论给每个 Socket 分配多大的收/ 发缓存,都必须在 16 位的偏移地址范围内(从0×0000 到 0xFFFF)。

W5500有一个16KB的发送内存用于Socket的发送缓存,以及一个16KB的接收内存用于Socket的接收缓存区。16KB的发送内存初始化被分配为每个2KB的发送缓存区。初 始化分配的 2KB Socket 发送缓存 , 可以通过使用 Socket 发送缓存大小寄存器(Sn_TXBUF_SIZE)重新分配。(具体介绍看下面Socket端口寄存器介绍

16KB 的读取内存的分派方式与 16KB 的发送内存一样。 16KB 的接收内存初始化被分配 为每个Socket 2KB 接收缓存区(2KB X 8 = 16KB)。初始化分配的 2KB Socket 接收缓存,可 以通过使用Socket 接收缓存大小寄存器(Sn_XBUF_SIZE)重新分配。  
 

寄存器及内存构成

通用寄存器

  1. MR (模式寄存器- Mode Register) [R/W] [0x0000] [0x00]2  , 该寄存器用于 S/W 复位, ping block 模式和 PPPoE 模式
  2. GAR (网关 IP 地址寄存器) [R/W] [0x0001 – 0x0004] [0x00]  ,该寄存器用来设置默认网关地址
  3. SUBR (子网掩码寄存器) [R/W] [0x0005 – 0x0008] [0x00]  ,该寄存器用来设置子网掩码地址
  4. SHAR (源 MAC 地址寄存器) [R/W] [0x0009 – 0x000E] [0x00]  ,该寄存器用来设置源 MAC 地址
  5. SIPR (源 IP 地址寄存器) [R/W] [0x000F – 0x0012] [0x00]  , 该寄存器用来设置源 IP 地址
  6. INTLEVEL (低电平中断定时器寄存器) [R/W] [0x0013 – 0x0014] [0x0000]
  7. IR (中断寄存器) [R/W] [0x0015] [0x00]
  8. IMR (中断屏蔽寄存器) [R/W][0x0016][0x00]
  9. SIR (Socket 中断寄存器) [R/W] [0x0017] [0x00]
  10. SIMR (Socket 中断屏蔽寄存器) [R/W] [0x0018] [0x00]

。。。。。。。。。(太多了还是看手册吧

  下面介绍通用寄存器的一小部分。

     2. GAR (网关 IP 地址寄存器) 

    

    (子网掩码,源IP,MAC都是差不多的)

     7. IR(中断寄存器)

      中断寄存器(IR)指明了中断的状态。 IR 的每一位都是‘0’,直到被主机写为‘1’.如果 IR 不等于‘0×00’, INTn 引脚将会被拉低。直到其变为‘0×00’时, INTn 才会被 拉高
      

     8. IMR (中断屏蔽寄存器) [R/W][0x0016][0x00]

     中断屏蔽寄存器(IMR)用来屏蔽中断源。每个中断屏蔽位对应中断寄存器(IR)中的 一个位。如果中断屏蔽位被置“1”时,无论何时 IR 对应的位也置”1”,中断即会产生。换而言之, 当 IMR 中屏蔽位被清“0”。即使对应的 IR 中断位置“1”,也不会产生中断。

      
 

Socket端口寄存器

  1. Sn3_MR (Socket n 模式寄存器) [R/W] [0x0000] [0x00]
  2. Sn_CR (Socket n 配置寄存器) [R/W] [0x0001] [0x00]
  3. Sn_IR (Socket n 中断寄存器) [R] [0x0002] [0x00]
  4. Sn_SR (Socket n 状态寄存器) [R] [0x0003] [0x00]
  5. Sn_PORT (Socket n 源端口寄存器) [R/W] [0x0004-0x0005] [0x0000]
  6. Sn_DHAR (Socket n 目的 MAC 地址寄存器) [R/W] [0x0006-0x000B] [0xFFFFFFFFFFFF]
  7. Sn_DIPR (Socket 目标 IP 地址寄存器) [R/W] [0x000C-0x000F] [0x00000000]
  8. Sn_DPORT (Socket n 目标端口寄存器) [R/W] [0x0010-0x0011] [0x00]
  9. Sn_MSSR (Socket n-th 最大分段寄存器) [R/W] [0x0012-0x0013] [0x0000]
  10. Sn_TOS (Socket IP 服务类型寄存器) [R/W] [0x0015] [0x00]
  11. Sn_TTL (Socket IP 生存时间寄存器) [R/W] [0x0016] [0x80]
  12. Sn_RXBUF_SIZE(Socket n 接收缓存大小寄存器) [R/W] [0x001E] [0x02]
  13. Sn_TXBUF_SIZE (Socket n 发送缓存大小寄存器) [R/W] [0x001F] [0x02]
  14. Sn_TX_FSR (Socket n 空闲发送缓存寄存器) [R] [0x0020-0x0021] [0x0800]
  15. Sn_TX_RD (Socket n 发送读指针寄存器) [R] [0x0022-0x0023] [0x0000]
  16. Sn_TX_WR (Socket n 发送写指针寄存器) [R/W] [0x0024-0x0025] [0x0000]
  17. Sn_RX_RSR (Socket n 空闲接收缓存寄存器) [R] [0x0026-0x0027] [0x0000]
  18. Sn_RX_RD (Socket n 接收读指针寄存器) [R/W] [0x0028-0x0029] [0x0000]
  19. Sn_RX_WR (Socket n 接收写指针寄存器) [R] [0x002A-0x002B] [0x0000]
  20. Sn_IMR (Socket n 中断屏蔽寄存器) [R/W] [0x002C] [0xFF]
  21. Sn_FRAG (Socket n 分段寄存器) [R/W] [0x002D-0x002E] [0x4000]
  22. Sn_KPALVTR (Socket 在线时间寄存器) [R/W] [0x002F] [0x00]

  (建议去看手册,实在是太长了,不然我就要抄书了)

   12. Sn_RXBUF_SIZE(Socket n 接收缓存大小寄存器) [R/W] [0x001E] [0x02]

    Sn_RXBUF_SIZE 配置了 Socket n 的接收缓存大小。 Socket n 接收缓存区大小可以配置 为 1, 2,
4, 8 和 16Kbytes。如果配置为其他大小,则 W5500 不能正常的从对方主机接 收数据。即使 Socket n 的 接收 缓存 大 小初始 默认为 2Kbytes 。 用户仍 然可 以 使用Sn_RXBUF_SIZE 重新定义。但是所有 Socket 接收缓存(Sn_RXBUF_SIZE)的总大小不能 超过16Kbytes。否则,将会使得接收异常。当 所 有 的 Sn_RXBUF_SIZE 配 置 完 成 后 , 就 会 按 照 Socket 0 到 7 的 顺 序 依 次将16Kbytes 的接收内存分配给各个 Socket 作为接收缓存使用。不论 Socket n 的接收缓存配置的大小如何,都可以被 16 位的偏移地址寻址找到。(寻 址范围:0×0000 到 0xFFFF)
    

    例子:Socket 0 RX Buffer Size = 8KB

    

    13. Sn_TXBUF_SIZE (Socket n 发送缓存大小寄存器) [R/W] [0x001F] [0x02]

    与接收缓存大小寄存器同理

    15.  Sn_TX_RD (Socket n 发送读指针寄存器) [R] [0x0022-0x0023] [0x0000]

    Sn_TX_RD 寄存器可以通过 OPEN 配置命令进行初始化。

    如果是TCP模式,该寄存器将会在TCP连接期间,重新进行初始化。该寄存器初始化之后,会根据SEND配置命令自增。SEND配置命令传输的是Socket n发送缓存中,当前Sn_TX_RD到Sn_TX_WR之间保存的数据。在传输完保存的数据之后。SEND配置命令会使得Sn_TX_RD等于Sn_TX_WR。

     16. Sn_TX_WR (Socket n 发送写指针寄存器) [R/W] [0x0024-0x0025] [0x0000]

     Sn_TX_WD寄存器可以通过OPEN配置命令进行初始化。

     在TCP模式下该寄存器会在TCP连接期间重新初始化。该寄存器需要读取或者更新如下:

  1. 读取发送缓存中将要保存传输数据的首地址、
  2. 从Socket n的发送缓存对应的首地址开始,保存需要传输的数据
  3. 在保存完传输数据之后,将 Sn_TX_WR 的值增加到传输数据大小。如果增加后, 超过最大值0xFFFF(比 0×10000 大且产生进位),那么将自动忽略进位,并自动 更新为低 16 位的值
  4. 通过使用 SEND 命令发送保存在 Socket n 发送缓存中的数据

    18. Sn_RX_RD (Socket n 接收读指针寄存器) [R/W] [0x0028-0x0029] [0x0000]

    Sn_RX_RD寄存器可以通过OPEN配置命令进行初始化。请确保该寄存器按照以下步骤读取并更新:

  1. 读取保存在接收缓存中数据的首地址
  2. 从保存在Socket n接收缓存中数据的首地址开始读取数据
  3. 在读取完毕接收数据,将 Sn_RX_RD 的值更新为所读数据大小。如果增加后的值 超过最大值0xFFFF,即超过 0×10000 并产生进位,将会忽略进位,只取低 16 位 值。
  4. 在接收到 RECV 命令后,将更新后的 Sn_RX_RD 值告知 W5500.

     19. Sn_RX_WR (Socket n 接收写指针寄存器) [R] [0x002A-0x002B] [0x0000]

     Sn_RX_WR 寄存器可以通过 OPEN 配置命令进行初始化。并且随着数据接收自动增加。 如果
Sn_RX_WR 的值增长到超过最大值 0xFFFF(即超过 0×10000 并产生进位) ,那么
将自动忽略进位,并自动更新为低 16 位的值。

主机接口

W5500提供了SPI(串行外部接口)作为外设主机接口,共有SCSn,SCLK,MOSI,MISO 4路信号。

W5500与MCU的连接方式如下图,由于主要有两种工作模式,所以连接方式上也有点差异

SPI协议定义了四种工作模式。每种模式的区别就是根据SCLK的极性及相位的不同定义的。

W5500支持SPI模式0及模式3  MOSI 和 MISO 信号无论是接收或发送,均遵从从最高标志位(MSB)到最低标志位(LSB)的传输序列

SPI模式0和模式3

SPI工作模式

   W5500与外设主机通信受到SPI数据帧控制

   W5500的帧分为3段:地址段,控制段,数据段

   地址段:为W5500寄存器或TX/RX内存指定了16位的偏移地址。SPI 数据帧的数据段(2/4/N 字节)通过偏移地址自增(每传输 1 字节偏移地址加 1) 支持连续数据读/写

   控制段:指定了地址段设定的偏移区域的归属,读写访问模式以及SPI工作模式(可变长度模式/固定长度模式)

SPI数据帧控制段对应位说明

   BSB[4:0]:区域选择位

   RWB:读/写访问模式 0:读  1:写

   OM[1:0]:SPI工作模式

   

数据段:可以设定为任意长度(N-字节, 1≤N)或者是固定的长度: 1 字节, 2 字节 或 4 字节;如果SPI 工作模式设置为可变数据长度模式(VDM), SPI 的 SCSn 信号需要由外部 主机通过 SPI 帧控制

   在可变数据长度模式下,SCSn控制SPI帧的开始和停止

SCSn 信号拉低(高电平到低电平),即代表 W5500 的 SPI 帧开始(地址段);
SCSn 信号拉高(低电平到高电平),即代表 W5500 的 SPI 帧结束(数据段的随机 N 字节数据结尾);


可变数据长度模式

  写访问--VDM模式

   

  1. #ifndef _W5500_H_
  2. #define _W5500_H_
  3. /***************** Common Register *****************/
  4. #define MR 0x0000
  5. #define RST 0x80 /*1:内部寄存器将被初始化置位*/
  6. #define WOL 0x20 /*0:关闭网络唤醒 1:开启网络唤醒*/
  7. #define PB 0x10 /*0:关闭ping 1:开启ping*/
  8. #define PPP 0x08 /*0:关闭PPPoE 1:开启PPPoE*/
  9. #define FARP 0x02 /*0:关闭强迫ARP模式 1:开启强迫ARP模式*/
  10. #define GAR 0x0001 /*网关IP地址寄存器,占用4字节*/
  11. #define SUBR 0x0005 /*子网掩码寄存器*/
  12. #define SHAR 0x0009 /*源MAC地址寄存器*/
  13. #define SIPR 0x000f /*源IP地址寄存器*/
  14. #define INTLEVEL 0x0013 /*低电平中断定时器寄存器*/
  15. #define IR 0x0015 /*中断寄存器*/
  16. #define CONFLICT 0x80 /*IP冲突:在收到ARP请求时,发现发送方IP与本地IP冲突,该位被置1*/
  17. #define UNREACH 0x40 /*ICMP目标不可达,该位被置1*/
  18. #define PPPOE 0x20 /*PPPoE连接关闭,PPPoE模式下连接断开,该位生效*/
  19. #define MP 0x10 /*当网络唤醒模式启用并通过UDP接收到网络唤醒包时,该位生效*/
  20. #define IMR 0x0016 /*中断屏蔽寄存器 0:关闭 1:开启*/
  21. #define IM_IR7 0x80 /*IP冲突中断屏蔽*/
  22. #define IM_IR6 0x40 /*目的地址不能抵达中断屏蔽*/
  23. #define IM_IR5 0x20 /*PPPoE关闭中断屏蔽*/
  24. #define IM_IR4 0x10 /*Magic Packet中断屏蔽*/
  25. #define SIR 0x0017 /*Socket 中断寄存器*/
  26. #define S7_INT 0x80
  27. #define S6_INT 0x40
  28. #define S5_INT 0x20
  29. #define S4_INT 0x10
  30. #define S3_INT 0x08
  31. #define S2_INT 0x04
  32. #define S1_INT 0x02
  33. #define S0_INT 0x01
  34. #define SIMR 0x0018 /*Socket 中断屏蔽寄存器*/
  35. #define S7_IMR 0x80 /*与SIR相对应,SIMR 为‘1’,SIR的对应位为‘1’时,中断将被触发*/
  36. #define S6_IMR 0x40 /*SIMR的一位为‘0’,那么即使 SIR 对应 位为’1’,中断将不会被触发*/
  37. #define S5_IMR 0x20
  38. #define S4_IMR 0x10
  39. #define S3_IMR 0x08
  40. #define S2_IMR 0x04
  41. #define S1_IMR 0x02
  42. #define S0_IMR 0x01
  43. #define RTR 0x0019 /*重试时间值寄存器*/
  44. #define RCR 0x001b /*重试计数寄存器*/
  45. #define PTIMER 0x001c /*PPP 连接控制协议请求定时寄存器*/
  46. #define PMAGIC 0x001d /*PPP 连接控制协议幻数寄存器*/
  47. #define PHA 0x001e /*PPPoE 模式下目标 MAC 寄存器*/
  48. #define PSID 0x0024 /*PPPoE 模式下会话 ID 寄存器*/
  49. #define PMRU 0x0026 /*PPPoE 模式下最大接收单元*/
  50. #define UIPR 0x0028 /*无法抵达 IP 地址寄存器*/
  51. #define UPORT 0x002c /*无法抵达端口寄存器*/
  52. #define PHYCFGR 0x002e /*W5500 PHY 配置寄存器*/
  53. #define RST_PHY 0x80 /*当该位为0时,内部PHY重启*/
  54. #define OPMODE 0x40 /*配置PHY工作模式*/
  55. #define DPX 0x04 /*工作模式配置位*/
  56. #define SPD 0x02 /*双工模式配置位*/
  57. #define LINK 0x01 /*速度状态*/
  58. #define VERR 0x0039 /*W5500 芯片版本寄存器*/
  59. /********************* Socket Register *******************/
  60. #define Sn_MR 0x0000 /*Socket n 模式寄存器*/
  61. #define MULTI_MFEN 0x80 /*UDP多播模式 0:关闭多播 1:开启多播 在MACRAW模式下开启MAC地址过滤0:关闭 1:开启*/
  62. #define BCASTB 0x40 /*MACRAW和UDP模式下的网络阻塞 0:关闭广播阻塞 1:开启广播阻塞*/
  63. #define ND_MC_MMB 0x20 /*使用无延时ACK 0:关闭 1:开启......*/
  64. #define UCASTB_MIP6B 0x10
  65. #define MR_CLOSE 0x00
  66. #define MR_TCP 0x01 /*协议*/
  67. #define MR_UDP 0x02
  68. #define MR_MACRAW 0x04
  69. #define Sn_CR 0x0001 /*Socket n 配置寄存器*/
  70. #define OPEN 0x01 /*0001 TCP 0010 UDP*/
  71. #define LISTEN 0x02
  72. #define CONNECT 0x04
  73. #define DISCON 0x08
  74. #define CLOSE 0x10
  75. #define SEND 0x20
  76. #define SEND_MAC 0x21
  77. #define SEND_KEEP 0x22
  78. #define RECV 0x40
  79. #define Sn_IR 0x0002 /*(Socket n 中断寄存器*/
  80. #define IR_SEND_OK 0x10
  81. #define IR_TIMEOUT 0x08
  82. #define IR_RECV 0x04
  83. #define IR_DISCON 0x02
  84. #define IR_CON 0x01
  85. #define Sn_SR 0x0003 /*Socket n 状态寄存器*/
  86. #define SOCK_CLOSED 0x00
  87. #define SOCK_INIT 0x13
  88. #define SOCK_LISTEN 0x14
  89. #define SOCK_ESTABLISHED 0x17
  90. #define SOCK_CLOSE_WAIT 0x1c
  91. #define SOCK_UDP 0x22
  92. #define SOCK_MACRAW 0x02
  93. #define SOCK_SYNSEND 0x15
  94. #define SOCK_SYNRECV 0x16
  95. #define SOCK_FIN_WAI 0x18
  96. #define SOCK_CLOSING 0x1a
  97. #define SOCK_TIME_WAIT 0x1b
  98. #define SOCK_LAST_ACK 0x1d
  99. #define Sn_PORT 0x0004 /*Socket n 源端口寄存器*/
  100. #define Sn_DHAR 0x0006 /*Socket n 目的 MAC 地址寄存器*/
  101. #define Sn_DIPR 0x000c /*Socket 目标 IP 地址寄存器*/
  102. #define Sn_DPORTR 0x0010 /*Socket n 目标端口寄存器*/
  103. #define Sn_MSSR 0x0012 /*Socket n-th 最大分段寄存器*/
  104. #define Sn_TOS 0x0015 /*Socket IP 服务类型寄存器*/
  105. #define Sn_TTL 0x0016 /*Socket IP 生存时间寄存器*/
  106. #define Sn_RXBUF_SIZE 0x001e /*Socket n 发送缓存大小寄存器*/
  107. #define Sn_TXBUF_SIZE 0x001f
  108. #define Sn_TX_FSR 0x0020 /*Socket n 空闲发送缓存寄存器*/
  109. #define Sn_TX_RD 0x0022 /*Socket n 发送读指针寄存器*/
  110. #define Sn_TX_WR 0x0024 /*Socket n 发送写指针寄存器*/
  111. #define Sn_RX_RSR 0x0026 /*Socket n 空闲接收缓存寄存器*/
  112. #define Sn_RX_RD 0x0028 /*Socket n 接收读指针寄存器*/
  113. #define Sn_RX_WR 0x002a /*Socket n 接收写指针寄存器*/
  114. #define Sn_IMR 0x002c /*Socket n 中断屏蔽寄存器*/
  115. #define IMR_SENDOK 0x10
  116. #define IMR_TIMEOUT 0x08
  117. #define IMR_RECV 0x04
  118. #define IMR_DISCON 0x02
  119. #define IMR_CON 0x01
  120. #define Sn_FRAG 0x002d /*Socket n 分段寄存器*/
  121. #define Sn_KPALVTR 0x002f /*Socket 在线时间寄存器*/
  122. /*******************************************************************/
  123. /************************ SPI Control Byte *************************/
  124. /*******************************************************************/
  125. /* Operation mode bits */
  126. #define VDM 0x00
  127. #define FDM1 0x01
  128. #define FDM2 0x02
  129. #define FDM4 0x03
  130. /* Read_Write control bit */
  131. #define RWB_READ 0x00
  132. #define RWB_WRITE 0x04
  133. /* Block select bits */
  134. #define COMMON_R 0x00
  135. /* Socket 0 */
  136. #define S0_REG 0x08
  137. #define S0_TX_BUF 0x10
  138. #define S0_RX_BUF 0x18
  139. /* Socket 1 */
  140. #define S1_REG 0x28
  141. #define S1_TX_BUF 0x30
  142. #define S1_RX_BUF 0x38
  143. /* Socket 2 */
  144. #define S2_REG 0x48
  145. #define S2_TX_BUF 0x50
  146. #define S2_RX_BUF 0x58
  147. /* Socket 3 */
  148. #define S3_REG 0x68
  149. #define S3_TX_BUF 0x70
  150. #define S3_RX_BUF 0x78
  151. /* Socket 4 */
  152. #define S4_REG 0x88
  153. #define S4_TX_BUF 0x90
  154. #define S4_RX_BUF 0x98
  155. /* Socket 5 */
  156. #define S5_REG 0xa8
  157. #define S5_TX_BUF 0xb0
  158. #define S5_RX_BUF 0xb8
  159. /* Socket 6 */
  160. #define S6_REG 0xc8
  161. #define S6_TX_BUF 0xd0
  162. #define S6_RX_BUF 0xd8
  163. /* Socket 7 */
  164. #define S7_REG 0xe8
  165. #define S7_TX_BUF 0xf0
  166. #define S7_RX_BUF 0xf8
  167. #define TRUE 0xff
  168. #define FALSE 0x00
  169. #define S_RX_SIZE 2048 /*定义Socket接收缓冲区的大小,可以根据W5500_RMSR的设置修改 */
  170. #define S_TX_SIZE 2048 /*定义Socket发送缓冲区的大小,可以根据W5500_TMSR的设置修改 */
  171. /***************----- W5500 GPIO定义 -----***************/
  172. #define W5500_SCS GPIO_Pin_4 //定义W5500的CS引脚
  173. #define W5500_SCS_PORT GPIOA
  174. #define W5500_RST GPIO_Pin_5 //定义W5500的RST引脚
  175. #define W5500_RST_PORT GPIOC
  176. #define W5500_INT GPIO_Pin_4 //定义W5500的INT引脚
  177. #define W5500_INT_PORT GPIOC
  178. /***************----- 网络参数变量定义 -----***************/
  179. extern unsigned char Gateway_IP[4]; //网关IP地址
  180. extern unsigned char Sub_Mask[4]; //子网掩码
  181. extern unsigned char Phy_Addr[6]; //物理地址(MAC)
  182. extern unsigned char IP_Addr[4]; //本机IP地址
  183. extern unsigned char S0_Port[2]; //端口0的端口号(5000)
  184. extern unsigned char S0_DIP[4]; //端口0目的IP地址
  185. extern unsigned char S0_DPort[2]; //端口0目的端口号(6000)
  186. extern unsigned char UDP_DIPR[4]; //UDP(广播)模式,目的主机IP地址
  187. extern unsigned char UDP_DPORT[2]; //UDP(广播)模式,目的主机端口号
  188. /***************----- 端口的运行模式 -----***************/
  189. extern unsigned char S0_Mode; //端口0的运行模式,0:TCP服务器模式,1:TCP客户端模式,2:UDP(广播)模式
  190. #define TCP_SERVER 0x00 //TCP服务器模式
  191. #define TCP_CLIENT 0x01 //TCP客户端模式
  192. #define UDP_MODE 0x02 //UDP(广播)模式
  193. /***************----- 端口的运行状态 -----***************/
  194. extern unsigned char S0_State; //端口0状态记录,1:端口完成初始化,2端口完成连接(可以正常传输数据)
  195. #define S_INIT 0x01 //端口完成初始化
  196. #define S_CONN 0x02 //端口完成连接,可以正常传输数据
  197. /***************----- 端口收发数据的状态 -----***************/
  198. extern unsigned char S0_Data; //端口0接收和发送数据的状态,1:端口接收到数据,2:端口发送数据完成
  199. #define S_RECEIVE 0x01 //端口接收到一个数据包
  200. #define S_TRANSMITOK 0x02 //端口发送一个数据包完成
  201. /***************----- 端口数据缓冲区 -----***************/
  202. extern unsigned char Rx_Buffer[2048]; //端口接收数据缓冲区
  203. extern unsigned char Tx_Buffer[2048]; //端口发送数据缓冲区
  204. extern unsigned char W5500_Interrupt; //W5500中断标志(0:无中断,1:有中断)
  205. typedef unsigned char SOCKET; //自定义端口号数据类型
  206. extern void Delay(unsigned int d); //延时函数(ms)
  207. extern void W5500_GPIO_Configuration(void); //W5500 GPIO初始化配置
  208. extern void W5500_NVIC_Configuration(void); //W5500 接收引脚中断优先级设置
  209. extern void SPI_Configuration(void); //W5500 SPI初始化配置(STM32 SPI1)
  210. extern void W5500_Hardware_Reset(void); //硬件复位W5500
  211. extern void W5500_Init(void); //初始化W5500寄存器函数
  212. extern unsigned char Detect_Gateway(void); //检查网关服务器
  213. extern void Socket_Init(SOCKET s); //指定Socket(0~7)初始化
  214. extern unsigned char Socket_Connect(SOCKET s); //设置指定Socket(0~7)为客户端与远程服务器连接
  215. extern unsigned char Socket_Listen(SOCKET s); //设置指定Socket(0~7)作为服务器等待远程主机的连接
  216. extern unsigned char Socket_UDP(SOCKET s); //设置指定Socket(0~7)为UDP模式
  217. extern unsigned short Read_SOCK_Data_Buffer(SOCKET s, unsigned char *dat_ptr);//指定Socket(0~7)接收数据处理
  218. extern void Write_SOCK_Data_Buffer(SOCKET s, unsigned char *dat_ptr, unsigned short size); //指定Socket(0~7)发送数据处理
  219. extern void W5500_Interrupt_Process(void); //W5500中断处理程序框架
  220. #endif

  
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/659568
推荐阅读
相关标签
  

闽ICP备14008679号