zl程序教程

您现在的位置是:首页 >  其他

当前栏目

w5500调试小记

调试 小记
2023-09-11 14:15:08 时间

w5500是全硬件 TCP/IP 嵌入式以太网控制器,W5500 集成了 TCP/IP 协议栈,10/100M 以太网数据链路层(MAC)及物理层(PHY),TCP/IP 协议栈支持 TCP,UDP,IPv4,ICMP,ARP,IGMP 以及 PPPoE 协议,w5500 内嵌 32K 字节片上缓存以供以太网包处理。如果你使用 W5500,你只需要一些简单的 Socket 编程就能实现以太网应用。

W5500 提供了 SPI(外设串行接口)从而能够更加容易与外设 MCU 整合。而且,W5500 的使用了新的高效 SPI 协议支持 80MHz 速率,

特点
- 支持硬件 TCP/IP 协议:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE
- 支持 8 个独立端口(Socket)同时通讯
- 支持掉电模式
- 支持网络唤醒
- 支持高速串行外设接口(SPI 模式 0,3)
- 内部 32K 字节收发缓存
- 内嵌 10BaseT/100BaseTX 以太网物理层(PHY)
- 支持自动协商(10/100-Based 全双工/半双工)
- 不支持 IP 分片
- 3.3V 工作电压,I/O 信号口 5V 耐压
- LED 状态显示(全双工/半双工,网络连接,网络速度,活动状态)
- LQFP48 无铅封装(7x7mm,间距 0.5mm)

上面规格书的大致说明,在项目中,配置了spi的mode0,速率比上面提到的慢很多,500k左右,,w5500本身默认是全功能,自然就支持全双工了,另外还有一个引脚,可以根据寄存器的配置而出发中断,低电平有效,高电平无中断。在stm32中只能配置下降沿中断。

另外,tcp协议是有三次握手和四次分手的特性,而且接受法收到信息都要返回ack用以确认,因此tcp是可靠连接方式,udp是不可靠的,因此tcp协议为了达到可靠性,增加了很多特写,重发机制,滑动窗口,快速重发等等,难怪有tcpip详解的书籍,那可是圣经了。

在w5500中,有两个寄存器设置,就是rtr和rcr,默认是200ms,8次,我实际配置200ms3次,

 

 

RTR ( 重试时间值寄存器 ) [R/W] [0x0019 – 0x001A] [0x07 D0]
RTR 配置了重传超时的时间值。每一单位数值为 100 微秒。初始化时值设为
2000(0x07D0),即相当于 200 毫秒(100us X 2000)。
在 RTR 配置的时间内,W5500 等待 Sn-CR(CONNECT, DISCON, CLOSE, SEND,
SEND_MAC, SEND_KEEP command)传输后,来自对方的回应。如果在 RTR 时间段内
没有回应,W5500 进行包重传或触发超时中断。
例如:当超时周期别设置为 400ms 时,RTR=(400ms/1ms)X10=4000(0x0FA0)
0x0019 0x001A
0x0F 0xA0
RCR ( 重试计数寄存器 ) [R/W] [0x001B] [0x08]
该寄存器是设置重新传送的次数。当第‘RCR+1’次重传时,超时中断就会置
‘1’。(中断寄存器(Sn_IR)的‘中断’位(‘TIMEOUT’bit)设置为'1')。
例如:RCR = 0x0007
0x001B
0x07
W5500 的超时可以用 RTR 和 RCR 来配置。W5500 的超时包括地址解析协议(ARP)
和 TCP 重新传送超时。

 

 

另外还有一个

 

ND/MC/
MMB
时 使用无延时 ACK
Use No Delayed ACK
0:关闭无延时 ACK 选项
1:开启无延时 ACK 选项
该位只有在 TCP 模式下(P[3:0] = ‘0001’)才能生效。
当该位设置为‘1’时,W5500 会在从对端接收到数据包后没有任何延时尽快地回复 ACK 包。当该位为‘0’,W5500 发送 ACK 包需要 RTR 设定的超时时间做延时。

这个我配置了无延时ack,好像还是有延时ack稳定。

另外,tcpip协议是只是一个统称,里面有很多协议,ip地址这个很容易理解,端口号,以前不是很理解,现在理解了,就是给一个应用的端口,一个ip里面有很多程序,那么这个数据包给谁解析,就靠端口号来判断。

以上就是一点点记录。

 

另外,网上有很多驱动,有查询方式的,有中断方式,目前中断方式的通信测试比较稳定,端口号也是稳定