概觀
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。
目錄
- 以太網絡
- WIZCHIP特定目錄(EX> W6100 – w6100.h,c)
- SOCKET API:h,socket.c
- ioLibrary配置文件:wizchip_conf.h,wizchip_conf.c
- 互聯網
- 用於IP配置的Protcols(EX> DHCP,DNS)
- 將添加一些協議
- 應用
- 應用程序套接字模式定義:Application.h
- Loopback:TCP,UDP Basic Skeleton Code,loopback.h,loopback.c
io6Library用戶可以通過在wizchip_conf.h中僅修改一些定義來立即使用它。有關更多信息,請參見如何使用。
如何使用
io6Library配置
定義wizchip_conf.h中定義的WIZCHIP的類型和接口,以滿足您的預期用途。
- 選擇要使用的硬連線雙TCP / IP堆棧控制器。在下圖中,選擇藍色框中的列表之一,並將其選定為_WIZCHIP_,如紅框。
- 選擇用戶將用於WIZCHIP Access的主機接口(並行總線,串行總線模式等)。在下圖中,選擇藍色框中的列表之一,並將其選定為_WIZCHIP_IO_MODE_,如紅框。
-
- 僅當使用並行總線模式時,必須將HOST的存儲區基地址設置為WIZCHIPCHIP,如紅色框。
- 僅當使用並行總線模式時,必須將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 }