色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

聊一聊以太網發送描述符

路科驗證 ? 來源:開心果 Need Car ? 2024-10-22 15:09 ? 次閱讀

以下文章來源于開心果 Need Car ,作者開心果 Need Car

相對于其他總線,以太網的知識龐雜,當然,可獲取的資料也豐富。以太網的知識從驅動層到上層協議棧,很難一下消化,所以,不妨從點開始,不斷地拓展和鏈接,從而形成完整地以太網知識框架,進而更好地解決工程問題。

本文,從通信出發,聊一聊以太網發送描述符(Transmit Descriptor)。

提示:基于TC4xx討論。

1、Transmit Descriptor

我們知道:相比與CAN、Lin等總線,以太網的數據吞吐量比較大,eg:1500bytes。如果讓CPU干數據搬運工作,尤其大量數據搬運工作,這有點"屈才"。所以,系統設計中,為了最大程度的釋放CPU,在以太網的數據搬運中,會使用專門的DMA(Direct Memory Access)搬運。如果想讓DMA知道如何搬運數據,就需要提前告知其搬運規則,因此,描述符(Descriptor)應用而生。對于以太網數據發送,則使用Transmit Descriptor描述以太網數據的發送規則。

Transmit Descriptor有兩種格式:Read格式和Write-Back格式。Transmit Descriptor Read Format如下所示:

wKgaoWcXT9CAB5n2AAEoCfUAxoQ615.jpg

如上圖,在進行數據發送時,需要注意字節序(單片機一般是小端模式),而如上的描述符可能需要大端處理。

Transmit Normal Descriptor (Write-Back Format),示意如下:

wKgaoWcXT9CAaQ0vAAE0OwXdKFc336.jpg

當DMA完成數據搬運以后,會對描述符進行寫回操作,主要操作TDES3的OWN和DESC STATUS位域,將發送狀態反饋給Application。

(一)Application與DMA的"握手"

描述符是Application與DMA之間的紐帶,Application通過描述符將待發送的信息填充到Transmit Descriptor中,DMA通過判斷DES3.OWN獲取發送請求。即:Application需要發送數據時,將數據地址放入Buffer1(對應DES0),同時,將一些控制信息寫入可用的Transmit Descriptor中,最后,設置DES3.OWN = 1,請求DMA發送數據,這一步可以看作:Application將操作后的發送描述符控制權交給DMA;當DMA發送完數據以后,將對應發送描述符的DES3.OWN復位(=0),這一步可以看作:DMA將目標描述符的控制權返還給Application。通過DES3.OWN,Application與DMA進行交流,也就是"握手"動作,進而保證數據有序交互,示意如下:

wKgaoWcXT9CANVLXAAFnY_O-7Wg298.jpg

DMA發送完成或者接收完成,一般會有中斷觸發,如果有特殊操作,也可以在中斷回調函數中處理。

2、描述符鏈表

實際使用中,常常使用環形DMA描述符結構(DMA Descriptor Ring),示意如下:

wKgZoWcXT9CAC4eRAAEGAND0FV4093.jpg

如上結構,大家并不陌生。這里,我們需要注意一些細節。

(一)描述符間隔

當使用多個描述符時,描述符之間可以設置間隔(eg:DMA_Ch(#i)_Control寄存器的DSL位域,Descriptor Skip Length)。間隔設置多少需要根據手冊要求,本文可以設置的數據間隔:DWord(8 byte)的整數倍,如果DSL = 0,則意味著描述符間沒有間隔。

(二)發送描述符操作的寄存器

理解以太網發送,還需要理解與描述符操作相關的寄存器。本文聚焦發送相關的幾個DMA寄存器:

DMA_CHi_TXDESC_LIST_ADDRESS:發送描述符的基地址,指向發送描述符鏈表的第一個描述符,初始化時賦值;

DMA_CHi_CURRENT_APP_TXDESC:當前發送描述符,指向DMA當前可用的描述符;

DMA_CHi_TXDESC_RING_LENGTH:存放發送描述符長度,可使用長度 = n + 1(n是寄存器中存儲的實際值);

DMA_CHi_TXDESC_TAIL_POINTER:發送描述符尾指針,每次請求發送以太網Frame后,需要Application更新Transmit Descriptor地址,即:指向下一個可用的空閑描述符地址。

如果Current Descriptor Pointer == Descriptor Tail Pointer,則DMA會自動掛起(Suspend),停止數據搬運。當Application再次請求數據發送時,需要向Descriptor Tail Pointer中寫入發送信息,偏移Descriptor Tail Pointer,使其滿足:Current Descriptor Pointer < Descriptor Tail Pointer。如果Descriptor Tail Pointer偏移到尾部,則重新回到Descriptor Base Address。

3、以太網幀發送流程

以太網Frame的發送流程,示意如下:

wKgaoWcXT9CAbkJuAAEGpYWHq2M236.jpg

具體發送流程解讀:

1、Application通過DMA_CHi_CURRENT_APP_TXDESC寄存器獲取當前可用的發送描述符地址,將發送信息填充到可用的發送描述符中,即:告知DMA搬運規則。之后,Application將TDES3.OWN置位(=1),請求發送數據;

2、DMA能否搬運數據,需要判斷DMA的工作模式,如果DMA處于Stop模式,需要重新啟動DMA。通過判斷DMA_CHj_Status (j=0-7)的TPS(Transmit Process Stopped)位域確認其是否處于Stop模式。具體描述:如果TPS == 1,表示DMA處于Stop模式,需要向TPS位域寫1清除,同時,進行DMA使能操作。當然,還可以進一步的檢查其他信息,eg:TBU(Transmit Buffer Unavailable);

3、當Application將描述符的控制權交給DMA以后,還需要Transmit Poll Demand,即:向DMA_CHi_TXDESC_TAIL_POINTER寄存器寫入信息,一般寫入下一個可用發送描述符地址,讓DMA脫離掛起狀態,去查詢待處理的發送描述符信息;

4、當DMA發送完數據以后,DMA_CHi_CURRENT_APP_TXDESC寄存器的發送描述符地址自動偏移一個,如果Current Descriptor Pointer < Descriptor Tail Pointer,DMA繼續發送數據;如果Current Descriptor Pointer == Descriptor Tail Pointer,DMA隨即掛起(Suspend),停止數據搬運,同時,數據的發送狀態回寫(write-back)到TDES3中。

數據的發送流程關鍵步驟如上,理解了數據發送,也就不難理解數據的接收過程。

(一)DMA狀態變化流程

1、以太網專用DMA初始化以后,如果沒有數據發送,進入Suspend狀態。此時,DMA_CHi_TXDESC_TAIL_POINTER指向空,示意如下:

wKgZoWcXT9CAdrdAAADE9PyMb58896.jpg

2、Application請求發送數據時,從DMA_CHi_CURRENT_APP_TXDESC寄存器獲取可用的發送描述符地址,填充發送規則。向DMA_CHi_TXDESC_TAIL_POINTER寄存器寫入下一個可用描述符地址,使其滿足Current Descriptor Pointer < Descriptor Tail Pointer,即:觸發DMA發送,示意如下:

wKgZoWcXT9CAXFylAADP1trQ5OQ824.jpg

3、Frame發送完成以后,DMA_CHi_CURRENT_APP_TXDESC寄存器中的可用描述符地址,自動向后偏移一個,使得Current Descriptor Pointer == Descriptor Tail Pointer,DMA隨即掛起(Suspend),示意如下:

wKgZoWcXT9CAXVq6AADXa2h2AbE498.jpg

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    40

    文章

    5419

    瀏覽量

    171598
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10854

    瀏覽量

    211576
  • 通信
    +關注

    關注

    18

    文章

    6024

    瀏覽量

    135950
  • 總線
    +關注

    關注

    10

    文章

    2878

    瀏覽量

    88051

原文標題:深刻理解以太網發送,必經DMA Transmit Descriptor

文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    簡談基于FPGA的千兆以太網

    大家好,又到了學習時間了,學習使人快樂。今天我們來簡單的聊以太網以太網在FPGA學習中屬于比較高級的內容了,有些同學肯定會感覺以太網
    的頭像 發表于 08-05 10:28 ?1.3w次閱讀
    簡談基于FPGA的千兆<b class='flag-5'>以太網</b>

    基于DWC_ether_qos的以太網驅動開發-描述符鏈表介紹

    本文轉自公眾號歡迎關注 .描述符概述 1.0 前言 對于DWC Ethernet QoS驅動的編寫來說,初始化完成之后,核心操作就是DMA的描述符鏈表配置(linked list
    的頭像 發表于 08-30 09:39 ?4499次閱讀
    基于DWC_ether_qos的<b class='flag-5'>以太網</b>驅動開發-<b class='flag-5'>描述符</b>鏈表介紹

    107以太網DMA發送描述符不成功是怎么回事?

    int DES3;}ETH_DMA_Desc;__align(4) ETH_DMA_Desc TxDes[2];單個描述符發送正常,代碼:void ETH_Tx_Des_Init(void){ int i; TxDes[0].DES0 = (0
    發表于 10-08 06:57

    以太網數據幀的發送描述符隊列是什么意思?

    這個描述符是什么呀,類似linux系統的文件描述符
    發表于 05-26 06:15

    以太網描述符ETH_DMATxDesc_OWN異常

    stm32 以太網發送段時間后發送描述符狀態直為DMA擁有,造成
    發表于 07-07 14:08

    NUC980的口的發送描述符的緩沖區地址要求4字節對齊的問題求解

    NUC980的口的發送描述符的緩沖區地址要求 4字節對齊的問題,因為我用的協議棧里面要求IP數據段4字節對齊,加上以太網14字節,如果發送
    發表于 06-13 07:01

    NUC980的口的發送描述符的緩沖區地址要求4字節對齊的問題求解

    NUC980的口的發送描述符的緩沖區地址要求 4字節對齊的問題,因為我用的協議棧里面要求IP數據段4字節對齊,加上以太網14字節,如果發送
    發表于 06-27 07:34

    關于NUC980的口的發送描述符的緩沖區地址要求4字節對齊的問題

    NUC980的口的發送描述符的緩沖區地址要求 4字節對齊的問題,因為我用的協議棧里面要求IP數據段4字節對齊,加上以太網14字節,如果發送
    發表于 09-04 06:44

    USB HID報告及報告描述符簡介

    在USB中,USB HOST是通過各種描述符來識別設備的,有設備描述符,配置描述符,接口描述符,端點描述符,字符串
    發表于 04-12 11:13 ?4031次閱讀

    Descriptor描述符解釋

    Descriptor即描述符,是個完整的數據結構,可以通過C語言等編程實現,并存儲在USB設備中,用于描述個USB設備的所有屬性,USB主機是通過
    發表于 07-16 09:39 ?2643次閱讀

    USB設備鍵值表描述符說明資料免費下載

    本文檔的主要內容詳細介紹的是USB設備鍵值表描述符說明資料免費下載包括了:1.設備描述符的結構,2. 配置描述符的結構,3. 接口描述符的結構,4. HID
    發表于 07-16 16:56 ?35次下載
    USB設備鍵值表<b class='flag-5'>描述符</b>說明資料免費下載

    USB各描述符之間的依賴是怎么樣的

    USB 是個通用的總線,端口都是統的。但是USB 設備卻各種各樣,例如USB 鼠標, USB鍵盤, U盤等等,那么USB 主機是如何識別出不同的設備的呢?這就要依賴于描述符了。USB 的描述符主要有設備
    發表于 07-23 16:53 ?8次下載
    USB各<b class='flag-5'>描述符</b>之間的依賴是怎么樣的

    Linux系統編程中的文件描述符調用

    文件描述符 進程每打開個文件的時候,會獲得該文件的文件描述符,而后續的讀寫操作都把文件描述符作為參數。在用戶空間或者內核空間,都是通過文件描述符
    的頭像 發表于 09-02 09:50 ?1675次閱讀
    Linux系統編程中的文件<b class='flag-5'>描述符</b>調用

    基于DWC_ether_qos的以太網驅動開發-描述符格式介紹

    前面我們介紹了描述符鏈表的工作模式,重點是了解環形鏈表是如何環形的,以及相關的寄存器。驅動編寫就需要更進步,了解描述符的具體內容,即4個描述符的每個字段的含義。
    的頭像 發表于 09-04 14:14 ?2622次閱讀
    基于DWC_ether_qos的<b class='flag-5'>以太網</b>驅動開發-<b class='flag-5'>描述符</b>格式介紹

    Python的優雅之處:Descriptor(描述符

    語法糖的實現上也有使用到(在下面的文章會一一介紹)。 當你點進這篇文章時 你也許沒學過描述符,甚至沒聽過描述符。 或者你對描述符只是知半解 無論你是哪種,本篇都將帶你全面的學習
    的頭像 發表于 11-02 10:52 ?997次閱讀
    Python的優雅之處:Descriptor(<b class='flag-5'>描述符</b>)
    主站蜘蛛池模板: 农民下乡在线观看3| 久久九九有精品国产23百花影院| 国产伦精品一区二区三区免费观看 | black大战chinese周晓琳| 久久精品AV无码亚洲色欲| 小黄文污到你湿| 国产亚洲精品AV片在线观看播放 | 欧美日韩亚洲第一区在线| 99re久久热在线视频| 免费女性裸身照无遮挡网站| 2012中文字幕手机在线 | 久久精品久久久久| 又爽又黄又粗又大免费视频| 久久精品视频3| 折磨比基尼美女挠肚子| 久久久久亚洲| 97草碰在线视频免费| 欧美成人3d动漫专区| 草莓视频在线免费观看| 日韩毛片在线视频| 国产精品无码亚洲网| 亚洲精品卡2卡3卡4卡5卡区| 精品日韩视频| 97成人在线| 日本理伦片午夜理伦片| 国产精品久久久久久久久久久 | 九九久久国产精品免费热6| 在线观看成年人免费视频| 麻豆一区二区三区蜜桃免费| oldgrand欧洲老妇人| 色狗av影院| 国产香蕉九九久久精品免费| 亚洲午夜久久久无码精品网红A片| 久久久久久久久女黄9999| 99久久精品免费看国产一区二区三区 | 午夜在线观看免费完整直播网页| 国产中文字幕乱码一区| 在线日韩欧美一区二区三区| 欧美深夜0000XXXX疯狂| 国产人妻麻豆蜜桃色69| 中文文字幕文字幕亚洲色|