溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試的示例分析

發(fā)布時(shí)間:2021-11-20 10:27:52 來源:億速云 閱讀:510 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹了樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

 

樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試筆記

1.概述

從樹莓派底層玩家的角度上來看,樹莓派4算的上一款比較好的開發(fā)板。在樹莓派4之前,有線網(wǎng)卡的驅(qū)動(dòng)都是接在USB設(shè)備上,也就是說之前的樹莓派都是必須啟用了USB協(xié)議,然后再開啟網(wǎng)卡,這樣網(wǎng)速的差別以及網(wǎng)絡(luò)處理效率上的差別也就不敢恭維了。博通bcm的網(wǎng)卡芯片還是不錯(cuò)的,這次為樹莓派4適配和千兆以太網(wǎng)口,配上樹莓派4的a72的4核的芯片,真的算是非常的良心的開發(fā)板了。學(xué)習(xí)網(wǎng)絡(luò)編程,除了熟悉各種TCP,UDP的協(xié)議之外,如果能夠了解底層驅(qū)動(dòng)的工作原理,那也算是錦上添花的事情。本文主要針對(duì)樹莓派4有線網(wǎng)卡的驅(qū)動(dòng)模型,以及數(shù)據(jù)收發(fā)的方式,進(jìn)行梳理總結(jié),同時(shí)學(xué)習(xí)一些比較好的網(wǎng)卡設(shè)計(jì)模式。

 

2.樹莓派4的有線網(wǎng)卡簡介

對(duì)于樹莓派4的有線網(wǎng)卡來說,網(wǎng)上的資料相當(dāng)?shù)膮T乏,我只能通過零星的碎片化的資料去推測(cè)樹莓派網(wǎng)卡的行為,結(jié)合uboot與Linux的代碼,將其適配到rt-thread的lwip協(xié)議棧上,完成樹莓派的聯(lián)網(wǎng)功能。相關(guān)的代碼可以參考

https://github.com/RT-Thread/rt-thread/blob/master/bsp/raspberry-pi/raspi4-32/driver/drv_eth.c
 

樹莓派4搭載的是Broadcom GENETv5也就是博通第五代的genet,具體來說適配的是Broadcom? BCM54213PE單端口GRMII千兆以太網(wǎng)收發(fā)器,具體的芯片手冊(cè)可以通過下面的地址進(jìn)行下載

https://gitee.com/bigmagic/raspi_sd_fw/blob/master/doc/raspi4/BCM54213PE_datasheet.PDF
 

這是一款三速1000BASE-T / 100BASE-TX / 10BASE-T千兆以太網(wǎng)(GbE)收發(fā)器,集成在單個(gè)CMOS芯片中。BCM54213PE是一款高度集成的解決方案,集成了數(shù)字自適應(yīng)均衡器,ADC,鎖相環(huán),線路驅(qū)動(dòng)器,編碼器,解碼器,回聲消除器,串?dāng)_消除器以及所有必需的支持電路。BCM54213PE基于Broadcom公認(rèn)的數(shù)字信號(hào)處理器技術(shù),完全符合RGMII標(biāo)準(zhǔn),可與行業(yè)標(biāo)準(zhǔn)的以太網(wǎng)MAC和交換機(jī)控制器兼容。

 

3.設(shè)計(jì)思路

在寫任何代碼實(shí)現(xiàn)的時(shí)候都應(yīng)該有設(shè)計(jì),設(shè)計(jì)的好壞直接決定最后成型的效果。而調(diào)試驅(qū)動(dòng)也不要走一步看一步,應(yīng)該用高屋建瓴的思維去看待問題的解決辦法,先做什么,后做什么,兩者之間的關(guān)聯(lián)是什么,復(fù)雜模塊的調(diào)試往往涉及到幾個(gè)器件的耦合,而這些耦合的特性往往就是驅(qū)動(dòng)調(diào)試的線索。和玩游戲一樣,順著一個(gè)一個(gè)的線索,終將解決驅(qū)動(dòng)的通路。

而調(diào)試網(wǎng)卡驅(qū)動(dòng)的時(shí)候,也必須注意兩個(gè)東西一個(gè)是串行管理數(shù)據(jù)總線接口(MDIO),另外就是芯片與網(wǎng)卡的控制器寄存器。

MDIO接口是兩根數(shù)據(jù)線,MDC和MDIO,通過這兩根線,微控制器可以訪問物理層芯片中介紹的寄存器組,這些寄存器組則決定了物理層的連接的相關(guān)信息,比如查詢到的網(wǎng)口的速率,網(wǎng)口的狀態(tài)等等。

第二個(gè)就是和芯片直接相關(guān)的數(shù)據(jù)處理寄存器,例如DMA控制,中斷控制等等。

要想調(diào)通網(wǎng)卡數(shù)據(jù),上面兩點(diǎn)都是需要理解和掌握的。

 

4.調(diào)試樹莓派4有線網(wǎng)卡的歷程

在調(diào)試過程中,我發(fā)現(xiàn)網(wǎng)絡(luò)網(wǎng)口是由路由器網(wǎng)絡(luò)網(wǎng)口速度匹配的,所以需要由MDIO進(jìn)行通信,查詢網(wǎng)卡芯片的狀態(tài),從而判斷當(dāng)前連接的路由器是千兆網(wǎng)卡還是百兆網(wǎng)卡。如果不進(jìn)行判斷,那如果速率不匹配是無法進(jìn)行上層數(shù)據(jù)通信的。

另外就是上電之后,有線以太網(wǎng)數(shù)據(jù)收發(fā)器內(nèi)部是有收發(fā)計(jì)數(shù)的,而這個(gè)計(jì)數(shù)z值會(huì)與我后面的DMA鏈表直接關(guān)聯(lián),所以每次初始化之后,都需要清除計(jì)數(shù),這個(gè)需要一點(diǎn)時(shí)間,需要延時(shí)一下,最好做個(gè)判斷,直到清空為止。

上面是兩個(gè)關(guān)鍵的細(xì)節(jié),其他的流程倒也沒什么特別需要注意的。接著就需要理解DMA數(shù)據(jù)鏈表的結(jié)構(gòu)了。

在樹莓派4上,管理網(wǎng)絡(luò)數(shù)據(jù)收發(fā)是由DMA鏈表組成的結(jié)構(gòu)體。每個(gè)收發(fā)鏈表共有256個(gè)DMA描述符,每個(gè)描述符分別記錄著

1.高位地址(64位地址的高32位)

2.低位地址(64位地址的低32位)

3.接收的最大長度信息

關(guān)于接收的順序,如果之前沒有接受到任何數(shù)據(jù),當(dāng)一幀網(wǎng)絡(luò)數(shù)據(jù)包到來時(shí),DMA鏈表會(huì)從0偏移處的DMA鏈表開始取數(shù)據(jù),然后將接收到的數(shù)據(jù)放到DMA描述符申明的地址處。

樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試的示例分析

需要注意的是,對(duì)于接收的DMA描述符,每個(gè)描述符指向的應(yīng)該都是一段非cache區(qū)的地址,因?yàn)橥鵦ache的使用會(huì)引起內(nèi)存一致性的問題,而通過cache數(shù)據(jù)的寫回也可以解決這個(gè)問題。我們?cè)诜峙鋬?nèi)存的時(shí)候,可以分配一整段的空間,比如由256個(gè)描述符,假設(shè)每個(gè)接收包的最大長度為2K,則需要分配512K的連續(xù)的內(nèi)存空間來進(jìn)行數(shù)據(jù)的接收,每當(dāng)一個(gè)包過來后,指針會(huì)自動(dòng)指向下個(gè)dma描述符,這個(gè)是由硬件完成,與軟件無關(guān)。另外一個(gè)指針則是判斷當(dāng)前讀到了哪個(gè)dma描述符,隨著數(shù)據(jù)量的不斷累積,數(shù)據(jù)會(huì)一直存在下個(gè)描述符中,并不會(huì)由于處理速度跟不上而導(dǎo)致丟包情況的發(fā)生。

這種設(shè)計(jì)是很好的,避免了網(wǎng)絡(luò)數(shù)據(jù)多而快導(dǎo)致的丟包問題的產(chǎn)生,同時(shí)通過指針的偏移又大大簡化數(shù)據(jù)讀出的模型。

而數(shù)據(jù)的發(fā)送則不用設(shè)計(jì)的如此復(fù)雜,當(dāng)然硬件上也是有著這個(gè)描述符的,對(duì)于簡單的應(yīng)用,直接用一個(gè)描述符去填充需要發(fā)送的數(shù)據(jù)即可,交給DMA,然后等待發(fā)送中斷的到來。

 

5.樹莓派4的有線網(wǎng)卡中斷通知

樹莓派4上有著標(biāo)準(zhǔn)的GIC,對(duì)于中斷的處理更加的通用化。

樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試的示例分析

查詢其數(shù)據(jù)手冊(cè),可以看到中斷號(hào)為29,這里只是一個(gè)外設(shè)中斷號(hào)而已,還要經(jīng)過GIC的分發(fā),所以按照GIC的路由規(guī)則

樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試的示例分析

最后可以算出其中斷號(hào)為160+29,有了這個(gè)中斷號(hào),然后配置bcm2711的有線以太網(wǎng)中斷控制器,打開DMA接收完成和發(fā)送完成中斷就可以產(chǎn)生相關(guān)的中斷了。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“樹莓派4有線網(wǎng)卡驅(qū)動(dòng)調(diào)試的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI