美文网首页
W5500嵌入式以太网控制器

W5500嵌入式以太网控制器

作者: 无知的talent | 来源:发表于2020-08-29 16:24 被阅读0次

    一. W5500介绍

    W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)以及物理层(PHY),使得用户使用单芯片就能够在他们的应用中扩展网络连接。

    Features:

    • 支持硬件TCP/IP协议栈:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE

    • 支持8个独立端口(socket)同时通讯

    • 支持掉电模式

    • 支持网络唤醒

    • 支持高速串行外设接口(SPI模式0,3)

    • 内部32k字节收发缓存,内嵌10BaseT/100BaseTX以太网物理层

    • 支持自动协商(10/100-Base全双工/半双工)

    • 不支持IP分片

    • 3.3V工作电压,I/O信号口5V耐压

    • LED状态显示(全双工/半双工, 网络连接, 网络速度, 活动状态)

    W5500芯片系统结构框图

    Screen Shot 2020-08-29 at 1.26.23 PM.png

    从上图可以看出W5500作为一款以太网通信芯片,它可以方便的扩展出主控芯片的以太网通信接口。W5500提供了SPI接口用于与主控芯片进行数据通讯,W5500的内部主要可以分为以下模块:

    1. SPI接口控制器

    2. 寄存器管理器

    3. TCP/IP协议栈核(从上到下包括传输层,网络层和数据链路层)

    4. MII(介质无关接口)管理器

    5. 以太网物理层

    6. 内存管理器

    7. 32k的发送和接收缓存

    二. W5500与主控芯片的数据交互

    W5500提供了SPI接口用于实现与主控芯片的数据交互。

    W5500与主机的连接方式及SPI工作模式

    1. SPI协议根据时钟信号空闲电平定义(高电平or低电平)以及数据锁存边沿方向(上升沿or下降沿)定义了SPI的4种工作模式(工作模式0,1,2,3)。在W5500中只支持工作模式0和3,在这两种模式下数据总是在SCLK信号的上升沿被锁存,在SCLK信号的下降沿被输出。

      Screen Shot 2020-08-29 at 4.11.16 PM.png
    2. 根据W5500与主控芯片的连接方式不同,W5500的SPI可以工作在两种模式下:

    • 变数据长度模式(VDM)

      Screen Shot 2020-08-29 at 4.10.28 PM.png
    • 定数据长度模式(FDM)

      Screen Shot 2020-08-29 at 4.10.50 PM.png

    W5500的SPI数据帧格式

    Screen Shot 2020-08-29 at 4.11.37 PM.png
    1. 偏移地址域(16bits):MSB到LSB传输,支持连续读写模式,该模式下偏移地址自动加1。

    2. 控制字域(8bits):

      1. 包括块选择位(4bits):选择W5500内存中的不同块,包括普通寄存器和8个socket寄存器及相应的发送/接收寄存器。

      2. 读写控制位:0为读, 1 为写。

      3. 模式选择位:配置W5500的SPI工作模式,配置定义如下表

        OM[0:1]值 模式
        00 可变数据长度模式,Nbytes数据域
        01 固定数据长度模式,N=1
        10 固定数据长度模式,N=2
        11 固定数据长度模式,N=4
    3. 数据域(N*8bits):MSB到LSB传输的数据

    W5500的内存分布结构

    Screen Shot 2020-08-29 at 4.12.48 PM.png

    W5500的内部存储包括:

    1. 1个普通寄存器block:这里配置了W5500的一些基本信息,如网络配置(IP,MAC地址,Socket中断配置等等)

    2. 8个Socket寄存器block:这里配置了每个Socket对应的信息,如Socket的模式,命令,状态,中断信息等。

    3. 8个Socket对应的接收缓冲寄存器block(共16k):初始时每个Socket分配为2k的缓存,用户可以自己重新通过修改相应的配置寄存器进行修改,但是要保证分配给8个Socket的缓冲大小之和不能超过16k,否则会报错。

    4. 8个Socket对应的发送缓冲寄存器block(共16k):同3

    三. W5500官方库移植

    W5500官方库介绍:

    wiznet公司为了方便芯片使用者进行软件开发,提供了相应的芯片底层驱动库,在这个库中实现了:

    1. 对W5500的硬件抽象,用户只需要将主控芯片的SPI驱动函数注册到W5500中即可以实现主控芯片和W5500之间的数据交互。

    2. 实现了TCP/IP协议的接口,官方库中实现了BSD风格的Socket接口可供用户直接调用。

    3. 提供了一些应用层协议开发的接口实现,如FTP, HTTP,MQTT等。

    官方库使用github托管,链接地址为:

    [wiznet/ioLibrary] Https://github.com/Wiznet/ioLibrary_Driver

    W5500官方库移植方法

    1. 下载或clone官方库到本地,选择需要的文件添加到自己的工程当中,官方库的文件架构如下:

      w5500_ioLibrary.jpeg

      Ethernet文件夹下包含的是以太网相关协议的实现,一般都是必须的(选择相应的芯片类型添加),而internet文件夹下则是一些应用层协议的实现,可以根据自己的需要进行添加。

    2. 根据实际使用的芯片和硬件架构修改wizchip_conf.h头文件中的定义,如:

      1. 根据实际使用的芯片修改芯片型号定义(WIZCHIP宏),默认为W5100S,使用W5500芯片时只需要改为:

             #define _WIZCHIP_              W5500
        
      2. 找到W5500对应的宏定义配置处,修改W5500与主控芯片的通信配置信息,对于W5500来说只有SPI这一种接口,这里只需要根据自己的需求选择SPI的两种工作模式:VDM和FDM,例如治理选择VDM模式:

            #define   _WIZCHIP_IO_MODE_       _WIZCHIP_IO_MODE_SPI_VDM
        
      3. 在wizchip_conf.h文件中有对W5500芯片的封装,该文件中提供了很多函数注册的接口,用于实现用户定义的SPI驱动函数接口和W5500官方库的硬件抽象接口之间的连接。因此只需要按照官方库中的定义实现相关的SPI驱动函数,然后再调用官方库中提供的注册函数将这些驱动函数进行注册,就能够打通主控芯片与W5500芯片之间的数据交互,实现驱动移植。

      4. 新建两个SPI驱动的接口文件,例如:w5500_interface.h和w5500_interface.c。然后在文件中实现以下底层的驱动函数:

          void CS_Select(void); //片选使能
          void CS_deSelect(void);   //片选清使能
          void SPI_Write_Byte(uint8_t byte);    //写单子节
          uint8_t SPI_Read_Byte(void);      //读单子节
          /* 丛发模式读数据 */
          void SPI_Read_Burst(uint8_t *buff, uint16_t len);
          /* 丛发模式写数据 */
          void SPI_Write_Burst(uint8_t *buff, uint16_t len);
        
      5. 编写W5500的初始化函数:

            void w5500_init(void);              
        

        在该函数中调用官方库提供的注册函数,将步骤4中实现的底层SPI驱动函数进行注册。

    相关文章

      网友评论

          本文标题:W5500嵌入式以太网控制器

          本文链接:https://www.haomeiwen.com/subject/bmkjsktx.html