WIZnet-W5500S2E系列,你了解多少?

Uncategorized, 串口转以太网, 博客, 应用
- - - WIZnetS2E产品已经发布有一段时间了,S2E产品有W5500S2E和W7500S2E两个系列产品,那么大家对于S2E产品到底了解多少呢,下面就跟着我一起去解密一下吧! 首先,我们先从W5500S2E系列开始,先了解一下W5500S2E的基本情况: W5500S2E是一系列工业级S2E串口转以太网模块,支持TCPServer、TCP Client和UDP三种工作模式,串口波特率最高可达1.152Mbps,并提供配套的上位机配置软件,也可通过网页或AT命令等方式轻松配置。 W5500S2E集成了全硬件TCP/IP 协议栈以太网接口芯片W5500,网络通信更加快速、稳定、安全。用户只需根据手册中推荐的参考设计原理图,即可快速完成硬件电路的设计,降低开发难度,节省开发时间。 W5500S2E系列S2E模块根据其尺寸和接口不同分为以下型号: 型号 产品图片 特点 W5500S2E-S1 尺寸:34.00×24.00×12.40 (mm) 网口类型:网络变压器 W5500S2E-Z1 尺寸:44.45×31.75×15.75 (mm) 网口类型:网络变压器 W5500S2E-R1 尺寸:44.45×31.75×23.00 (mm) 网口类型:RJ-45 功能特点 W5500S2E模块具有以下主要功能特点: 波特率可设置为1.2Kbps~1.152Mbps之间的任一标准值 10/100M自适应以太网 支持TCP Server、TCP Client和UDP三种工作模式 灵活的串口数据分包设置,满足用户多样化的分包需求 智能网线侦测及Keep Alive功能,保证网络链路实时畅通 支持DHCP自动获取IP地址 支持DNS功能,满足用户通过域名实现通讯的需求 支持Modbus RTU/ASCII转Modbus TCP/UDP 支持Modbus over TCP/UDP 支持NetBIOS功能,方便用户为其设备命名 支持连接密码校验功能,提高通信安全性 支持串口AT命令配置方式 内置Web服务器,方便客户进行远程设备管理 支持上位机配置工具配置方式 支持本地和远程固件升级 产品特性 LAN 10/100Mbps自适应以太网 串口 3.3V TTL×1:TXD、RXD、CTS、RTS、GND 串口通信参数 波特率:1.2Kbps至1.152Mbps 数据位:7,8 停止位:0.5,1,1.5,2 校验:None,Even,Odd 流控:None,CTS/RTS 软件 工具:WIZS2E ConfigTool上位机软件 配置方式:上位机、Web浏览器、串口AT命令 电源 输入电源:DC 3.3V 尺寸(长×宽×高) W5500S2E-S1:34.00×24.00×12.40 (mm) W5500S2E-Z1:44.45×31.75×15.75 (mm) W5500S2E-R1:44.45×31.75×23.00 (mm) 工作温度 工业级:-40 ~ +85 ℃ 保存环境 -45 ~ +95 ℃,5 ~ 95% RH 参数配置方式 W5500S2E提供了三种常用的参数配置方式供用户选择: WIZS2E ConfigTool上位机软件配置,用户可在Windows操作系统的计算机上安装该软件进行配置; Web浏览器配置,方便用户在本地或者远程通过Web浏览器进行配置; AT命令配置,用户可将W5500S2E集成于自己嵌入式产品的主板上,通过AT命令进行参数配置,也可直接通过串口工具使用AT命令配置。 具体参数及工具下载请到S2E官方网站:https://zh.wizse.com/
Read More

WIZnet选型指南,解决90%的选型需求

Uncategorized, 应用, 新闻
在我们选择WIZnet的产品时,面对诸多的产品功能不知如何选择,这里详细介绍一下WIZnet产品主要参数功能以及一些选型方法,帮助工程师快速准确地选择产品。 [table id=201 /] 这五款芯片各有千秋,都具有很高的性价比,具体对比详情如下: WIZnet的产品有一个共同的特性,那就硬件TCP/IP协议栈。而它们之间的差异主要体现在接口类型、Socket数量方面,选择的依据主要根据用户产品所使用的单片机接口类型和成本这两个因素。 如果用户使用8位或16位单片机,那么也意味着系统在数据处理和通信速率方面没有太高的要求,我们一般的芯片都可以满足,比如W5500、W5100、W5100S、W6100都可以选择。要求速率高的推荐使用W5300。需要使用IPv6协议则推荐使用W6100。 W5500     支持高速标准4线SPI接口与主机进行通信,该SPI 速率理论上可以达到 80MHz。其内部还集成了以太网数据链路层(MAC)和10BaseT/100BaseTX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)、掉电模式和网络唤醒功能。与传统软件协议栈不同,W5500内嵌的8个独立硬件 Socket 可以进行8路独立通信,该8路Socket的通信效率互不影响,可以通过 W5500 片上32K 字节的收/发缓存灵活定义各个Socket的大小。 W5300    支持8/16位数据总线接口与主机进行通信,且支持DMA(直接存储器访问)模式,极大提高了W5300的性能,再加上W5300片上128K的收/发缓存,使得W5300性能产生质的提升,最高吞吐率可达80Mbps。W5300内部集成了以太网数据链路层(MAC)和10Base T/100Base TX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)、自动极性转换,并内嵌8个独立硬件Socket可以进行8路独立通信,该8路Socket的通信效率互不影响。W5300以其卓越的数据传输性能,正逐步成为高带宽需求方面的主力军。 W5100    支持直接并行总线、间接并行总线以及高速SPI接口3种方式与主机进行通信。其内部还集成了以太网数据链路层(MAC)和10Base T/100Base TX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)。与传统软件协议栈不同,W5100内嵌的4个独立硬件Socket可以进行4路独立通信,该4路Socket的通信效率互不影响,可以通过W5100片上16K字节的收/发缓存灵活定义各个Socket的大小。 W5100S    是基于W5100改进的低成本网络接口芯片。W5100使用的任何固件及程序都可以直接在W5100S上使用,无需任何修改 W5100S 是一款多功能的单芯片网络接口芯片,内部集成全硬件的TCP/IP协议栈,以太网MAC和10Base-T/100Base-TX以太网控制器。主要应用于高集成、高稳定、高性能和低成本的嵌入式系统中。使用W5100S,用户MCU可以方便的处理IPv4,TCP,UDP,ICMP,IGMP,ARP,PPPoE等各种TCP/IP协议。W5100S分别拥有8KB的发送缓存和接收缓存,可以最大限度地减少MCU的开销。主机还可以同时使用W5100S的4个独立的硬件SOCKETs,并基于每个硬件SOCKET开发独立的互联网应用。 W5100S支持SPI接口和并行系统总线接口。它还提供低功耗/低热量设计,WOL(Wake On LAN),以太网PHY掉电模式等。 W6100    是WIZnet 2019年推出最新技术的网络接口芯片,内含IPv4/IPv6双内核协议栈。其中新增IPv6是其最大特点,同时在硬件引脚上与W5100S全兼容(Pin to Pin),软件上支持8个Socket,支持各种SOCKET-less命令,用于通过ARP,PINGv4和PINGv6进行IPv6自动配置,监控和管理网络。
Read More

基于STM32和W5500实现AirPlay音频播放

博客, 物联网
※已刊登在“无线电”1月刊上  基于STM32和W5500实现AirPlay音频播放 作者:常席正,魏文龙   AirPlay是苹果公司推出的一套无线音视频解决方案,我们手里的iPhone、iPad甚至是Apple Watch等设备还有电脑上的iTunes都支持AirPlay。使用AirPlay可以方便的使移动设备的音频流,视频流可以投射到音箱和显示设备上,而无需蓝牙设备的配对过程。但是支持AirPlay功能的音响设备普遍都比较昂贵,而且家里的3.5毫米的插口的老音箱也没有利用起来,本着“喜新不厌旧,改造旧物发挥余热”的精神,我开始了新一轮的折腾。 我的想法是用嵌入式方案STM32+W5500的方式实现AirPlay协议,并使用I2S接口接PCM5102A音频模块来实现音频播放。于是马上上网查资料,发现成熟的方案还不太多,现有的方案都是在linux或者windows上运行的,精挑细选之后选择了https://github.com/juhovh/shAirPlay这个AirPlay开源项目作为参考,主要是该代码是用C语言实现移植到stm32比较方便。 在开始之前我们有必要先了解一下AirPlay, AirPlay是苹果公司收购airtunes后,在airtunes协议的基础上增加了视频,照片的传输,从而变为完整的AirPlay协议。AirPlay可以将iPhone 、iPad、iPod touch 等iOS 设备上的包括图片、音频、视频及镜像传输到支持AirPlay协议的设备中播放,实现随时随地的无线流媒体传输。在我们的这个项目中,我们只需要实现AirPlay协议中的音频流部分。AirPlay的实现过程中包含多个子协议,其中有的协议是完全标准的,有一部分协议苹果公司进行了一些修改,有的则是完全私有的。 Multicast DNS:用于发布服务,启动后,在iOS的控制中心菜单中就能看到支持AirPlay的设备列表; HTTP / RTSP / RTP:用于流媒体服务,传输音视频数据,进行播放控制等; NTP:网络时间协议,用于时间同步; FAirPlay DRM加密协议:用于进行数据加密,这个是完全私有的加密协议。 开始工作前我们需要进行一些前期准备,如下图: 图1 硬件框图及接线 iPhone用来播放音乐,并通过Airplay协议发送音频流。W5500EVB是WIZnet的W5500开发板,其中的W5500除了包含以太网的MAC和PHY外,还内置了硬件的TCP/IP协议栈,是目前比较常用的以太网方案。我们使用W5500EVB作为服务器接收并解码音频数据,开发板的操作可以参考http://www.w5500.com中的例程。PCM5102A音频模块可以将解码后的音频数据进行播放。经过分析后我们要实现AirPlay音频播放主要是实现以下三个方面: iPhone在网络中发现Airplay设备(W5500EVB)并建立连接; W5500EVB接收并解码音频数据; W5500EVB通过I2S接口将音频传送到PCM5102A音频模块; 接下来我们将分别实现这三个步骤: 1、发现Airplay设备并建立连接 AirPlay发现设备是基于mDNS协议(Multicast DNS)实现,iPhone与W5500EVB需要连入同一网络且W5500EVB要加入组播组224.0.0.251:5353才可以接收mDNS报文。W5500EVB收到iPhone发出的Querry查询报文后回复Response报文,报文的内容可以参考文档《Unofficial AirPlay Protocol Specification》(http://nto.github.io/AirPlay.html),下方为mDNS设备发现和设备注册代码: 1 uint8 mdns_query(uint8 s, uint8 * name,uint8* rname) 2 { 3     uint8 ip[4]; 4     uint16 len, port; 5     switch (getSn_SR(s)) { 6     case SOCK_CLOSED:/*打开SOCKET并加入组播组224.0.0.251*/ 7         setDIPR(s,DIP);/* 设置目标IP 224.0.0.251*/ 8         setDHAR(s,DHAR);/*设置目标MAC 01:00:5e:00:00:FB */ 9         setDPORT(s,DPORT);/*设置目标端口5353*/ 10         socket(s, Sn_MR_UDP, 5353,Sn_MR_MULTI);/*打开SOCKET并加入组播组*/ 11         break; 12     case SOCK_UDP: 13         if ((len = getSn_RX_RSR(s)) > 0) { 14             if (len > MAX_DNS_BUF_SIZE) { 15                 len = MAX_DNS_BUF_SIZE; 16             } 17             len = recvfrom(s, BUFPUB, len, ip, &port); 18             /*检查收到报文的flag确定报文是否为查询报文*/ 19             if ((BUFPUB[2]&0x80)==0) { 20                 len = mdns_makeresponse(0,name,rname,BUFPUB,MAX_DNS_BUF_SIZE); 21                 sendto(s, BUFPUB, len, DIP,DPORT); 22             } 23         } 24         break; 25…
Read More

轻松实现Lua脚本控制W5500

Uncategorized, 博客, 应用, 物联网
※已刊登在“无线电”12月刊上轻松实现Lua脚本控制W5500 作者:孔东明,张博 1、引言 Lua是巴西里约热内卢天主教大学里的一个研究小组于1993年基于标准C开发的一个轻量级的嵌入式脚本语言,其设计目的是为了将传统嵌入式程序“编写→编译→链接→运行”的复杂过程简化为“编写→运行”两个环节,从而为嵌入应用程序提供灵活的扩展和定制功能。 Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。一个完整的Lua解释器不过200K,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。 2、项目背景 随着物联网的快速发展,传统的工控、电力、银行机、闸机甚至家电等设备也纷纷加入了连接互联网大军。工厂的车床需要把运行数据实时上传至PLC,水表、电表、燃气表实现了远程抄录,点验钞机可以实时将RMB的冠字号上传至银行数据库,停车场无人值守,家里的窗帘用某猫精灵很方便的进行语音控制…… 小编在一家做网络通信设备的公司上班,领导要求基于现有的串口转以太网模块开发出一款支持用户使用Lua语言进行二次开发的串口转以太网模块,项目工期1个月。小编刚刚毕业4个月,没有多少项目经验,只是在学校玩过ARM M3的开发板,C语言自我感觉勉强及格,以太网技术基本小白一枚,对如何实现用户使用Lua语言“二次开发”更是一窍不通。但是任务时间紧迫,再难也要搞定,要不然没有奖金就要勒紧裤腰带了。 接到项目当晚就去找度娘商讨对策。经过一番搜索,方才大致了解了什么是Lua,什么是脚本语言,为什么客户要二次开发。用户在使用串口转以太网模块时,由于应用场景的不同及嵌入式产品资源的限制,需要灵活的调用模块的各项功能去实现差异化应用,而传统的模块只能实现既定的功能,因此支持二次开发的产品应用范围将大为拓展。而用户二次开发输入的代码肯定是无法执行传统的“编写→编译→链接→运行”这整个过程,脚本语言将这个过程简化为“编写→运行”就可以完美的解决了这个问题,Lua便是一款最佳的嵌入式脚本语言。 原理理顺了,如何落实便成了当务之急,我需要先做一个Demo来模拟整个过程。我找来了之前开发串口转以太网模块用到的以太网开发板W5500EVB,如下图。W5500EVB是由ST的STM32F103RC+W5500网络芯片构成,STM32F103内部256K的Flash足以容纳最大200K的Lua驱动。W5500是一颗以太网接口芯片,它用全硬件逻辑门电路搭建了一整套全硬件TCP/IP协议栈,发送数据时单片机只需将用户数据通过SPI发送至W5500,W5500内部会自动完成数据TCP/IP封包,并发送至网口,接收数据时W5500内部自动完成解包,仅将MCU关心的用户数据提交。W5500内含8路完全独立的硬件Socket,这意味着W5500可以同时运行8个上层应用程序,而且传输速率互不影响,不会像软件协议栈那样线程增加,速度明显降下来。W5500内部还集成了MAC和PHY,符合了接入以太网的所有条件,对于刚刚接触以太网的攻城狮来说,是一款简单易上手的网络接口芯片。 图 1 W5500EVB 我想象中的Demo是这样的:用户通过Web网页向W5500EVB提交一段能让W5500EVB连接到TCP服务器的Lua脚本代码,W5500EVB解析出来这段代码后通过已经运行的Lua虚拟机中的Lua接口函数来解释用户代码要实现的功能,最后 W5500EVB按照用户代码中的参数连接到一个指定的TCP服务器实现以太网数据通信。这个过程可以参考W5500官网提供的HTTP Server和TCP Client的例程。 图 2 实施方案原理图 3、准备工作 (1)安装编译环境:Keil V5.11 (2)硬件:W5500EVB、Jlink调试器 (3)驱动:Lua最新驱动V5.3.2 4、宿主C部分 4.1 加载驱动 驱动包括STM32F103RC的单片机驱动、W5500以太网部分驱动以及Lua驱动。STM32F103RC驱动不必多说,W5500驱动和Lua驱动如下图所示,均可以在对应官网下载到。                                           图 3 W5500驱动                                                                                    图 4 Lua驱动-V5.3.2 4.2 初始化部分 初始化部分包括STM32初始化及W5500初始化,Lua在用的时候才需要初始化。 01 /******* STM32初始化********/ 02 Systick_Init(72); 03 RCC_Configuration(); 04 GPIO_Configuration(); 05 Timer_Configuration(); 06 NVIC_Configuration(); 07 USART1_Init(); 08 at24c16_init(); 09 10 /******* W5500初始化********/ 11 printf("W5500 Config....\r\n"); 12 Reset_W5500();                  //重启W5500 13…
Read More

W5100S与其他产品差异对比

应用, 新闻, 物联网
W5100S ,W5500,W5100差异对比         型号 参数 W5500 W5100 W5100S  内部架构 全硬件TCP / IP协议栈+ MAC + PHY 全硬件TCP / IP协议栈+ MAC + PHY 全硬件TCP / IP协议栈+ MAC + PHY MCU交互接口 高速SPI SPI,并行总线 SPI,并行总线 SOCKET数 8 4 4 收发缓存 32KB 16KB 16KB MAX速率(Mbps)的 15 25 25 掉电模式 √ X √ 混合模式 Ø Ø Ø 工作温度 -40℃-85℃ -40℃-85℃ -40℃-85℃ 自动极性转换 X √ √ 内置的全硬件TCP \ IP协议 TCP,UDP,IPv4中,ARP,ICMP,IGMP版本/ V2,PPPOE WOL √ X √ 封装工艺 48LQFP 7×7(毫米) 80 LQFP 10×10(毫米) 48 LQFP 7×7(mm) 48 QFN 7×7(mm) W5100S相比于W5500各有千秋,两者都具有很高的性价比,具体对比详情如下。 内部架构:均为全硬件TCP / IP协议栈+ MAC + PHY MCU交互接口:W5100S支持并行总线+高速SPI接口/ W5500仅支持高速SPI接口 插座数:W5100S 4个独立插座/ W5500 8个独立插座 收发缓存:W5100S共16KB收发缓存/ W5500共32KB收发缓存 工作温度:均为工业级以太网芯片-40℃〜85℃ MAX速率:W5100S MAX 25Mbps / W5500 MAX 15Mbps 性能功耗:W5100S采取全新工艺,相比W5500功耗更低 极性转换:W5100S支持自动极性转换/ W5500不支持自动极性转换 封装工艺:W5100S 48引脚LQFP和QFN无铅封装/ W5500 48引脚LQFP无铅封装                       结论: W5100S在使用并行总线接口时,其性能比W5500更优秀。 在保证需求在4个插座之内时,W5100S的选择要优于W5500。 而在对速率要求不是特别高的情况下,且对插槽要求高于4个,建议选择W5500使用 W5100S的详细信息可参考以下链接:https ://www.iwiznet.cn/products/network-chip/w5100s/
Read More

WIZnet—W5100S震撼来袭

新闻, 物联网
概述: W5100S是一款高性能的单芯片网络接口芯片,内部集成全硬件的TCP / IP协议栈,以太网MAC和10BASE-T / 100BASE-TX以太网控制器。主要应用于高集成,高稳定,高性能和低成本的嵌入式系统中。 使用W5100S,用户MCU可以方便的处理IPv4的TCP,UDP,ICMP,IGMP,ARP,PPPOE等各种TCP / IP协议.W5100S分别拥有8KB的发送缓存和接收缓存,可以最大限度地减少MCU的开销。主机还可以同时使用W5100S的4个独立的硬件插座,并基于每个硬件套接字开发独立的互联网应用。 W5100S支持SPI接口和并行系统总线接口。它还提供低功耗/低热量设计,WOL(Wake On LAN),以太网PHY掉电模式等。 W5100S使基于W5100改进的低成本网络接口芯片。引脚封装,方便产品小型化。 引脚图: 结构图: 特点 支持全硬件TCP / IP协议: TCP,UDP,WOL,ICMP,IGMPv1 / v2,IPv4,ARP,PPPoE 支持4个独立的插座 支持SOCKET-less指令:        ARP-请求,PING-请求 支持以太网掉电模式和主时钟选通节能模式 支持基于UDP的网络唤醒(WOL)功能 支持SPI和并行总线接口 高速SPI接口(MODE 0/3) 系统总线接口(2位地址线和8位数据线) 内置共计16K字节的发送/接收缓存 集成10Base-T / 100Base-TX以太网PHY 支持以太网自动协商(全/半双工,10 Base-T / 100 Base-TX) 支持自动MDIX功能(只在以太网自动协商模式下支持) 不支持IP分片功能 工作电压:3V(I / O兼容5V信号电压) 网络指示灯(全/半双工,链接指示,10Mb / 100Mb指示,传输指示) 48管脚LQFP封装和QFN封装(无铅,7x7mm,0.5mm间距) 应用 W5100S可用于多种嵌入式应用产品,包括: -   原基于W5100开发的各种应用,无需更改固件 -   家用网络设备:机顶盒,PVRs,数字媒体适配器 -   串口转以太网:访问控制,LED显示器,无线AP等 -   并口转以太网:POS/金融打印机,复印机 -   USB转以太网:存储设备,网络打印机 -   GPIO转以太网:家用网络传感器 -   安防系统:DVRs,网络照相机,终端机 -   工业和楼宇自动化 -   医用检测设备 -   嵌入式服务器 -   物联网IOT应用及IOT云应用  
Read More

W5500问题集锦

博客, 应用
        1、 如何确认W5500网络芯片物理连接是否正常? 使用W5500网络协议芯片,对其进行可靠的硬件复位(网络协议芯片的RESET或RST引脚)后可能出现下列现象: (1)  芯片的LINKLED引脚输出低电平,LINKLED指示灯会被点亮(未接,接错或灯坏除外). (2)  如果是通过网线直连电脑,电脑上本地连接显示本地连接已连接状态。如果是网线连到路由等设备,路由等相应指示灯提示连接成功。 如果出现上述现象,表明物理连接已经成功并且芯片工作,否则需要排查相关问题。   2、 如何检测W5500物理连接是否成功与芯片是否工作及相关线路是否正常有关系? (1)   因芯片焊反或关键位置虚焊,短路等问题导致芯片不能正常工作。 (2)   因芯片的供电,接地等不正常或连接芯片,导致芯片不能正常工作。 (3)   因芯片引脚外接的用于隔离数字电源与模拟电源的1uH电感损坏开路,导致不能工作。 (4)  因芯片的晶振不按要求连接,而导致芯片不能工作。使用有源振荡器的,线路连接错误,或者有源振荡器的电压不是1.8V,请参考原理图进行正确设计 。 (5)  因复位引脚连接错误,使得芯片不能完成可靠复位。 (6)  因线路中RXIP、RXIN、TXOP、TXON与变压器的连接错误,导致与电脑等无法建立连接。 (7)  因采用与线路不匹配的或坏的RJ45模块和变压器导致与电脑等无法连接。这里需要特别补充一下的是,W5500变压器连接上与W5100、W5200、W5300大不一样,如直接把他们的连接照搬过来可能不能工作,具体参考原理图。 (8)  因网线或电脑路由器等不正常而无法连接。 (9)  因某些MCU只需电压2.7V就可工作,MCU在电压还未上升到3V就对需要3V以上才能运行的网络协议芯片进行复位操作必然失败,最终导致不能连接。(可程序解决) (10) 如果是使用的W5300芯片,当不使用外部PHY时,TEST_MODE[3:0](19~22引脚),必须全部为低电平,可全接地,否则可能因没有PHY导致不能连接。   3、 W5500连接正常却PING不通,怎么办? W5500芯片是否可以ping通,不仅与物理连接等有关系,还和相关电路以及网关、子网掩码、MAC地址、IP地址配置有关系,可以从以下方面进行排除: (1)  W5500的EXRES1引脚(10脚)所接12.4K参考电阻,均接地且要求误差必须控制在1%以内。 (2)  RXIP、RXIN、TXOP、TXON接口,信号长度必须小于 25cm,越短越好,且尽量走等 长线,各差分信号相差不能超过2.5cm。RXIP,RXIN应尽量靠近,TXOP,TXON应尽量靠 近,有条件的应走平行线。 (3)  必须保证被操作的寄存器地址配置正确。 (4)  可以对寄存器进行读写操作,判断读写是否一样,采用SPI接口的可以以此判断SPI部分的程序以及电路有无问题。使用并行接口的,则可以判断程序以及地址线、数据线的连接有无问题。 (5)  MAC地址的第一个字节必须为偶数。 (6)  必须正确设置子网掩码,且电脑IP地址与网络芯片的IP地址必须设置在同一个子网。   4、 为什么W5500芯片可以PING通,但无法发送数据? W5500芯片可以ping通,说明相关电路以及网关、子网掩码、MAC地址、IP地址配置均正常, 如果不能建立连接发送接收数据,需要从从SOCKET配置,SOCKET状态,中断寄存器,发送接收程序,或是上位机软件的设置等进行排查 。 具体配置参考W5500数据手册   5、 W5500在配置时需要检查网关吗?为什么? 其实只要不访问外网,完全可以不做这个检测,如果要访问外网,必须经过网关,做这步就是为提前知道网关是否存在,是否正常工作。   6、 为什么检测网关时要将目的IP地址每位加‘1’? 在正确设置网关的情况下,去连接一个不在同一子网(外网)的目的IP,就可找到网关,而将目的IP每位加1,正好造就一个不在同一子网的目的IP,如果愿意你加2加3都可以。   7、 为什么检测网关要判断目的MAC地址首位不为0xff? 因为未找到网关以前,读出目的MAC地址所有位全为0xff, 至于为什么判断首位,因为找到的目的MAC地址首位应该是偶数,因此绝不可能是0xff(255)   8、 WIZnet网络芯片TCP模式下的客户端与服务器有什么异同? 不同点: 客户端起启动连接(CONNECT)的作用,主动连接必须要知道连接目标,因此要正确设置SOCKET的目的(服务器)IP和目的(服务器)端口号。 服务器则是侦听的作用(LISTEN),等待连接不需要设置目的IP 和目的端口号,客户端来连接时,服务器自然知道客户端的IP地址与端口号。   相同点: 客户端服务器SOCKET 分片长度最大均为1460字节,即每次发送最大为1460字节 客户端服务器均要先配置为TCP模式 客户端服务器连接成功均为SOCK_ESTABLISHED状态(Sn_SR 寄存器) 详细内容可查看各芯片的《数据手册》   9、 TCP模式下,通过路由器,对方拔掉网线后,再插上后不能建立通讯怎么办? WIZnet芯片可以在发送过数据后,空闲既未发送也未接收达的情况,到一定时间(3秒,5秒,10秒自定义)后,发送SEND_KEEP命令,如对方正常就保持连接,如果对方在一定时间内未回应,则发出超时中断,自动关闭SOCKET端口,就可以自动重新连接,这样就能连接上了。但此命令只能用于TCP模式,如果是UDP模式下如果也想查看对方状态就需要从程序想办法了。   10、    请问,官方例程为什么不提供中断模式控制W5500的数据收发呢 因为中断读了数据后,然后还是要去读寄存器,去判断是什么中断,有可能在判断的过程中又来了N 个中断,增加中断就增加了很多不确定因素。 中断必然有响应时间,当上次中断还没结束,又产生新的中断甚至连续产生多次新的中断时,或者中断标志未及时清除,必然不能响应所有中断,此时以中断标志位来判断是否该接收,必然丢失数据。   11、    同一块芯片,同时使用多个SOCKET工作,应该注意什么问题 WIZnet目前每款网络协议芯片都可以支持多个SOCKET同时工作,但每个SOCKET可以且必须以不同的端口号做为区分。   12、    多块网络协议芯片同时使用,端口号可以设置成一样吗? 多块网络协议芯片在同一个子网中使用,应具备唯一的MAC地址,唯一的IP地址,因为不在同一块网络芯片,IP地址、MAC地址不一样,因此可以设置成一样的端口号。   13、    W5500设备,在同一网段存在多台设备的情况,运行不正常 问题描述:单个设备在局域网中的时候能够正常Ping通,而且TCP连接也使用正常没有任何问题; 解答:首先检查程序中IP地址、MAC地址是否有冲突,如果地址都没有冲突,可检查程序中配置的问题。   14、    同一块网络芯片的多个SOCKET,可以同时设置成客户端去连接电脑服务器的一个端口吗,怎么实现? 当然可以,WIZnet每款网络协议芯片都可以支持多个SOCKET同时工作,只需将芯片内每个SOCKET设置成不同端口号,分别设置成客户端去连接服务器就行, 前提是服务器的上位机软件需支持多任务,否则不能成功。   15、    用dhcp模式,插在电脑上能捕捉到discover,一插到路由器上就捕捉不到了,更别提offer了,是为什么? 首先,需要检查discover的内容,最简单的就是,你把电脑设置成固定IP,再设置成DHCP,抓一下电脑的内容,然后再对比一下   16、    将w5500的RST引到电源上面 这样软件就不用配置RST了 可行吗? 这样是不可行的,复位必须有可靠操作,让芯片满足工作条件; RST那里只是保险,但绝大多数问题是其他原因造成的,如果没有反应,先看一下W5500回的信息,有没有正确的初始化,再去找其他问题的原因。  …
Read More

基于W5500实现的考勤系统

WIZnet 产品应用小例全系列, 博客, 物联网
概述 工具:W5500EVB,RC-522射频模块,蜂鸣器模块 编译环境:keil5 目的:通过W5500EVB讲读取到的IC卡信息上传到后台数据库,后台处理后实现浏览器端登录浏览用户打卡信息。 后台接收到相应的数据后开始处理数据并实现在浏览器端显示IC卡的ID以及绑定客户的用户名,打卡时间,签到状态等信息。该系统还添加有用户注册,登录,密码找回等功能。 过程 整个系统的实现主要分为以下两部分: 如图1所示,模块驱动及数据上传; 2,后台数据处理及前端显示; 整个系统的前端显示可通过浏览器注册,登录,添加和查询用户信息,密码找回,生产用户的Excel表格等。下面分别介绍两个部分的实现过程。   模块驱动及数据上传 该部分的实现相对简单,网上有很多关于RC-522的驱动代码,我就不在赘述了。这里主要说一下读取到卡的ID以后的操作。在这之前还要先讲一下单片机的网络连接方案。 网络连接方案有很多,例如传统的软件TCP / IP协议栈方案;较新的硬件的TCP / IP协议栈方案;软件协议栈代码量较大,对工程师来说工作量也相对较大硬件协议栈较为简单,只需要将要发送的数据交给网络芯片处理就行了。数据的发送和接收都有该芯片来实现。我们只需在应用层传输/读取数据就行了。 硬件协议栈的方案是由WIZnet的首次提出,并成功推出以太网芯片系列.W5500EVB就是采用以STM32RCT6为主控芯片加W5500以太网芯片的方案来实现网络接入的功能。 设备在读取到卡的ID以后将ID数据封装打包以后交给W5500,W5500将数据通过HTTP协议将数据发送给后台服务器并接收服务器返回的响应报文。成功发送和响应后蜂鸣器会发出50ms的响声来提示数据上传成功。如不成功则会发出100ms的响声来提示数据上传错误。数据上传的代码如下: 其中post_data_to_server()函数是将ID数据打包成HTTP报文的格式。Send函数是W5500的官方库函数用来执行数据的发送。getSn_RX_RSR()函数是读取SOCKET的接收缓存来判断是否有数据需要接收,这里是来接收HTTP服务器的响应报文。 以上就实现了IC卡数据读取和上传的功能,下面说一下后台服务器和前端实现的部分。   后台数据处理及前端显示  2、后台数据处理及前端显示 该系统的后台服务器的环境搭建采用的是 该系统的后台服务器的环境搭建采用的是Apache + php+ MySQL组合,该组合非常适合开发中小型的web应用,开发的速度比较快。本系统中在硬件设备将卡的ID数据上传到服务器以后,服务器接收并将数据与数据库中的数据进行对比,然后更新与此ID对应的用户信息。浏览器再向服务器发出请求报文,服务器将数据库中的数据发送给浏览器并显示。 根据上面说的在设备上传数据之前我们需要先将卡的ID插入到数据库中,而且还要在已登录的状态下插入、查看、删除数据。再加上权限设置,这样才算是一个相对较完整的系统设置。 首先我们在phpMyAdmin中新建自己的数据库,如图: 其中company是注册用户是所填写的用户信息; Record是用来存储用户所添加的员工打卡签到的信息; Register是用来存储用户添加的员工信息; Test是存储用户员工的签到状态; Time是存储签到时间; Uaccount是存储用户的账户信息; 以上字段是用来存储用户的各项数据和信息的,浏览器在向服务器请求数据的时候服务器会从这里将对应的数据取出交给浏览器并显示。 服务器部分的功能是由服务器脚本语言PHP来编写实现的。首先我们要写一个系统注册和登陆的页面,然后将注册信息存储在数据库,这样下次登陆就可以直接比对数据库来判断是否为有效用户。如图为注册登陆界面: 注册登陆成功以后就可进入签到信息列表界面,该界面用来显示用户所添加的员工信息的签到状态。因为刚注册所以我们要先添加员工信息。 如图点击用户管理中心进入员工信息界面: 在该界面我们可查看、添加、修改、删除员工信息以及添加上下班时间。在完善这些信息后浏览器将这些数据信息发送给服务器,服务器再将这些数据插入到数据库中。上图中的信息列表、员工列表都是在完善员工信息和签到信息以后服务器从数据库中拿出发送到浏览器显示的结果。 这些工作完成以后服务器就可以接受来自设备上传的卡ID数据并将改数据与数据库中的已记录数据进行对比进而执行相应的操作。 此外该系统还有密码找回、生产Excel报表、用户搜索等功能。关于密码找回在登陆界面点击忘记密码然后填写注册时的邮箱就可通过邮件来重新设置自己的登陆密码;如图: 关于生产报表点击了信息列表页面的生成报表就可以直接下载系统自动生成的员工信息列表;该过程是由服务器自动完成,服务器向数据库索要用户员工信息然后生成Excel表格;如图: 关于用户搜索是在浏览器部分输入用户员工姓名信息,浏览器将这些数据提交给服务器,服务器再将这些数据与数据库中的数据进行对比然后将该员工的信息以表格的形式显示在浏览器页面,如图: 以上就是关于后台处理数据及前端浏览器显示的全部过程,到此整个系统的后台处理就完成了,我们可以通过浏览器登陆查看相关数据信息。 关于考勤系统的总结: 该系统主要有注册,登陆,密码找回,添加员工信息,设置签到时间,查看/修改/删除员工信息,查看员工签到信息以及搜索的功能。在实现这些功能的开发过程中主要运用PHP服务器脚本语言和MySQL的数据库语言以及HTML浏览器脚本语言来完成数据在数据库和服务器以及浏览器之间的传输。在浏览器显示的代码中还添加了CSS代码来修改HTML标签的样式以增强浏览器端显示的可视性。
Read More

FAE常见问题及解决方案-TOP10

应用, 物联网
Q1: 在芯片处于TCP_Server模式下,在交换机/路由器网络中无法ping通也无法通讯。 R: WIZnet芯片是硬件协议栈芯片,有别于软件协议栈,如果芯片不主动往网络中发包,在TCP_Server模式下是不会有任何数据包发送的,这样会造成路由ARP表中无法形成IP和MAC设备的对应关系。 A:解决方案: 在芯片上电时往任意IP发送一个UDP数据包,从而更新路由的ARP表,形成匹配关系,后续通讯就正常了。 关键词:交换机/路由器网络无法ping通 Q2: 芯片在TCP_Client模式下,断电重启之后无法立即连接到服务器。 R:这是由于客户端没有主动发送断开请求,造成服务器并不知道Socket已发生异常断开; 重新上电之后,芯片以相同的IP和端口连接服务器,而服务器还认为此Socket链接存在,所以拒绝芯片的立即连接。 A:解决方案: 在芯片使用KEEP_ALIVE机制,一段时间内发送呼吸包,如果芯片没有给服务器回复,服务器则判断链接已断开,并释放Socket资源,这时就可以成功连接。如果对客户端的本地端口没有要求的话,也可以在初始化Socket的部分让端口自动+1处理。两种方式根据具体应用分析采用。 注: 有的场景不能采用端口自动+1的方式,比如电力104规约,只允许采用2404端口连接。 关键词:重启才能连接/ 链接原先正常,后来连接不上/服务器重启才能恢复/更换IP或端口才能重连 Q3: 网线忽然断开,服务器的Socket已经断开,但是芯片不知道Socket已经断开,并没有重建链接,此时怎么处理 A:解决方案: 可以在主循环中加入判断PHYCFGR状态的处理流程,如果PHY状态发生异常,释放所有的socket资源,并重新初始化socket。相关寄存器如下: 关键词:拔网线,链接不恢复 Q4:如果芯片作为TCP_Server,最多可以链接几 个Client,应该如何操作? A:解决方案: 芯片作为TCP_Server,最多可以与8个客户端建立连接。不能初始一个Socket对应多个连接。可以将芯片的8个socket全部初始化,这样就可以与8个不同的TCP_Client建立通讯链接。 Q5:W5200进入Power Down模式后,长时间以后唤醒不能恢复正常,如何解决? A: 解决方案: W5200的Power Down模式是通过在一定时间内关闭W5200的内置PHY电路的工作来实现的,但是有一定几率PHY在休眠之后无法唤醒,需要在软件上做处理来唤醒芯片。经过测试验证发现,W5200芯片在3s极限值内快速唤醒一次再进入Power Down,当芯片需要唤醒正常工作时就不会出现以上问题。 Q6:WIZnet芯片进行公网通讯或者芯片间通讯的话怎么抓包? A: 解决方案: 芯片和PC通讯的话可以直接通过Wireshark抓包,如果芯片和公网直接通讯或者通讯是发生在芯片之间,则没有办法直接抓包,这需要借助于“可以抓包的交换机”,这种交换机多数是二手产品,而且是10M的网络,比如TP-LINK TL-HP5MU。把芯片和抓包计算机的网线分别插上交换机就可以运行抓包工具抓包 Q7: W5300 TCP连接以后,Socket0数据收发正常,其它Socket有数据丢失是什么问题? A:解决方案: W5300是总线方式操作,在确保地址总线和数据总线连接正确的情况下,还有一个很重要的问题,就是保持总线时序统一,经过验证MCU总线地址保持时间至少是W5300总线操作时间的2倍以上,否则可能会导致W5300来不及处理数据而导致数据丢失。如下图介绍。 (more…)
Read More

教你如何通过MCU配置S2E为TCP Client的工作模式

串口转以太网, 博客, 物联网
在上两篇文章中分别讲述了通过MCU配置S2E为UDP、TCP Server的工作模式”,相信小伙伴们已经对S2E的基本功能了解了一些,现在就让我们再接再厉、更上一层楼吧: 首先我们先了解一下MCU与S2E的接线方式: 1、接线方式: 2、例程说明: 打开“通过MCU配置S2E为TCP Client例程”,主程序中第一部分TIM3_Init();是设定一个帧中断的时间定时器,这是因为该例程MCU的串口是通过帧中断来接收AT命令配置S2E后返回的数据的。 第二部分USARTX_Init();初始化MCU用到的串口,这里用USART1_Config();是printf功能,用于查看调试信息。USART2_Config();用于配置S2E,需要注意的是该串口的配置参数需要同S2E的串口配置参数一致,否则配置失败。 第三部分主循环中的TCP_Client_Mode();用于配置S2E为TCP Client模式。S2E的AT命令列表详见各个S2E型号的用户手册AT命令章节介绍。配置成功,串口打印“TCP Client Config Success!”,配置失败串口打印“TCP Client Config Fail!”。 /**************************************************** 函数名:TCP_Client_Mode 形参:无 返回值:无 函数功能:通过串口发送AT命令配置S2E模块 ****************************************************/ volatile uint8_t SendFlag = 0; void TCP_Client_Mode(void) { uint8_t RecvFlag = 1; char *state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //终端检测命令 while (RecvFlag) { if (RX2_Point & FRAME_LEN) { //如果接收到数据 state = strstr((char*) RecvBuff, "OK"); //判断回复的数据中是否有“OK” if (state != NULL) { //有 RX2_Point = 0; //接收缓冲区指针置零 RecvFlag = 0; //接收标致位置零 SendFlag = 1; //发送标志位置零 printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); //接收缓存清零 } else { //无 SendFlag = 100; //配置失败 RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //开启(1)/关闭(0)回显命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & FRAME_LEN) { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0;…
Read More