常见问题及解答
R: WIZnet芯片是硬件协议栈芯片,有别于软件协议栈,如果芯片不主动往网络中发包,在TCP_Server模式下是不会有任何数据包发送的,这样会造成路由ARP表中无法形成IP和MAC设备的对应关系。
A:解决方案:
在芯片上电时往任意IP发送一个UDP数据包,从而更新路由的ARP表,形成匹配关系,后续通讯就正常了。
R:这是由于客户端没有主动发送断开请求,造成服务器并不知道Socket已发生异常断开; 重新上电之后,芯片以相同的IP和端口连接服务器,而服务器还认为此Socket链接存在,所以拒绝芯片的立即连接。
A:解决方案:
在芯片使用KEEP_ALIVE机制,一段时间内发送呼吸包,如果芯片没有给服务器回复,服务器则判断链接已断开,并释放Socket资源,这时就可以成功连接。如果对客户端的本地端口没有要求的话,也可以在初始化Socket的部分让端口自动+1处理。两种方式根据具体应用分析采用。(注: 有的场景不能采用端口自动+1的方式,比如电力104规约,只允许采用2404端口连接。)
A:解决方案:
可以在主循环中加入判断PHYCFGR状态的处理流程,如果PHY状态发生异常,释放所有的socket资源,并重新初始化socket。相关寄存器如下:。
A:解决方案:
芯片作为TCP_Server,最多可以与8个客户端建立连接。不能初始一个Socket对应多个连接。可以将芯片的8个socket全部初始化,这样就可以与8个不同的TCP_Client建立通讯链接
A:解决方案:
W5200的Power Down模式是通过在一定时间内关闭W5200的内置PHY电路的工作来实现的,但是有一定几率PHY在休眠之后无法唤醒,需要在软件上做处理来唤醒芯片。经过测试验证发现,W5200芯片在3s极限值内快速唤醒一次再进入Power Down,当芯片需要唤醒正常工作时就不会出现以上问题。
A:解决方案:
芯片和PC通讯的话可以直接通过Wireshark抓包,如果芯片和公网直接通讯或者通讯是发生在芯片之间,则没有办法直接抓包,这需要借助于“可以抓包的交换机”,这种交换机多数是二手产品,而且是10M的网络,比如TP-LINK TL-HP5MU。把芯片和抓包计算机的网线分别插上交换机就可以运行抓包工具抓包。
A:解决方案:
W5300是总线方式操作,在确保地址总线和数据总线连接正确的情况下,还有一个很重要的问题,就是保持总线时序统一,经过验证MCU总线地址保持时间至少是W5300总线操作时间的2倍以上,否则可能会导致W5300来不及处理数据而导致数据丢失。如下图介绍。
A:解决方案:
不能使用以往的经验电路,请严格按照WIZnet给出的参考设计进行硬件设计。有的客户反馈在使用原有的经验电路也可以正常通讯,但是有可能发生在实验室正常,而客户现场连接不上的情况,所以统一建议客户使用官方的参考设计。
A:解决方案:
W5500的以太网接口的四根线,按照正常的线序连接,必须通过过孔交叉线序; 按照以太网布局规范,需要等长差分走线。而且需要尽量少的过孔,可以适当做P-N交叉,既TXP-TXN交叉,RXP-RXN交叉,以符合以太网布线规范的要求。
A:解决方案:
EMC测试比较重要的有四项:ESD——静电抗扰度测试,EFT——电快速瞬变脉冲群抗扰度测试,SURGE——浪涌(冲击)抗扰度测试,PFMF——工频磁场抗扰度测试。
其中EFT和SURGE是针对电源的测试,发生问题应该在电源防护上做文章。而与W5500相关的只有ESD和PFMF。我们在近期也结合一些合作单位的测试经验,将提供能够过测试的原理图和硬件设计参考。将分为两个部分推出,金属壳体的防护和塑料壳体的防护两部分。将在近期测试后推出,敬请期待。
EMC测试虽然对工程师的硬件设计经验有一定要求,但是更多的工程师分享的是他们成功通过EMC的经验,比如最近的这个电力通讯设备使用的就是WIZnet的W5500,其通过了接触8KV,空气放电15KV的最高等级静电抗扰度测试。
A:解决方案:
WIZnet芯片打开WOL功能只需要置位MR寄存器的WOL位,不需要外部设定。唤醒方法为向WIZnet芯片的UDP端口发送Magic数据包(0xffffffffffff+16个目的MAC地址),设备唤醒后IR寄存器的WOL位会置1,通过检测该位获取WIZnet芯片的状态。(注意WOL功能不能和掉电模式(Power down mode)同时打开)
A:解决方案:
使用WIZnet芯片的UDP组播功能有几点需要注意:
1.需要在打开Socket之前,先指定目标MAC地址为组播MAC地址,定义规则 如下:
2.打开一个支持多播UDP的Socket,目标IP为组播地址;
3.然后就可以进行UDP组播传输。
注意:如果没有定时发送“维持UDP组播”的数据包 的话就会被清出组播组,可以定时执行打开步骤2的打开Socket的指令,因为打开和维持UDP组播的数据包是完全一样的。
R:这个是HTML代码和浏览器的兼容性问题,因为HTML5的很多标签和CSS样式表在低版本或者不同的浏览器内核下的排版和兼容性都不同。
A:解决方案:
在HTML开发的时候使用JavaScript可以判断浏览器的内核和版本,可以针对不同的浏览器开发不同的执行代码和CSS样式表,或者建议客户使用推荐用户使用chrome系列或者chromium内核的浏览器,因为其对HTML5/CSS3支持是比较完善的。
A:解决方案:
MAC地址要求不严格的话可以自定义,因为只要在一个子网内没有重复的MAC地址就不会造成MAC地址冲突的问题,因为如果进行公网通讯,网关会通过NAT功能将网关的MAC和IP对数据包中的MAC和IP进行替换然后再和公网通讯,所以不会造成公网中的MAC冲突的问题。但是如果要求比较严格,则需要从IEEE基金会申请全球唯一的MAC地址,申请地址如下:https://standards.ieee.org/products-services/regauth/oui36/index.html进入该页面后点击Log in or create an account(新用户需注册),登陆后即可买
A:解决方案:
根据ICMP协议,request包的大小为128byte,reply包比request包大8byte,为136byte。客户可以分别定义两个Buffer[128]和Buffer[136]分别对应request包和reply包,也可以共用一个Buffer[136],但是不能发送接收使用同一个128byte的Buffer,否则会造成接收数据不全,无法解析。
R:W5500收到数据后会产生RECV中断,当回环测试时,正常清掉RECV中断后,由于采用的回环测试方式,W5500又将同一包数据发送了出去,所以又会产生SEND_OK中断。
A:解决方案:
此时需要再次清SEND_OK中断,或者改用单向测试方式即可。
A:解决方案:
STM32F103的主频最大72MHz,但是SPI接口的最高频率限制为18MHz
而W5500的SPI时钟最高可达80MHz,所以以STM32驱动W5500的话,无法满足W5500对最高时钟的需求。而如果使用STM40x处理器,SPI时钟使用42Mhz,使用DMA方式,可以达到回环测试17Mbps的速率(收+发),单独发送可以达到13Mbps的速率。
A:解决方案:
经常有需要使用PHY-PHY电路的场景,比如使用WIZnet做内部数据通讯,比如需要使用板载的Switch电路等等,PHY-PHY电路的要点就是使用耦合电容隔离两端的PHY,并加入两个PHY各自的偏置电路。类似于如下的设计:
A:解决方案:
A: 在特殊的应用场景下,客户需要用网线将所有的节点按照这种方式“A-B-C-D-E”线状级联在一起。这种应用需要使用Switch芯片,比如IP175G等芯片,按如下图示链接:
A:解决方案:
眼图是表现网络信号是否稳定的测试,眼图混乱有可能导致同一批次的设备有的无法正常通信,造成原因是:
1.没有按照以太网的布局标准来设计硬件电路
2.采用的可能是不合格的网络变压器器件。
下图为使用W5500和HRW5500RE的眼图测试结果。
R: 通不过低温测试通常表现为低温-40℃不启动,原因是电路上除了WIZnet 的芯片外,还有晶振以及网络变压器等周边器件,造成结果通常是由采用的周边器件不是工业级温度的器件。症状如下:
晶振不是工业级温度:寄存器无法读写,无法操作WIZnet芯片;
网络滤波器不是工业级温度:低温下LINK灯不亮,PHY握手不成功。
不同的系统对ARP表的更新时间设定不太一样,在Windows2000/XP环境中,ARP表项的老化时间是2分钟,95/98以及NT环境下为10分钟,在大部分Cisco交换机中,该值是5分钟,华为的设备一般为20分钟……而S2E模组的IP出厂默认值都是192.168.1.88, 而MAC都是不同且唯一的,造成PC系统的ARP中第一个之后的模块的IP和MAC处于不对应的状态,所以工作不正常,这种情况也较常发生于设备生产环节。
A:解决方案:
需要手工强制清除系统的ARP表,指令为arp –d,或者使用我们新版本的上位机设置软件,新版本中已经加入的清除ARP表的步骤。
R: WIZnet多数的芯片的IO是兼容5V电平的,可以和5V电平的MCU直接通讯,但是为了保险,我们一般都会在SPI线路上各串接一个限流电阻,比如10~100欧姆的电阻,防止过流损坏。下图是W5500的IO耐压参数。
具体芯片请参看手册的“High level input Voltage”参数确认。
A:解决方案:
在Linux kernel新版本中在原先支持W5100,W5200的基础上已经加入了对W5500的支持,如果客户基于老版本的Linux开发,请参照Linux新版本修改,或者基于我们提供给的老版本驱动。
文件路径为: /drivers/net/ethernet/wiznet/w5100-spi.c
具体说明见如下链接:
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 (Mode Register)的PING Response Block来屏蔽PING包Reply,设置为“1”WIZnet芯片就不会回复任何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)来触发查询操作,PING查询的话如果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是通过PHYCR1(PHY Control Register 1)的RST位来复位PHY部分。
A:解决方案:
W5100S和W5500因为采用新工艺以及新的PHY方案,所以整体功耗相对W5100更为改善,对比数据(LINK)如下:
A:解决方案:
WIZnet多数芯片有OPMODE硬件管脚来管理PHY链路状态,但是也可以通过内部的寄存器来设置,他们生效有先后顺序,芯片上电的时候以OPMODE管脚设置为准,但是上电之后可以通过寄存器更改PHY链路状态,而忽略硬件管脚的配置。
注意芯片管脚的设置是不一样的:
A:解决方案:
所有的WIZnet的Ethernet系列产品都是使用的25MHz的晶振,对晶振的要求不太高,一般情况下只要是满足“±30 ppm” 的晶振都可以使用,温度等级根据实际应用选择,至于以及频率衰减,一般要求“±3ppm / year Max”,具体要求见相关产品的手册。
注意:W5500的晶振负载电容为18pF,W5100S的负载电容为8pF
A:解决方案:
具体芯片的有源晶振使用方法和要求不一样.比如W5500的要求是:有源晶振通过XI/CLKIN管脚输入时钟信号,信号电平要求是3.3V,XO管脚悬空。而W5100S的要求是:有源晶振通过XSCI管脚输入时钟信号,信号电平要求是1.2V,XSCO管脚悬空。
A:解决方案:
W5500不支持自动极性转换(AUTO-MDI),所以两个W5500不能使用直连网线连接,否则会造成无法完成PHY握手, 所以两个W5500互联需要使用交叉网线,或者中间通过交换机连接。
A:解决方案:
使用WIZnet的keep-alive功能需要先设定本Socket的keep-alive包的发送时间间隔,单位是5秒,设置方式如下:
Keep-alive功能会在W5500同对方完成一次数据通讯后开启,其后W5500会自动给对端按照设定的时间间隔发送keep-alive包。
A:解决方案:
可以使用WIZnet官方的速度测试工具AX1进行通讯速度测试,测试方法如下:
1.打开AX1并点击“CPUTICK”校准时钟;
2.选择“TCP→Listen/Connect”,并输入对应的参数;
3.点击“File”选择测试媒介文件(一般txt文档即可);
4.点击“Ts/Us/Tr/Ur/∞”开始测速,界面会显示实时速率。
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:解决方案:
我们在使用抓包软件Wireshark时,经常需要过滤掉无用包,只选择针对WIZnet芯片通讯的包进行分析。常用过滤语法如下:
字段详解:
A:解决方案:
W7500和W7500都可以通过SWD和ISP的方式写入程序,对于ISP方式,WIZnet提供专门的ISP工具“W7500 ISP Tool”来下载程序。通过如下几步就可以刷写程序:
1.拉高BOOT管脚,并Reset;
2.选择ISP工具的对应串口,点击“Open”完成握手;
3.选择擦除区域及写保护选项;
4.选择程序并点击“ISP Start” 开始下载;
1.下载W7500 128K FLASH project并拷贝到KEIL的FLASH文件夹;并按下图将W7500烧写算法添加到KEIL算法目录,并设置算法在RAM中运行的位置;
2.按下图设置设置下载选项:
3.在Device选项中选择“Use Debug Driver”选项;
4.通过工具栏的“Download”即可进行程序下载
1.检查供电,特别是内部变压器的供电;
2.检查晶振输入脚是否有波形;(插上网线,如果LINK灯亮的话,可以基本确定供电和晶振没有问题);
3.检测SPI时序是否与下图一致。
4.使用SPI接口读取一个参数相对固定的寄存器,比如版本寄存器;
R:在TCP_Client模式下,WIZnet芯片无法连接到服务器。
A:解决方案:
遇到这个问题,有一个排查的步骤:
1.检查IP层是否可以PING通;
2.检查服务器的目标端口是否处于侦听状态,否则会收到RST数据包;
3.WIZnet芯片在连接服务器时,首先会发送ARP请求,请确认ARP得 到正确回复;
4.检查客户端-服务器间的3步握手是否完成;
W5500芯片内含模擬部分,但只要是数字电路都没有关系,但是急需要远离强磁强电。关于芯片下方过流没有具体参数。
芯片硬件设计请参考: 芯片硬件设计指南