Answers to the most frequently asked questions.
R:WIZnet芯片是硬件协议栈芯片,有别于软件协议栈,如果芯片不主动往网络中发包,在TCP_Server模式下是不会有任何数据包发送的,这样会造成路由ARP表中无法形成IP和MAC的对应关系。
A:在芯片上电时往任意IP发送一个UDP数据包,从而更新路由器的ARP表,形成匹配关系,后续通讯就正常了。
R:这是由于客户端没有主动发送断开连接请求,造成服务器并不知道socket已发生异常断开;重新上电之后,芯片以相同的IP和端口连接服务器,而服务器还认为此socket链接存在,所以拒绝芯片的立即链接。
A:可以在芯片使用KEEP_ALIVE机制,一段时间内自动发送呼吸包,
A:可以在主循环中加入判断PHY链路状态检测的处理流程,如果PHY状态发生异常,则释放掉所有的socket资源,并重新初始化socket。
A:芯片作为TCP_Server模式,最多可以允许socket数量的Client进行连接,同时需要将所有的socket都初始化。
A:芯片和PC通讯的话可以直接通过Wireshark抓包,如果芯片和公网直接通讯或者芯片与芯片通讯,则PC端没有办法直接抓包,需要借助抓包交换机,将两端都接入到抓包交换机的被监控口,PC端接入到抓包交换的监控口,再通过抓包工具进行抓包。
A:不能使用以往的经验电路,请严格按照WIZnet给出的参考设计进行硬件设计。有的客户反馈使用原有的经验电路可以正常通讯,但是有可能发生在实验室正常,客户现场连接不上的情况,所以建议所有客户都使用官方的参考设计。
A:W5500的以太网接口的四根线,按照正常的线路连接,必须通过过孔交叉线序;按照以太网布局规范,需要等长差分走线。而且需要尽量少的过孔,可以适当的做P-N交叉,即TXP-TXN交叉,RXP-RXN交叉,以符合以太网布局规范的要求。
A:WIZnet芯片打开WOL功能只需要置位MR寄存器的WOL位,不需要外部设定,唤醒方法为向WIZnet芯片的UDP端口发送Magic数据包(0xffffffffffff+16个目标的MAC地址)。芯片收到Magic数据包后,IR寄存器的WOL位会置1。(注意:WOL功能不能和掉电模式同时开启)
A: 1.需要在打开socket之前,先指定目标MAC地址为组播MAC地址,定义规则如下: 2.打开一个支持UDP组播的socket,目标IP为组播地址 3.然后就可以进行UDP组播传输 注意:如果没有定时发送”维持UDP组播“的数据包的话就会被清出组播组,可以定时执行打开步骤2的socket指令,因为打开和位置UDP组播的数据包是完全一样的。
R:这是一位内HTML代码和浏览器的兼容性问题。 A:在HTML开发的时候使用JavaScript判断浏览器的内核版本,然后做出针对性的样式。
A:如果只在内网通讯的话,MAC地址可以自定义,MAC地址不与局域网中的设备重复即可。注意不要设置为组播地址即可(即MAC地址首字节为奇数)。 如果要进行公网通讯,网关会通过NAT功能将网关的MAC地址和IP对数据包中的MAC和IP进行替换再进行公网通讯,所以不会造成公网中的MAC冲突问题。但如果要求比较严格,则需要从IEEE申请全球唯一的MAC地址。
根据ICMP协议,request包的大小为128byte,reply包比request包大8byte,为136byte。客户可以分别定义两个Buffer[128]和Buffer[136]分别对应request包和reply包,也可以公用一个Buffer[136],但不能发送和接收同时使用同一个128byte的Buffer,否则可能会造成接收数据不全,无法解析。
R:W5500收到数据后会产生RECV中断,当回环测试时,收到数据后又将同一包数据发送了出去,所以不仅要清除RECV中断,还要清除SEND_OK中断。 A:回环测试需要在收到数据回环发送出去后清除SEND_OK中断,也可以采用单向测试方式。
A:STM32F103的主频最大为72MHz,SPI接口的最高频率限制为18MHz,而W5500的SPI时钟最高可达80MHz,所以无法完全发挥出W5500的性能。
A:当使用WIZnet做内部数据通讯或者需要使用板载的switch电路时,需要用到PHY-PHY电路,它的要点就是使用耦合电容隔离两端的PHY,并加入两个PHY各自的偏执电路,类似如下的设计:
A:在特殊的应用场景下,客户需要用网线将所有的节点级联在一起,这种应用需要使用到switch芯片,例如IP175G,可以按照下图所示链接:
R:无法通过低温测试的表现通常为-40℃时无法正常工作,WIZnet的以太网芯片都是工业级芯片,满足-40℃~85℃,当板子上其他元器件不满足这个要求时,也会导致无法正常工作。 A:建议检查晶振以及网络变压器等周边期间是否满足工业级温度要求。
R:WIZnet大多数芯片的IO时兼容5V电平的,可以和5V电平的MCU直接通讯。 A:但是为了保险,我们建议在各个IO上串接一个限流电阻,比如10~100欧姆,防止过流损坏。
A:可以参考以下Linux驱动进行修改:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/drivers/net/ethernet/wiznet/w5100-spi.c?id=35ef7d689d7d54ab345b179e50c749fe3a2529eb
A:所谓的IP分片是指,当IP数据包草果帧的MTU(最大传输单元)时,它将会被分片传输。分片能发生在发送端或者中转路由器,且在传输过程中可能会被多次分片。在最后的目标机器上这些分片才会被内核的IP模块重新组装。 WIZnet芯片都不支持IP分片,不能发送支持IP分片的数据包,只能按照MTU发送数据。如果对方设备给WIZnet芯片发送IP分片的数据包的话,WIZnet芯片可以正常接收,但是不会自动合并成一个数据包。
A:有些特殊场景下,客户需要所有的设备都屏蔽掉PING包回复,WIZnet芯片可以通过设置MR寄存器的PING Response Block来屏蔽PING包回复,如下图所示:
A:W5100S支持SOCKET-less指令,只需要设置相关的寄存器就可以方便的实现ARP,无需像W5500一样用socket实现。具体步骤如下: 1.设置SLRTR(重试时间)、SLRCR(重试次数),SLPIPR(SOCKET-less的IP)等参数; 2.通过设置SLCR(SOCKET-less Command Register)来触发查询操作,其中ARP查询的MAC信息会被存储在SLPHAR(SOCKET-less Peer Hardware Address Register)中。
A:W5100S支持SOCKET-less指令,只需要设置相关的寄存器就可以方便的实现PING,无需像W5500一样用socket实现。具体步骤如下: 1.设置SLRTR(重试时间)、SLRCR(重试次数),SLPIPR(SOCKET-less的IP)、PINGSEQR(PING队列号码)和PINGIDR(PING包ID号)等参数; 2.通过设置SLCR(SOCKET-less Command Register)来触发查询操作,如何SLIR(SOCKET-less中断寄存器)被触发,则表明PING包成功到达。
A:WIZnet芯片在UDP模式,在发送第一个UDP数据包之前发送一次ARP请求数据包,然后它会将数据连续发送到同一个Peer。可以通过设置MR2 (Mode Register 2)的FARP寄存器来设置强制ARP功能,如果此位设置为“1”,它为每个UDP数据包发送ARP请求。设置为“0”,将只在第一次发送的时候发送一次ARP请求数据包。
A:W5500和W5100S都可以通过设置寄存器来复位PHY部分,而不是整体复位芯片。其中W5500是设置PHYCFGR(PHY配置寄存器)的RST位为“0”来复位PHY部分,注意复位后需要重新置为“1”。如下图所示:
W5100S和W5500因为采用新工艺以及新的PHY方案,所以整体功耗相对W5100更为改善,对比数据(LINK)如下:
A:WIZnet多数芯片有OPMODE硬件管脚来管理PHY链路状态,但是也可以通过内部的寄存器来设置,他们生效有先后顺序,芯片上电的时候以OPMODE管脚设置为准,但是上电之后可以通过寄存器更改PHY链路状态,而忽略硬件管脚的配置。
A:所有的WIZnet的Ethernet系列产品都是使用的25MHz的晶振,对晶振的要求不太高,一般情况下只要是满足“±30 ppm” 的晶振都可以使用,温度等级根据实际应用选择,至于以及频率衰减,一般要求“±3ppm / year Max”,具体要求见相关产品的手册。
具体芯片的有源晶振使用方法和要求不一样.比如W5500的要求是:有源晶振通过XI/CLKIN管脚输入时钟信号,信号电平要求是3.3V,XO管脚悬空。而W5100S的要求是:有源晶振通过XSCI管脚输入时钟信号,信号电平要求是1.2V,XSCO管脚悬空。
W5500不支持自动极性转换(AUTO-MDI),所以两个W5500不能使用直连网线连接,否则会造成无法完成PHY握手, 所以两个W5500互联需要使用交叉网线,或者中间通过交换机连接。
A:W5500自带keep-alive功能,当socket初始化为TCP模式时,可以使用该功能定时自动发出Keep alive控制帧,而不需要单片机任何参与。 用户可以通过寄存器配置发送时间间隔,单位是5秒,配置代码如下:
IINCHIP_WRITE(Sn_KPALVTR(s),0x02);//设置时间间隔为2个单位,即10s。
A:在对W5500进行PING测试的时候偶尔会有丢包,以及PING时间长的问题,造成这种情况的原因有几个: 1.在对W5500进行PING测试的同时还进行,数据通讯,PING基于ICMP协议在处理优先级最低,W5500会优先处理数据通讯数据,所以会偶尔造成PING超时或PING时间长; 2.网络环境比较差,网络比较忙碌,造成PING包到达和返回的时间相应延长;
A:WOL模式下,WIZnet芯片除了Magic packet数据包之外不再接收其他类型的数据包,只有接收到Magic packet数据包,才会触发中断,从而通知MCU重新初始化WIZnet芯片,继而开始工作。Power Down模式下,WIZnet芯片的PHY部分会处于完全关断的情况,只有通过置位 [Operation Mode Configuration Bit]为其他的模式才可以退出Power Down模式。 两种模式都可以起到节能的目的,但是实现方式不一样,在WOL模式下,MCU可以关掉其他的外设,等待网络唤醒后重新开始工作;而Power Doen模式下,本身不再接收其他的数据包,不能通过网络端唤醒,但是因为功耗最大的PHY在此模式下是关断,没有功耗的,所以本身就可以做到比较低的功耗。根据实际情况选择需要使用的模式。
A:经实际测试,W5500在25℃的室温下工作,实际的温升有大概10~15℃,芯片表面大概是40摄氏度左右。根据W5500的可靠性性能测试报告,W5500的极限温度范围如下:
A: 1.检查供电情况 2.检查晶振是否起振(插上网线,如果LINK灯亮的话,基本可以确定供电和晶振没有问题); 3.读写版本寄存器,看结果是否正确 4.检查SPI时序是否与数据手册一致
A: 1.检查IP层是否可以PING通; 2.检查服务器的目标端口是否处于侦听状态,否则会收到RST数据包; 3.WIZnet芯片在连接服务器时,首先会发送ARP请求,请确认ARP得 到正确回复; 4.检查客户端-服务器间的3步握手是否完成;