WIZnet-io6Library如何使用

概觀

io6Library是一個IPv6集成庫,可以輕鬆集成和管理使用WIZnet硬連線雙TCP / IP堆棧控制器(WIZCHIP)產品系列的用戶應用程序。

io6Library用於管理依賴於用戶特定MCU的代碼,因此用戶無需根據用戶MCU執行io6Library的移植操作。(有關更多信息,請參見如何使用)


內容

io6Library可分為以下三種類型。

 

  • Reigsters Defintion

    • 通用寄存器:定義通用寄存器,如網絡信息,模式,中斷等。
    • 套接字寄存器:定義SOCKET寄存器,如套接字模式,套接字通信,套接字中斷等。
  • 每個WIZCHIP I / O訪問功能

    • 基本I / O功能:通過WIZCHIP定義的HOST接口(SPI,BUS等)訪問輸入/輸出的基本單元功能
    • 公共寄存器訪問功能:基於基本I / O功能訪問公共寄存器的功能
    • SOCKET寄存器訪問功能:基於基本I / O功能訪問SOCKET寄存器的功能
  • WIZCHIP控制API,用於用戶應用程序集成,管理和遷移

    • SOCKET API:與BSD SOCKET API一樣,SOCKET API提供可以與socket socket commuuincation相關的函數集
    • 額外的API:它提供支持用戶應用程序集成的功能,無論WIZCHIP特定的Regiter / Memory,Address Map,Features等等。:對於User Application的小佔用空間,可以使用WIZCHIP I / O Access功能替換它。

      有關更多詳細信息,請參閱io6Library.chm

io6Library.chm可能不是最新的,所以請參考doxygen程序程序使用Doxyfile.dox項目製作的文檔。如果您願意,Doxygen程序可以將文檔設置為chm,html或pdf。


目錄

io6Library用戶可以通過在wizchip_conf.h中僅修改一些定義來立即使用它。有關更多信息,請參見如何使用。


如何使用

io6Library配置

定義wizchip_conf.h中定義的WIZCHIP的類型和接口,以滿足您的預期用途。

  • 選擇要使用的硬連線雙TCP / IP堆棧控制器。在下圖中,選擇藍色框中的列表之一,並將其​​選定為_WIZCHIP_,如紅框。

  • 選擇用戶將用於WIZCHIP Access的主機接口(並行總線,串行總線模式等)。在下圖中,選擇藍色框中的列表之一,並將其​​選定為_WIZCHIP_IO_MODE_,如紅框。

    • 僅當使用並行總線模式時,必須將HOST的存儲區基地址設置為WIZCHIPCHIP,如紅色框。               
  • WIZCHIP PHY訪問模式配置如下圖所示,選擇藍色框中定義的以太網PHY訪問模式的兩種方法之一,並將其​​定義為紅色框。

    • _PHY_IO_MODE_PHYCR_:它通過PHY命令和狀態寄存器提供對WIZCHIP的以太網PHY的簡單控制,如PHY操作模式和鏈路狀態。
    • _PHY__IO_MODE_MII_:通過MDC / MDIO信號直接控制WIZCHIP PHY的以太網PHY寄存器。

WIZCHIP I / O訪問創建用戶定義的功能

根據您的HOST界面自行創建基本的Access I / O功能。這是因為每個用戶HOST的接口控制方法不同。所以,你應該成功。

例如,如果您使用STM32FXXX的SPI1定義以下內容並控制WIZCHIP

 

#定義 _WIZCHIP_IO_MODE_        _WIZCHIP_IO_MODE_SPI_VDM_

 

通過SPI接口創建基本單元功能,如WIZCHIP選擇/取消選擇,1字節讀/寫,臨界區進入/退出等,如下所示。

通過SPI接口進行基本I / O訪問功能,如WIZCHIP選擇/取消選擇,1字節讀/寫和臨界區進入/退出,如下所示。

  • WIZCHIP選擇/取消選擇:用於設置/複位與WIZCHIP的CSn引腳相連的STM32FXXX的任何GPIO的功能
01 void  your_wizchip_enable(void)
02 {
03    / * void HAL_GPIO_WritePin(GPIO_TypeDef *     GPIOx,uint16_t          
GPIO_Pin,GPIO_PinState PinState)* /
04     HAL_GPIO_WritePin(GPIOD,GPIO_PIN_7,GPIO_PIN_RESET)
05 }
06 
07 void  your_wizchip_disable(void)
08 {
09    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_7,GPIO_PIN_SET)
10 } 


  • WIZCHIP 1字節讀/寫:通過SPI接口讀寫1字節的功能
01 / *通過SPI讀取1個字節* /
02  uint8_t  your_spi_read_byte()
03 {
04    uint8_t ret;
05    /*HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef
06    *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)*/
07     HAL_SPI_Receive(SPI1,&RET,1,1000);
08     return ret;
09 }
10 
11 / *通過SPI寫入1個字節* /
12  void  your_spi_wite_byte( uint8_t wd)
13 {
14   / * HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef 
15   * hspi,uint8_t * pData,uint16_t Size,uint32_t Timeout); * /
16    HAL_SPI_Transmit(SPI1,&wd, 1, 1000);
17 } 

  • WIZCHIP關鍵部分進入/退出:在WIZCHIP訪問時防止諸如interupts和任務切換等事件的功能
01 void  your_critical_enter(void)
02 {
03   __disable_irq();
04 } 
05 void  your_critical_exit(void)
06 {
07   __enable_irq();
08 } 


  • WIZCHIP N字節讀/寫功能:不是強制性的。:但是,如果要使用WIZCHIP使用DMA等外設進行高速訪問,請按以下步驟進行操作。:即使不這樣做,也可以使用N字節讀/寫訪問,因為它是通過重複您的1字節讀/寫功能來執行的。
01 void  your_spi_dma_write_buf(uint8_t * pbuf,iodata_t len)
02 {
03   / * HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef * hspi,  
uint8_t * pData,uint16_t Size)* /
04    HAL_SPI_Transmit_DMA(SPI1,pbuf,(uint16_t)len);
05 }
06 void  your_spi_dma_read_buf(uint8_t * pbuf,iodata_t len)
07 {
08   / * HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef * hspi,     
uint8_t * pData,uint16_t Size)* /
09    HAL_SPI_Receive_DMA(SPI1,pbuf,( uint16_t)len);
10 } 

將您定義的函數註冊到io6Library

在WIZCHIP初始化之前註冊您在上述示例中製作的定義代碼,如下所示。

01 #include "wizchip_conf.h"  // Just only included for using ioLibrary
02 void  main(void)
03 {
04    uint16_t chip_id;
05    wiz_NetTimeout tmp_timeout = 0 ;
06    / *
07     //初始化目標系統,如SPI,UART,DMA等。
08    * /   
09    / *將您的基本訪問功能註冊到io6Library * /
10    // WIZCHIP啟用/禁用
11    reg_wizchip_cs_cbfunc(your_wizchip_enable,your_wizchip_disable);
12    // WIZCHIP Critical Section 
13    reg_wizchip_cris_cbfunc(your_critical_enter,your_critical_exit);
14    // WIZCHIP讀/寫功能
15    reg_wizchip_spi_cbfunc(your_spi_read_byte,
your_spi_write_byte, 0, 0);
16    //如果您為readign/writting函數創建DMA函數,您可以註冊如下
17    //reg_wizchip_spi_cbfunc(your_spi_read_byte, your_spi_write_byte,      
your_spi_dma_read_buf, your_spi_dma_write_buf);
18 
19    / *對於io6Library讀/寫測試* /
20    //讀取測試
21    ctlwizchip(CW_GET_ID,&chip_id); 
22    //Check WIZCHIP ID value for read test
23    if(chip_id != 0x6100) printf("ERROR : HOST I/F READ\r\n")
24    //這只是W6100的例子41 

25
26    //寫測試
27    ctlwizchip(CW_PHY_RESET, 0);  
28    //檢查物理PHY Link Led關閉然後再打開。
 
29 }