目录:
一、简述
二、WIZnet网络芯片常见问题
1、如何确认WIZnet网络芯片的物理连接是否正常
2、为什么WIZnet网络芯片的物理连接不正常
3、WIZnet网络芯片物理连接正常却ping不通,怎么办
4、为什么WIZnet网络芯片可以ping通,但无法发送接收数据
三、W5500的MAC地址设置
1、w5500编写驱动需要设置物理地址
2、获取MCU唯一ID号
3、向IEEE申请MAC地址
四、如何移植使用W5500官方提供的最新Socket库
五、W5500芯片使用bug及注意事项
六、STM32驱动W5500网络示例程序
1、STM32F103驱动W5500网络程序
2、W5500-服务端模式例程(中断模式)
---------------------------------------------------------------------------------------------------------------------------------
一、简述
最近公司的配电终端上要加以太网功能,故收录。
二、WIZnet网络芯片常见问题
1、如何确认WIZnet网络芯片的物理连接是否正常
使用WIZnet的W5100、W5200、W5300、W5500等网络协议芯片,对其进行可靠的硬件复位(网络协议芯片的RESET或RST引脚)后可能出现下列现象:
(1)  芯片的LINKLED引脚输出低电平,LINKLED黄色指示灯点亮(未接、接错、灯坏除外,没有插入网线)
(2)  如果是通过网线直连电脑,电脑上本地连接显示本地连接已连接状态。如果是网线连到路由等设备,路由器相应指示灯提示连接成功
如果出现上述现象,表明物理连接已经成功并且芯片工作,否则需要排查相关问题

----------------------------------------------------------------

2、为什么WIZnet网络芯片的物理连接不正常
    WIZnet的W5100、W5200、W5300、W5500等网络芯片的物理连接是否成功和芯片是否工作以及相关线路是否正常有关系,可以从以下方面进行排查:
(1)  因芯片焊反或关键位置虚焊,短路等问题导致芯片不能正常工作。     
(2)  因芯片的供电,接地等不正常或连接芯片,导致芯片不能正常工作。
(3)  因芯片引脚外接的用于隔离数字电源与模拟电源的1uH电感损坏开路,导致不能工作。
(4)  因芯片的晶振不按要求连接,而导致芯片不能工作。使用有源振荡器的,线路连接错误,或者有源振荡器的电压不是1.8V,请参考浩然电子PDF进行正确设计 。
(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导致不能连接。
(11) 其它原因。
经过上面排查物理连接就可以连接正常了。
----------------------------------------------------------------
3、WIZnet网络芯片物理连接正常却ping不通,怎么办
WIZnet的W5100、W5200、W5300、W5500等网络芯片是否可以ping通,不仅与物理连接等有关系,还和相关电路以及网关、子网掩码、MAC地址、IP地址配置有关系,可以从以下方面进行排除:
(1)  W5100和W5300的RSET_BG引脚(1脚)所接12.3K电阻,W5200的BIAS引脚(12脚)所接28.7K电阻, 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地址必须设置在同一个子网。
(7)  如果是W5100采用并行总线方式,其SEN(31脚)必须为低,否则为高。如果是W5300采用16位数据总线接口,其BIT16EN(18脚)必须为高,否则为低。
(8)  如果用W5300采用16位数据总线,切记其地址ADDR0不起作用,有效地址为ADDR1~ADDR9。如果从ADDR1接单片机低位(比如A0)开始,接成ADDR0对应单片机的低位(A0),则ADDR1对应到单片机的A1,即相应的偏移地址都是原来的2倍,这是需要特别注意的地方。
(9)  其它原因。
----------------------------------------------------------------
4、为什么WIZnet网络芯片可以ping通,但无法发送接收数据
WIZnet的W5100、W5200、W5300、W5500等网络芯片可以ping通,说明相关电路以及网关、子网掩码、MAC地址、IP地址配置均正常, 如果不能建立连接发送接收数据,需要从从SOCKET配置,SOCKET状态,中断寄存器,发送接收程序,或是上位机软件的设置等进行排查 。
---------------------------------------------------------------------------------------------------------------------------------
三、W5500的MAC地址设置
1、w5500编写驱动需要设置物理地址
通用的做法是读出STM32的唯一ID,然后使用MD5算法计算得到MD5值,从计算后得到的值中,任意取6个字节作为MAC值,只要是子网内只有你自己的设备,同时取MAC的位置固定,重复可能性非常小。这样做的好处是简单,代码都是现成的,如果自己写也可以。但是这样也有一个问题,按照MAC地址规则,地址的首字节必须是偶数。
----------------------------------------------------------------
2、获取MCU唯一ID号
1)获取MCU唯一ID号代码示例
static u32 CpuID[3];  
static u32 mac_Code; 
u8 ID0,ID1,ID2,ID3;
void GetCPI_ID(void)  
{  
    CpuID[0]=*(u32*)(0x1fff7a10);  
    CpuID[1]=*(u32*)(0x1fff7a14);  
    CpuID[2]=*(u32*)(0x1fff7a18);  
    mac_Code = (CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
    ID0=mac_Code&0x000000FF;
    ID1=(mac_Code&0x0000FF00)>>8;
    ID2=(mac_Code&0x00FF0000)>>16;
    ID3=(mac_Code&0xFF000000)>>24;
}
2)固定W5500的MAC后两位为00:02
3)将ID0-ID3依次作为MAC的前四位。
假设ID0=0x01;ID1=0x02;ID2=0x03;ID3=0x04;
最终的MAC地址就是01:02:03:04:00:02;
STM32学习之:读取芯片的唯一标识ID产品唯一的身份标识的作用:
●  用来作为序列号(例如USB字符序列号或者其他的终端应用);
●  用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性;
●  用来激活带安全机制的自举过程;
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。要注意大端小端模式哟~
以下是相关代码:
* 函数名:Get_ChipID
* 描述  :获取芯片ID
* 输入  :无
* 输出  :无
* 说明  :96位的ID是stm32唯一身份标识,可以以8bit、16bit、32bit读取,提供了大端和小端两种表示方法

void Get_ChipID(void)

{

#if 1

u32 ChipUniqueID[3];

//地址从小到大,先放低字节,再放高字节:小端模式

//地址从小到大,先放高字节,再放低字节:大端模式

ChipUniqueID[2] = *(__IO u32*)(0X1FFFF7E8);  // 低字节

ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //

ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节

printf("######## 芯片的唯一ID为: X-X-X  rn",ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);

//此条语句输出32位

#else   //调整了大小端模式,与ISP下载软件的一致

u8 temp[12];

u32 temp0,temp1,temp2;

temp0=*(__IO u32*)(0x1FFFF7E8);    //产品唯一身份标识寄存器(96位)

temp1=*(__IO u32*)(0x1FFFF7EC);

temp2=*(__IO u32*)(0x1FFFF7F0);

temp[0] = (u8)(temp0 & 0x000000FF);

temp[1] = (u8)((temp0 & 0x0000FF00)>>8);

temp[2] = (u8)((temp0 & 0x00FF0000)>>16);

temp[3] = (u8)((temp0 & 0xFF000000)>>24);

temp[4] = (u8)(temp1 & 0x000000FF);

temp[5] = (u8)((temp1 & 0x0000FF00)>>8);

temp[6] = (u8)((temp1 & 0x00FF0000)>>16);

temp[7] = (u8)((temp1 & 0xFF000000)>>24);

temp[8] = (u8)(temp2 & 0x000000FF);

temp[9] = (u8)((temp2 & 0x0000FF00)>>8);

temp[10] = (u8)((temp2 & 0x00FF0000)>>16);

temp[11] = (u8)((temp2 & 0xFF000000)>>24);

printf("######## STM32芯片ID为: %.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X-%.2X%.2X%.2X%.2X rn",

temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8],temp[9],temp[10],temp [11]); //串口打印出芯片ID

#endif

}

* 函数名:Get_ChipInfo(void)

* 描述  :获取芯片Flash 大小

* 输入  :无

* 输出  :无

* 说明  :

void Get_ChipInfo(void)

{

uint32_t ChipUniqueID[3];

u16 STM32_FLASH_SIZE;

ChipUniqueID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节

ChipUniqueID[1] = *(__IO u32 *)(0X1FFFF7EC); //

ChipUniqueID[2] = *(__IO u32 *)(0X1FFFF7E8); // 低字节

STM32_FLASH_SIZE= *(u16*)(0x1FFFF7E0);    //闪存容量寄存器

printf("rn########### 芯片的唯一ID为: %X-%X-%X n",

ChipUniqueID[0],ChipUniqueID[1],ChipUniqueID[2]);

printf("rn########### 芯片flash的容量为: %dK n", STM32_FLASH_SIZE);

printf("rn########### 烧录日期: "__DATE__" - "__TIME__"n");

//输出使用固件库版本号

printf("rn########### 代码固件库版本: V %d.%d.%d n",__STM32F10X_STDPERIPH_VERSION_MAIN,__STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);

}

----------------------------------------------------------------
3、向IEEE申请MAC地址

2014年1月份,IEEE施行了新的MAC地址块的申请方式和命名方式。

英文好的话直接进官网:IEEE - The world's largest technical professional organization dedicated to advancing technology for the benefit of humanity.

不同于以往按照OUI和OUI-36分配MAC的方式,新的规则将MAC地址块分成三类进行申请,并且对三类地址块使用了更简单明了的命名方式:

1)MA-L (MAC Address Block Large):

等同于以前的OUI(24bit)申请方式,会分配24位的OUI给申请者,申请者可以自行分配剩余的24位来获取MAC地址,这种方式

可以获得大2^24(约1600万)的MAC地址。

针对企业用户,一般都是以这种方式申请为多,因为总共12位16进制码的MAC地址, 厂商ID占前6位, 其他6位客户都可以随意用,

自行管理,一次性收费。这样申请一个厂商ID号可以享用2的24次方即16777216个MAC地址,通常记为1600万个。

申请方式是,首先确定自己的公司名称没有和别人重复,这个可以在这里查询:

IEEE SA - Registration Authority

确定无误后,就可以到OUI 网站申请MAC地址了:

IEEE SA - Registration Authority

2)MA-M (MAC Address Block Medium):

这是新增加的MAC地址块申请类型,不再分配给申请者OUI代码,每次申请能够获得的地址为2^20(约100万)的MAC地址。

3)MA-S (MAC Address Block Small):

针对个人用户,等同于以往OUI-36申请的方式,这种方式留给申请者自行分配的代码只有12位,因此只能获得4096个MAC地址。

新的地址块划分方式可以满足不同需求的申请者,避免MAC地址的浪费,有效利用MAC地址资源。对于MAC地址使用量不大的申请者,在一定程度上也能降低申请费用。

Address Block

Previously Named

Number of Addresses

Applicable for 48-bit addresses

Applicable for 64-bit addresses

MA-L

OUI

2^24 (~16 Million)

Yes

Yes

MA-M

--

2^20 (~1 Million)

Yes

Yes

MA-S

OUI-36(encompasses IAB Assignments)

2^12 (4,096)

Yes

Yes

---------------------------------------------------------------------------------------------------------------------------------
四、如何移植使用W5500官方提供的最新Socket库
非常详实的介绍。
---------------------------------------------------------------------------------------------------------------------------------
五、W5500芯片使用bug及注意事项

1、W5500无论是TCP客户端还是服务端,通过自动或者手动KEEPALIVE来知道对方已经不在线,W5500的机制是双方必须都发送成功过数据,才会人为链路OK,才会发送心跳,否则抓包你是看不到的。这个其他地方都不一定说了。代码如下很简单,写寄存器

blog.csdn.net/longjianhappy/article/details/78937233

//keepalive 心跳 手动
void Send_KA(SOCKET s)
{Write_W5500_SOCK_1Byte(s,Sn_KPALVTR,0);Write_W5500_SOCK_1Byte(s,Sn_CR,SEND_KEEP);
}//自动keeplive 1-7
void AUTO_KA(void)
{
U8 i=0;for(i=1;i<8;i++){Write_W5500_SOCK_1Byte(i,Sn_KPALVTR,1);//1*5S}
}

----------------------------------------------------------------

2、接收网络数据函数,这个是普遍例程里面的 
size=Read_SOCK_Data_Buffer(0, Rx_Buffer); 
这个size可能是0,如果发送串口出去,恭喜,单片机就2了,使劲发送各种乱起八糟的东西,看门狗就重启了,然后就RST。

测试了很久,这个芯片还是不错的,前提是连上网之后,但是有时候初始化阶段就进不去下一步,就是在等待网线插入那个函数是死循环 
while((Read_W5500_1Byte(PHYCFGR)&LINK)==0)//等待以太网连接完成 

  if(debugflag==1) 
  { 
    LED=0; 
    Uart_Send_Byte(‘S’); 
    Uart_Send_Byte(‘Y’); 
    Uart_Send_Byte(‘:’); 
    Uart_Send_Byte(‘W’); 
    Uart_Send_Byte(‘A’); 
    Uart_Send_Byte(‘I’); 
    Uart_Send_Byte(‘T’); 
    Uart_Send_Byte(0x0d); 
    Uart_Send_Byte(0x0a); 
    delay_ms(100); 
    LED=1;

}

}

加了一个指示的,方便确定是这里

---------------------------------------------------------------------------------------------------------------------------------

六、STM32驱动W5500网络示例程序
1、STM32F103驱动W5500网络程序
2、W5500-服务端模式例程(中断模式)
---------------------------------------------------------------------------------------------------------------------------------

WIZnet网络芯片的使用相关推荐

  1. 高速网络芯片 入驻移动基站

    --WIZnet产品应用小例46:移动基站 为了保障移动通信的顺畅和实现无缝隙覆盖,电信运营商有时需要在通话需求量较大的写字楼.居民区增设移动通信基站.基于全硬件TCP/IP协议栈的网络芯片能稳定.高 ...

  2. 山东大学-WIZnet网络控制实验室揭牌仪式成功举行

    5月31日,山东大学-WIZnet网络控制实验室揭牌仪式在山东大学千佛山校区控制科学与工程学院举行.山东大学教育基金会主任艾斌.山东大学控制学院院长王玉振,WIZnet总裁Y.B. Lee.WIZne ...

  3. 最新 android wifi芯片,世界首款WiFi6与蓝牙5.1 SOC:Qualcomm 高通 发布 QCA6390 网络芯片...

    世界首款WiFi6与蓝牙5.1 SOC:Qualcomm 高通 发布 QCA6390 网络芯片 2019-02-27 15:56:21 55点赞 99收藏 86评论 直达链接 除了近日MWC 2019 ...

  4. 同一块网络芯片的多个SOCKET,可以同时设置成客户端去连接电脑服务器的一个端口吗,怎么实现?

    解决方案: 当然可以,WIZnet每款网络协议芯片都可以支持多个SOCKET同时工作,只需将芯片内每个SOCKET设置成不同端口号,分别设置成客户端去连接服务器就行, 前提是服务器的上位机软件需支持多 ...

  5. WIZnet W5500 芯片科技新突破

    WIZnet W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案.W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(P ...

  6. 如何令WIZnet以太网芯片/模块实现PoE(PowerOverEthernet)?

    首先, 我先介绍一下什么是PoE. Power over Ethernet,简称PoE,是一个可以在以太网络中透过双绞线来传输电力与数据到装置上的技术.透过这项技术包括网络电话.无线基地台.网络摄影机 ...

  7. RTL8201网络芯片讲解

    目录 01.基础问题 1.1.芯片数据接口 1.2.芯片地址 1.3.时钟源的选择 02.寄存器 01.基础问题 1.1.芯片数据接口 RTL8201E(L)是一种单芯片/单端口快速以太网物理接收器, ...

  8. 网络芯片比较:DP83848、DM9000、enc28j60、RLD8019、w5100

     原址:http://blog.chinaunix.net/uid-27768683-id-4266118.html 网卡工作在osi的最后两层,物理层(PHY)和数据链路层(MAC).      ...

  9. [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A(对比原子和NXP官方测试板的网络芯片LAN8720A , KSZ8081 (也是飞凌)唯独复位引脚不同595芯片也涉及改动)

    I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部MAC+外部 PHY 芯片的方案. I.MX6UL/ULL 有两个网络接 ...

最新文章

  1. Eclipse里的文件搜索
  2. 如何使用Graphics2D在一张图片上画线(包括箭头)
  3. Android中Application类用法
  4. 26.idea导入jar包
  5. ansible的错误
  6. linux 自带 mysql,linux下安装mysql
  7. 如何在IIS上配置多个网站,及网站发布配置讲解
  8. OLAP-druid-大数据Week13-DAY2-druid
  9. linux下载镜像的命令wget,Linux wget命令整站下载做网站镜像
  10. Linux安装的分区问题
  11. 内置函数dict()字典
  12. jdk动态代理的实现流程(事务处理)
  13. Microstation v8+Terrasolid安装教程
  14. python3写入txt_[Python3] 写入文本文件[TZZ]
  15. 23种设计模式(自学笔记)
  16. ThinkPHP6.0学习入门:环境搭建与安装教程
  17. 鸡啄米:C++编程入门系列之前言
  18. man page 中代号的意思
  19. 【AMD、CMD和CommonJS】
  20. 微信支付结算费率怎么降低至0.2~0.35操作方法

热门文章

  1. 推荐一个临时邮箱生成网站 Tempmail
  2. 拼多多面试官没想到RabbitMQ我早就入门了,人直接傻掉
  3. “鲨鱼”特斯拉的降维打击,理想、蔚来、小鹏只能跪地求饶?
  4. 苹果首席设计师Jony Ive离职 真正的原因究竟是什么?
  5. C#根据输入的层数打印星号(*)组成的的三角形
  6. Arduino 声音传感器 实验
  7. 用计算机算预产期,预产期计算器
  8. vue中使用Echarts渲染四川地图
  9. 内容运营、用户运营、活动运营的区别和主要工作内容,你能区分吗?
  10. 什么是Pinia,它是如何工作的