W5500嵌入式以太網(wǎng)控制器

一. W5500介紹

W5500是一款全硬件TCP/IP嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡(jiǎn)易的互聯(lián)網(wǎng)連接方案。W5500集成了TCP/IP協(xié)議棧,10/100M以太網(wǎng)數(shù)據(jù)鏈路層(MAC)以及物理層(PHY),使得用戶使用單芯片就能夠在他們的應(yīng)用中擴(kuò)展網(wǎng)絡(luò)連接。

Features:

  • 支持硬件TCP/IP協(xié)議棧:TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE

  • 支持8個(gè)獨(dú)立端口(socket)同時(shí)通訊

  • 支持掉電模式

  • 支持網(wǎng)絡(luò)喚醒

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

  • 內(nèi)部32k字節(jié)收發(fā)緩存,內(nèi)嵌10BaseT/100BaseTX以太網(wǎng)物理層

  • 支持自動(dòng)協(xié)商(10/100-Base全雙工/半雙工)

  • 不支持IP分片

  • 3.3V工作電壓,I/O信號(hào)口5V耐壓

  • LED狀態(tài)顯示(全雙工/半雙工, 網(wǎng)絡(luò)連接, 網(wǎng)絡(luò)速度, 活動(dòng)狀態(tài))

W5500芯片系統(tǒng)結(jié)構(gòu)框圖

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

從上圖可以看出W5500作為一款以太網(wǎng)通信芯片,它可以方便的擴(kuò)展出主控芯片的以太網(wǎng)通信接口。W5500提供了SPI接口用于與主控芯片進(jìn)行數(shù)據(jù)通訊,W5500的內(nèi)部主要可以分為以下模塊:

  1. SPI接口控制器

  2. 寄存器管理器

  3. TCP/IP協(xié)議棧核(從上到下包括傳輸層,網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層)

  4. MII(介質(zhì)無關(guān)接口)管理器

  5. 以太網(wǎng)物理層

  6. 內(nèi)存管理器

  7. 32k的發(fā)送和接收緩存

二. W5500與主控芯片的數(shù)據(jù)交互

W5500提供了SPI接口用于實(shí)現(xiàn)與主控芯片的數(shù)據(jù)交互。

W5500與主機(jī)的連接方式及SPI工作模式

  1. SPI協(xié)議根據(jù)時(shí)鐘信號(hào)空閑電平定義(高電平or低電平)以及數(shù)據(jù)鎖存邊沿方向(上升沿or下降沿)定義了SPI的4種工作模式(工作模式0,1,2,3)。在W5500中只支持工作模式0和3,在這兩種模式下數(shù)據(jù)總是在SCLK信號(hào)的上升沿被鎖存,在SCLK信號(hào)的下降沿被輸出。

    Screen Shot 2020-08-29 at 4.11.16 PM.png
  2. 根據(jù)W5500與主控芯片的連接方式不同,W5500的SPI可以工作在兩種模式下:

  • 變數(shù)據(jù)長度模式(VDM)

    Screen Shot 2020-08-29 at 4.10.28 PM.png
  • 定數(shù)據(jù)長度模式(FDM)

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

W5500的SPI數(shù)據(jù)幀格式

Screen Shot 2020-08-29 at 4.11.37 PM.png
  1. 偏移地址域(16bits):MSB到LSB傳輸,支持連續(xù)讀寫模式,該模式下偏移地址自動(dòng)加1。

  2. 控制字域(8bits):

    1. 包括塊選擇位(4bits):選擇W5500內(nèi)存中的不同塊,包括普通寄存器和8個(gè)socket寄存器及相應(yīng)的發(fā)送/接收寄存器。

    2. 讀寫控制位:0為讀, 1 為寫。

    3. 模式選擇位:配置W5500的SPI工作模式,配置定義如下表

      OM[0:1]值 模式
      00 可變數(shù)據(jù)長度模式,Nbytes數(shù)據(jù)域
      01 固定數(shù)據(jù)長度模式,N=1
      10 固定數(shù)據(jù)長度模式,N=2
      11 固定數(shù)據(jù)長度模式,N=4
  3. 數(shù)據(jù)域(N*8bits):MSB到LSB傳輸?shù)臄?shù)據(jù)

W5500的內(nèi)存分布結(jié)構(gòu)

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

W5500的內(nèi)部存儲(chǔ)包括:

  1. 1個(gè)普通寄存器block:這里配置了W5500的一些基本信息,如網(wǎng)絡(luò)配置(IP,MAC地址,Socket中斷配置等等)

  2. 8個(gè)Socket寄存器block:這里配置了每個(gè)Socket對(duì)應(yīng)的信息,如Socket的模式,命令,狀態(tài),中斷信息等。

  3. 8個(gè)Socket對(duì)應(yīng)的接收緩沖寄存器block(共16k):初始時(shí)每個(gè)Socket分配為2k的緩存,用戶可以自己重新通過修改相應(yīng)的配置寄存器進(jìn)行修改,但是要保證分配給8個(gè)Socket的緩沖大小之和不能超過16k,否則會(huì)報(bào)錯(cuò)。

  4. 8個(gè)Socket對(duì)應(yīng)的發(fā)送緩沖寄存器block(共16k):同3

三. W5500官方庫移植

W5500官方庫介紹:

wiznet公司為了方便芯片使用者進(jìn)行軟件開發(fā),提供了相應(yīng)的芯片底層驅(qū)動(dòng)庫,在這個(gè)庫中實(shí)現(xiàn)了:

  1. 對(duì)W5500的硬件抽象,用戶只需要將主控芯片的SPI驅(qū)動(dòng)函數(shù)注冊(cè)到W5500中即可以實(shí)現(xiàn)主控芯片和W5500之間的數(shù)據(jù)交互。

  2. 實(shí)現(xiàn)了TCP/IP協(xié)議的接口,官方庫中實(shí)現(xiàn)了BSD風(fēng)格的Socket接口可供用戶直接調(diào)用。

  3. 提供了一些應(yīng)用層協(xié)議開發(fā)的接口實(shí)現(xiàn),如FTP, HTTP,MQTT等。

官方庫使用github托管,鏈接地址為:

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

W5500官方庫移植方法

  1. 下載或clone官方庫到本地,選擇需要的文件添加到自己的工程當(dāng)中,官方庫的文件架構(gòu)如下:

    w5500_ioLibrary.jpeg

    Ethernet文件夾下包含的是以太網(wǎng)相關(guān)協(xié)議的實(shí)現(xiàn),一般都是必須的(選擇相應(yīng)的芯片類型添加),而internet文件夾下則是一些應(yīng)用層協(xié)議的實(shí)現(xiàn),可以根據(jù)自己的需要進(jìn)行添加。

  2. 根據(jù)實(shí)際使用的芯片和硬件架構(gòu)修改wizchip_conf.h頭文件中的定義,如:

    1. 根據(jù)實(shí)際使用的芯片修改芯片型號(hào)定義(WIZCHIP宏),默認(rèn)為W5100S,使用W5500芯片時(shí)只需要改為:

           #define _WIZCHIP_              W5500
      
    2. 找到W5500對(duì)應(yīng)的宏定義配置處,修改W5500與主控芯片的通信配置信息,對(duì)于W5500來說只有SPI這一種接口,這里只需要根據(jù)自己的需求選擇SPI的兩種工作模式:VDM和FDM,例如治理選擇VDM模式:

          #define   _WIZCHIP_IO_MODE_       _WIZCHIP_IO_MODE_SPI_VDM
      
    3. 在wizchip_conf.h文件中有對(duì)W5500芯片的封裝,該文件中提供了很多函數(shù)注冊(cè)的接口,用于實(shí)現(xiàn)用戶定義的SPI驅(qū)動(dòng)函數(shù)接口和W5500官方庫的硬件抽象接口之間的連接。因此只需要按照官方庫中的定義實(shí)現(xiàn)相關(guān)的SPI驅(qū)動(dòng)函數(shù),然后再調(diào)用官方庫中提供的注冊(cè)函數(shù)將這些驅(qū)動(dòng)函數(shù)進(jìn)行注冊(cè),就能夠打通主控芯片與W5500芯片之間的數(shù)據(jù)交互,實(shí)現(xiàn)驅(qū)動(dòng)移植。

    4. 新建兩個(gè)SPI驅(qū)動(dòng)的接口文件,例如:w5500_interface.h和w5500_interface.c。然后在文件中實(shí)現(xiàn)以下底層的驅(qū)動(dòng)函數(shù):

        void CS_Select(void); //片選使能
        void CS_deSelect(void);   //片選清使能
        void SPI_Write_Byte(uint8_t byte);    //寫單子節(jié)
        uint8_t SPI_Read_Byte(void);      //讀單子節(jié)
        /* 叢發(fā)模式讀數(shù)據(jù) */
        void SPI_Read_Burst(uint8_t *buff, uint16_t len);
        /* 叢發(fā)模式寫數(shù)據(jù) */
        void SPI_Write_Burst(uint8_t *buff, uint16_t len);
      
    5. 編寫W5500的初始化函數(shù):

          void w5500_init(void);              
      

      在該函數(shù)中調(diào)用官方庫提供的注冊(cè)函數(shù),將步驟4中實(shí)現(xiàn)的底層SPI驅(qū)動(dòng)函數(shù)進(jìn)行注冊(cè)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容