W5500嵌入式以太网控制器

一. 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驱动函数进行注册。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,728评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,220评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,936评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,976评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,981评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,468评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,843评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,817评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,353评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,384评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,510评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,113评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,833评论 3 338
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,290评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,419评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,055评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,577评论 2 365