亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

樹莓派4有線網卡驅動調試的示例分析

發布時間:2021-11-20 10:27:52 來源:億速云 閱讀:514 作者:小新 欄目:互聯網科技

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

 

樹莓派4有線網卡驅動調試筆記

1.概述

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

 

2.樹莓派4的有線網卡簡介

對于樹莓派4的有線網卡來說,網上的資料相當的匱乏,我只能通過零星的碎片化的資料去推測樹莓派網卡的行為,結合uboot與Linux的代碼,將其適配到rt-thread的lwip協議棧上,完成樹莓派的聯網功能。相關的代碼可以參考

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千兆以太網收發器,具體的芯片手冊可以通過下面的地址進行下載

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

這是一款三速1000BASE-T / 100BASE-TX / 10BASE-T千兆以太網(GbE)收發器,集成在單個CMOS芯片中。BCM54213PE是一款高度集成的解決方案,集成了數字自適應均衡器,ADC,鎖相環,線路驅動器,編碼器,解碼器,回聲消除器,串擾消除器以及所有必需的支持電路。BCM54213PE基于Broadcom公認的數字信號處理器技術,完全符合RGMII標準,可與行業標準的以太網MAC和交換機控制器兼容。

 

3.設計思路

在寫任何代碼實現的時候都應該有設計,設計的好壞直接決定最后成型的效果。而調試驅動也不要走一步看一步,應該用高屋建瓴的思維去看待問題的解決辦法,先做什么,后做什么,兩者之間的關聯是什么,復雜模塊的調試往往涉及到幾個器件的耦合,而這些耦合的特性往往就是驅動調試的線索。和玩游戲一樣,順著一個一個的線索,終將解決驅動的通路。

而調試網卡驅動的時候,也必須注意兩個東西一個是串行管理數據總線接口(MDIO),另外就是芯片與網卡的控制器寄存器。

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

第二個就是和芯片直接相關的數據處理寄存器,例如DMA控制,中斷控制等等。

要想調通網卡數據,上面兩點都是需要理解和掌握的。

 

4.調試樹莓派4有線網卡的歷程

在調試過程中,我發現網絡網口是由路由器網絡網口速度匹配的,所以需要由MDIO進行通信,查詢網卡芯片的狀態,從而判斷當前連接的路由器是千兆網卡還是百兆網卡。如果不進行判斷,那如果速率不匹配是無法進行上層數據通信的。

另外就是上電之后,有線以太網數據收發器內部是有收發計數的,而這個計數z值會與我后面的DMA鏈表直接關聯,所以每次初始化之后,都需要清除計數,這個需要一點時間,需要延時一下,最好做個判斷,直到清空為止。

上面是兩個關鍵的細節,其他的流程倒也沒什么特別需要注意的。接著就需要理解DMA數據鏈表的結構了。

在樹莓派4上,管理網絡數據收發是由DMA鏈表組成的結構體。每個收發鏈表共有256個DMA描述符,每個描述符分別記錄著

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

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

3.接收的最大長度信息

關于接收的順序,如果之前沒有接受到任何數據,當一幀網絡數據包到來時,DMA鏈表會從0偏移處的DMA鏈表開始取數據,然后將接收到的數據放到DMA描述符申明的地址處。

樹莓派4有線網卡驅動調試的示例分析

需要注意的是,對于接收的DMA描述符,每個描述符指向的應該都是一段非cache區的地址,因為往往cache的使用會引起內存一致性的問題,而通過cache數據的寫回也可以解決這個問題。我們在分配內存的時候,可以分配一整段的空間,比如由256個描述符,假設每個接收包的最大長度為2K,則需要分配512K的連續的內存空間來進行數據的接收,每當一個包過來后,指針會自動指向下個dma描述符,這個是由硬件完成,與軟件無關。另外一個指針則是判斷當前讀到了哪個dma描述符,隨著數據量的不斷累積,數據會一直存在下個描述符中,并不會由于處理速度跟不上而導致丟包情況的發生。

這種設計是很好的,避免了網絡數據多而快導致的丟包問題的產生,同時通過指針的偏移又大大簡化數據讀出的模型。

而數據的發送則不用設計的如此復雜,當然硬件上也是有著這個描述符的,對于簡單的應用,直接用一個描述符去填充需要發送的數據即可,交給DMA,然后等待發送中斷的到來。

 

5.樹莓派4的有線網卡中斷通知

樹莓派4上有著標準的GIC,對于中斷的處理更加的通用化。

樹莓派4有線網卡驅動調試的示例分析

查詢其數據手冊,可以看到中斷號為29,這里只是一個外設中斷號而已,還要經過GIC的分發,所以按照GIC的路由規則

樹莓派4有線網卡驅動調試的示例分析

最后可以算出其中斷號為160+29,有了這個中斷號,然后配置bcm2711的有線以太網中斷控制器,打開DMA接收完成和發送完成中斷就可以產生相關的中斷了。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“樹莓派4有線網卡驅動調試的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大渡口区| 团风县| 枣强县| 日土县| 夹江县| 永福县| 建德市| 桃园县| 临武县| 建平县| 兴宁市| 宜川县| 安义县| 汉寿县| 布尔津县| 东平县| 循化| 黄冈市| 象州县| 阿克苏市| 浦东新区| 海丰县| 柳江县| 华蓥市| 英吉沙县| 手游| 深水埗区| 龙泉市| 广灵县| 栾城县| 嘉峪关市| 建水县| 武陟县| 苍南县| 高清| 白水县| 饶河县| 桑日县| 翁牛特旗| 云阳县| 天峻县|