一、概述
本文應(yīng)用主要是使用SPI驅(qū)動(dòng)wiznet的網(wǎng)絡(luò)接口芯片W5xxx,根據(jù)wiznet提供的ioLibrary_Driver庫(kù)支持W5100、W5100S、W5200、W5300、W5500。主要從以下幾點(diǎn)進(jìn)行說(shuō)明:
使用hpm_sdk的cmake框架對(duì)接wiznet的ioLibrary_Driver。
ioLibrary_Driver的底層讀寫(xiě)相關(guān)操作接口注冊(cè)對(duì)接。
以ioLibrary_Driver庫(kù)測(cè)試wiznet的速率性能。
本文不做wiznet芯片相關(guān)寄存器闡述,只簡(jiǎn)單闡述W5xxx的通信機(jī)制。
本文以W5500作為本文測(cè)試芯片。
二、流程
(一)使用hpm_sdk的cmake框架對(duì)接wiznet的ioLibrary_Driver
在一些開(kāi)源項(xiàng)目上,可能并沒(méi)有使用cmake來(lái)進(jìn)行搭建,而hpm_sdk基于cmake構(gòu)建,所以在移植的過(guò)程中,建議使用cmake框架加入開(kāi)源項(xiàng)目。本文以對(duì)接wiznet的ioLibrary_Driver作為例子供開(kāi)發(fā)者相關(guān)參考。
里面包含了w5xxx的驅(qū)動(dòng)程序以及應(yīng)用程序協(xié)議,使用該庫(kù)基本可以很快能對(duì)接好相應(yīng)的功能實(shí)現(xiàn)。
需要關(guān)心的是Ethernet文件夾,里面包含了如W5500,W5300,W5200,W5100,W5100S的讀寫(xiě)相關(guān)中間層,還提供了socket應(yīng)用層操作接口。
1、芯片讀寫(xiě)操作層加入
在此庫(kù)中,僅支持一款w5xxx,所以添加到工程,也只能是一個(gè)芯片讀寫(xiě)操作的文件夾。在每個(gè)芯片上加入cmakelists文件,把對(duì)應(yīng)的頭文件包含以及添加對(duì)應(yīng)的C文件。
如以下:比如W5100文件夾,使用sdk_inc和sdk_src命令,把該文件下的所需的文件進(jìn)行添加以及包含該文件夾的頭文件。
2、Ethernet文件加入
外層想使用文件夾的時(shí)候,可以通過(guò)set一個(gè)參數(shù)來(lái)判斷對(duì)應(yīng)的芯片操作選擇,然后再添加ethernet內(nèi)部的socket.c和config.c文件。
通過(guò)CONFIG_WIZNET參數(shù)來(lái)進(jìn)行對(duì)不同芯片加入篩選,以及加入兩個(gè)宏定義,一個(gè)是給config表示目前使用的是哪個(gè)芯片,一個(gè)是讓app知道引用的是哪個(gè)頭文件。
3、APP加入ioLibrary_Driver相關(guān)文件。
在本文中,使用的芯片是W5500,需要用到DHCP和ioLibrary_Driver里面application的loopback的tcp client接口,那么在app的camkelist可以做以下操作:
(1)set(CONFIG_WIZNET "w5500") 設(shè)置CONFIG_WIZNET為w5500,這樣cmake到ioLibrary_Driver索引時(shí)候只添加w5500這個(gè)文件夾。
(2)add_subdirectory(ioLibrary_Driver) 加入ioLibrary_Driver文件目錄
(3)sdk_app_src sdk_inc 加入ioLibrary_Driver需要的相關(guān)文件和頭文件
4、使用sdk_env的start_gui生成工程或者使用命令行生成都可以。這里使用start_gui
可以看到ioLibrary_Drivers對(duì)應(yīng)的目錄和文件都已經(jīng)添加到SES。
如此編譯也Ok
(二)ioLibrary_Driver的底層讀寫(xiě)相關(guān)操作接口注冊(cè)對(duì)接
在ioLibrary_Drivers的config上,需要接口注冊(cè)的主要是臨界區(qū)、CS片選操作、單字節(jié)收發(fā)、塊收發(fā)傳輸接口。在該庫(kù)中也有對(duì)應(yīng)的注冊(cè)接口wizchip_conf.h中。
1、臨界區(qū)注冊(cè)
這里臨界主要做全局中斷的使能和禁止,可根據(jù)自身應(yīng)用添加
2、CS片選信號(hào)操作注冊(cè)
在這里為了避免CS拉低后存在較高的間隔,實(shí)際的拉低在actual_cs_sel API操作,就是在開(kāi)啟SPI傳輸?shù)臅r(shí)候調(diào)用,具體請(qǐng)?jiān)斠?jiàn) 玩轉(zhuǎn)先楫SPI外設(shè)系列 文章,這里不做闡述說(shuō)明。
cs操作接口使用sdk對(duì)應(yīng)的board的cs操作API,可自行根據(jù)應(yīng)用更改。
3、讀寫(xiě)單字節(jié)操作注冊(cè)
需要注意的是,這里為了方便快速操作,比如在讀接口SPI設(shè)置為只讀,然后設(shè)置傳輸長(zhǎng)度,復(fù)位FIFO,開(kāi)啟傳輸,等待數(shù)據(jù)接收完成后讀取數(shù)據(jù)。寫(xiě)接口也是如此。具體請(qǐng)?jiān)斠?jiàn) 玩轉(zhuǎn)先楫SPI外設(shè)系列 文章,這里同樣不做闡述說(shuō)明。
4、塊讀寫(xiě)傳輸操作注冊(cè)
DMA相關(guān)的操作請(qǐng)?jiān)斠?jiàn) 玩轉(zhuǎn)先楫SPI外設(shè)系列 文章,這里同樣不做闡述說(shuō)明。
5、注冊(cè)相關(guān)操作接口
(三)以ioLibrary_Driver庫(kù)測(cè)試wiznet的速率性能。
W5500官方手冊(cè)中,雖然可以支持到80M的SPI SCLK,但官方的建議是33.3M推薦頻率,再高的頻率會(huì)出現(xiàn)些許采樣問(wèn)題,在實(shí)際測(cè)試的過(guò)程中也是如此,hpm_sdk的Board.h默認(rèn)為20M,本文SLCK的頻率調(diào)整為30M左右測(cè)試。
在性能上,wiznet官方也出了W5500對(duì)應(yīng)的MAX速率為15Mbps。如果需要更高的可以選擇W5100/s
在本文所實(shí)現(xiàn)的例子實(shí)現(xiàn)中,可通過(guò)cmakelists開(kāi)啟或者關(guān)閉DHCP,或者開(kāi)啟和關(guān)閉tcp iperf測(cè)試。默認(rèn)都是開(kāi)啟。
如果想靜態(tài)IP分配,那么直接在main.c中更改load_net_parameters API里面的ip值即可。
iperf測(cè)試軟件鏈接:
https://cloud.firebbs.cn/forum/201903/14/141408i20v8ny2i8tckkzy.zip?OSSAccessKeyId=LTAI4GJiLU8j9rPvpTDpqQKC&Expires=1698567700&Signature=JPFda8WE9%2BSZpIcf8JY8xOHd4xo%3D
這里iperf測(cè)試主要測(cè)試W5500作為Tcp client的發(fā)送性能。在SPI SCLK 30M下,可以達(dá)到17Mbps速度性能,與wiznet官方提供的15Mbsps速率相當(dāng),滿足性能需求。
目前ioLibrary_Driver庫(kù)性能還能繼續(xù)提升,比如修改socket的send和recv實(shí)現(xiàn)邏輯,減少查詢和等待;中間層少數(shù)據(jù)收發(fā)再次封裝等等。
在邏輯分析儀下,socket的發(fā)送接口send,在實(shí)際發(fā)送前,會(huì)查詢以及等待相關(guān)網(wǎng)絡(luò)狀態(tài)寄存器,占用了不少時(shí)間。wiznet提供的15mbps只有理論的一半性能也是這個(gè)時(shí)間所消耗引起。
三、總結(jié)
在ioLibrary_Driver庫(kù)下,hpm的SPI驅(qū)動(dòng)W5500的網(wǎng)絡(luò)性能可以達(dá)到17Mbps,與wiznet官方的15Mbps保持一致。
如果需要提高性能,可以選擇wetne其他芯片。或者自身優(yōu)化wiznet的ioLibrary_Driver庫(kù)。比如socket的發(fā)送send邏輯。
對(duì)于HPM6200,HPM5300等先楫通用MCU沒(méi)有以太網(wǎng)接口,但是有實(shí)際以太網(wǎng)需求或者方案平替,可以選擇SPI驅(qū)動(dòng)相關(guān)的芯片網(wǎng)絡(luò)接口。
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6060文章
44835瀏覽量
645218 -
寄存器
+關(guān)注
關(guān)注
31文章
5403瀏覽量
122936 -
SPI
+關(guān)注
關(guān)注
17文章
1756瀏覽量
94308 -
接口芯片
+關(guān)注
關(guān)注
0文章
95瀏覽量
17070
原文標(biāo)題:開(kāi)發(fā)者分享|[hpm_application]先楫單片機(jī)使用SPI驅(qū)動(dòng)網(wǎng)絡(luò)接口芯片W5xxx(wiznet)
文章出處:【微信號(hào):HPMicro,微信公眾號(hào):先楫半導(dǎo)體HPMicro】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
2014 深圳Maker Faire — WIZnet展出預(yù)告
第一輪 WIZnet - W5500EVB/模塊免費(fèi)試用測(cè)評(píng)活動(dòng)
WIZnet的網(wǎng)絡(luò)產(chǎn)品如何選型
新華龍電子推出最新網(wǎng)絡(luò)開(kāi)發(fā)板(W5100&W5500方案)
轉(zhuǎn)帖:ArduinoCN-WIZnet網(wǎng)絡(luò)專區(qū)開(kāi)版有獎(jiǎng)?wù)鞲寤顒?dòng)
wiznet芯片客戶常見(jiàn)問(wèn)題的技術(shù)問(wèn)題
WIZnet相關(guān)產(chǎn)品介紹
在RT -Thread下怎樣去驅(qū)動(dòng)W5500網(wǎng)絡(luò)芯片呢
添加w5500找不到Wiznet chip是什么原因呢?
基于SPI總線的醫(yī)療儀器網(wǎng)絡(luò)接口設(shè)計(jì)
WIZnet發(fā)布最新單片式以太網(wǎng)控制芯片W7100
Wiznet W5300 應(yīng)用的FPGA硬件原理圖
SPI子系統(tǒng):SPI設(shè)備驅(qū)動(dòng)

先楫單片機(jī)使用SPI驅(qū)動(dòng)網(wǎng)絡(luò)接口芯片W5xxx(wiznet)

評(píng)論