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

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

3天內不再提示

基于DWC_ether_qos的以太網驅動開發-收發驅動編寫與調試

嵌入式USB開發 ? 來源:嵌入式Lee ? 作者:嵌入式Lee ? 2023-09-05 08:47 ? 次閱讀

本文轉自公眾號,歡迎關注

基于DWC_ether_qos的以太網驅動開發-收發驅動編寫與調試 (qq.com)

https://mp.weixin.qq.com/s/NXKiBsNvhMG_bCruEeqmtg

一.前言

前面已經介紹了環形描述符的工作方式和描述符的具體格式。收發的驅動實際就是圍繞著準備描述符來進行的,這種機制使得驅動代碼的編寫比較簡單了,軟件通過描述符高速硬件DMA怎么做即可,剩下的就交給硬件DMA了,這樣效率非常高。

二.收發驅動

2.1發送

Current是硬件維護的指針,Current表示硬件當前操作的描述符,如果該描述符不是OWN BY DMA則停止。

Inx是軟件維護的指針,軟件寫完一個描述符Inx遞增,如果Inx追趕上了Current,即遇到了OWN BY DMA的描述符也停止。

開始時指針如下,Current,Inx都從Base開始,注意current需要啟動后才能讀到值,初始化后是0,所以這里編程需要注意

wKgaomT2hgmADaIUAABCBsgW8uA618.png

軟件準備n個描述待發送,黃色部分,并設置這些描述符OWN BY DMA,啟動DMA,硬件開始處理這些描述符

wKgZomT2hgqAStIRAABzDTuFg4c354.png

比如硬件處理完一個描述符后,繼續處理后面的

wKgZomT2hhCAIxtrAABkiGfpRw4398.png

硬件處理完,Current追上了Inx,停止DMA

wKgaomT2hhCAONSFAABjyn92SRQ449.png

當然Current在發送的時候,軟件又可以從Inx往后面準備描述符,相當于Inx是生產者,生產描述符,Current是消費者,消費描述符,這樣就可以不間斷的進行發送。

/**

2.2接收

接收和發送類似

初始化時先將所有描述符設置為接收狀態,且設置產生IOC中斷,并啟動DMA。

如下所示黃色描述符都是表示準備接收數據。

wKgZomT2hhCAGbRyAABOFD4-5Nk195.png

在收到一包數據后,產生中斷,如下描述符0即接收到數據的描述符,變為非OWN BY DMA,軟件查詢該描述符可以獲取到接收數據長度等信息,進行處理。

wKgaomT2hhGAVQJEAABNl1Rk9tU888.png

軟件處理完描述符0之后,又可以將其設置為接收狀態OWN BY DMA以便接收繼續接收。

wKgZomT2hhGARjRmAABOmAX8Se8143.png

以上是接收比軟件處理的慢,所以Current一直追不上Inx,如果接收比軟件處理的快,

則Current會追上Inx而停止。

比如如下

wKgaomT2hhGATASnAABGcS8SCyM522.png

int iot_eth_receive_handle(eth_ctrl_t *p_ctrl,eth_rcv_data_pf cb)

接收由于要處理包數據所以花費時間比較大,一般不在中斷中處理數據,也就是不在中斷中調用iot_eth_receive_handle,而是查詢方式調用iot_eth_receive_handle,或者接收IOC中斷時中斷中發送信號量或者設置標志,主線程主循環中接收信號量或標志才調用該函數進行接收處理。

三.接收調試

收發數據流參考https://mp.weixin.qq.com/s/klrHhaLMM_0W3FGVwHXFkA

的驗證過程嗎,按照MAC回環,PHY回環,和PC通訊的過程測試。

3.1檢查描述符相關

接收調試主要關注以下描述符相關寄存器

檢查RxDesc_List,RxDesc_Tail 是否設置正確,檢查RxDesc_Ring_Length描述符個數是否設置正確。檢查RxDesc和RxBuffer是否遞增變化。

(gdb) x /28xw 0x01161100

0x1161100: 0x00000000 0x00100001 0x00100be1 0x00000000

0x1161110: 0x00000000 0x0200c120 0x00000000 0x0200bd00

RxDesc_List

0x1161120: 0x0200c510 0x00000000 0x0200bd00 0x0000003f

RxDesc_Tail

0x1161130: 0x00000001 0x0000c8c3 0x00000000 0x00000000

RxDesc_Ring_Length

0x1161140: 0x00000000 0x0200c510 0x00000000 0x0200bd10

RxDesc

0x1161150: 0x00000000 0x0200bd20 0x00000000 0x0200b710

RxBuffer

0x1161160: 0x00000000 0x00000000 0x00000000 0x00000000

(gdb)

0x111C RxDesc_List

0x1128 RxDesc_Tail

0x1130 RxDesc_Ring_Length

0x114C RxDesc

0x115C RxBuffer

3.2 確認回寫狀態和緩存數據是否有

(gdb) p rx_desc

$5 = {{

des0 = 0x200b120,

des1 = 0x0,

des2 = 0x0,

des3 = 0xc1000000

}, {

des0 = 0x200b710,

des1 = 0x0,

des2 = 0x0,

des3 = 0xc1000000

}}

(gdb) p /x rx_buffer

$6 = {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0x0, 0x42, 0xaa, 0x55 , 0x15, 0x13, 0x86, 0x4a, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x0 , 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0x0, 0x42, 0xaa, 0x55, 0x15, 0x13, 0x86, 0x4a, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x50, 0x0, 0x0, 0x30, 0x0 }

(gdb)

3.3 確認接收狀態

如果以上描述符都正確但是還是沒有數據,確認接收是否正在工作

查看DMA_Debug_Status0寄存器

RPS0是3表示Running

(gdb) x /20xw 0x01161000

0x1161000: 0x00003000 0x00000001 0x00000000 0x00006300

DMA_Debug_Status0

0x1161010: 0x00000000 0x00000000 0x00000000 0x00000000

0x1161020: 0x00000000 0x00000000 0x00000000 0x00000000

0x1161030: 0x00000000 0x00000000 0x00000000 0x00000000

0x1161040: 0x00000000 0x00000000 0x00000000 0x00000000

(gdb)

wKgZomT2hhKAMeEbAAIR7Z72goU851.png

3.4 檢查過濾等其他設置

如果以上還未收到,檢查過兩次設置,最好設置為RA接收所有包,

確認DMA的SR是否使能等。

四.發送調試

和接收類似

4.1 檢查描述符

檢查如下寄存器設置,看TxDesc是否遞增

(gdb) x /28xw 0x01161100

0x1161100: 0x00000000 0x00100001 0x00100be1 0x00000000

0x1161110: 0x00000000 0x0200c1200x00000000 0x0200bd00

TxDesc_List

0x1161120: 0x0200c3d00x00000000 0x0200bd20 0x0000003f

TxDesc_Tail Ring_Length

0x1161130: 0x00000001 0x0000c8c3 0x00000000 0x00000000

0x1161140: 0x00000000 0x0200c3d00x00000000 0x0200bd10

TxDesc

0x1161150: 0x00000000 0x0200bd200x00000000 0x0200b710

TxBuffer

0x1161160: 0x00000000 0x00000000 0x00000000 0x00000000

(gdb)

4.2 確認回寫狀態

(gdb) p /x tx_desc

$2 = {{des0 = 0x200bdc0, des1 = 0x0, des2 = 0x8000002a, des3 = 0x30000000} }

(gdb)

4.3 確認發送狀態

如果以上描述符都正確但是還是沒有數據,確認接收是否正在工作

查看DMA_Debug_Status0寄存器

(gdb) x /20xw 0x01161000

0x1161000: 0x00002000 0x00000001 0x00000001 0x00006400

DMA_Debug_Status0

0x1161010: 0x00000000 0x00000000 0x00000000 0x00000000

0x1161020: 0x00000000 0x00000000 0x00000000 0x00000000

0x1161030: 0x00000000 0x00000000 0x00000000 0x00000000

0x1161040: 0x00000000 0x00000000 0x00000000 0x00000000

(gdb)

wKgZomT2hhKAMeEbAAIR7Z72goU851.png

4.4 檢查發送數據等

檢查發送數據是否又64字節以上,可以配置CPC自動添加CRC和填充。

確認DMA的ST使能了發送等。

五.總結

收發驅動實際就是對描述符的操作,需要了解描述符環形結構,軟件硬件分別是怎么實用描述符的。另外也需要了解相關寄存器,描述符格式等,了解如何去調試收發過程。

審核編輯 黃宇

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

    關注

    5006

    文章

    18440

    瀏覽量

    292141
  • 以太網
    +關注

    關注

    40

    文章

    5145

    瀏覽量

    167022
  • 調試
    +關注

    關注

    7

    文章

    529

    瀏覽量

    33660
  • 驅動開發
    +關注

    關注

    0

    文章

    129

    瀏覽量

    12021
收藏 人收藏

    評論

    相關推薦

    基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-MAC幀格式介紹 (qq.com) 一.前言 ? 在以太網
    的頭像 發表于 08-30 09:23 ?1416次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-MAC幀格式介紹

    基于DWC_ether_qos以太網驅動開發-MDIO驅動編寫與測試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-MDIO驅動編寫與測試
    的頭像 發表于 08-30 09:37 ?2667次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-MDIO<b class='flag-5'>驅動</b><b class='flag-5'>編寫</b>與測試

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

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

    基于DWC_ether_qos以太網驅動開發-數據流驗證過程

    轉自公眾號歡迎關注 https://mp.weixin.qq.com/s/klrHhaLMM_0W3FGVwHXFkA 基于DWC_ether_qos以太網驅動開發-數據流驗證過程
    的頭像 發表于 08-31 08:41 ?1313次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-數據流驗證過程

    基于DWC_ether_qos以太網驅動開發-無OS環境移植LWIP

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-無OS環境移植LWIP (qq.com) https://mp.weixin.qq.com
    的頭像 發表于 09-06 08:40 ?968次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-無OS環境移植LWIP

    基于DWC_ether_qos以太網驅動開發-LWIP的堆管理介紹

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP的堆管理介紹 (qq.com) https://mp.weixin.qq.com
    的頭像 發表于 09-08 08:40 ?828次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-LWIP的堆管理介紹

    基于DWC_ether_qos以太網驅動開發-RTOS環境移植LWIP與性能測試

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網驅動開發-RTOS環境移植LWIP與性能測試 (qq.com) https://mp.weixin.qq.com
    的頭像 發表于 09-11 11:20 ?1312次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-RTOS環境移植LWIP與性能測試

    基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發調試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網驅動開發-LWIP在PC上進行開發調試
    的頭像 發表于 09-11 08:40 ?1357次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-LWIP在PC上進行<b class='flag-5'>開發</b><b class='flag-5'>調試</b>

    基于DWC_ether_qos以太網驅動開發-LWIP的ICMP模塊介紹與PING收發

    本文轉自公眾號歡迎關注 https://mp.weixin.qq.com/s/6MTNop3zBKdQ-gabbWo63Q 一. 前言 ICMP即Internet Control Message Protocol因特網控制消息協議。 ICMP是網絡層協議,IP不可分割的一部分。 ICMP用于報告數據報處理中的錯誤,比如以下情況下時發送ICMP消息:當數據報無法到達其目的地時,當網關沒有轉發數據報的緩沖能力時,以及當網關可以指示主機在較短的路由上發送數據時。 互聯網協議的設計并不是絕對可靠的。ICMP這些控制消息的目的是提供有關通信環境中問題的反饋
    的頭像 發表于 09-18 17:51 ?1208次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-LWIP的ICMP模塊介紹與PING<b class='flag-5'>收發</b>測

    ECOS嵌入式系統的S3C2510以太網驅動程序設計

    本文介紹了實時性操作系統ECOS的一般以太網驅動程序的開發方法,并具體研究SAMSUNG公司的以ARM940T為內核的S3C2510嵌入式芯片的以太網口,提供一種針對此
    發表于 08-11 10:31 ?53次下載

    設計軟件核心以太網服務質量數據手冊免費下載

    本文描述Synopsys設計軟件核心以太網服務質量DWC以太網QoS核心5.10A。DWC以太網
    發表于 10-23 08:00 ?15次下載
    設計軟件核心<b class='flag-5'>以太網</b>服務質量數據手冊免費下載

    DesignWare核心以太網服務質量數據本

      本文檔介紹Synopsys DesignWare核心以太網服務質量(DWC_Ethernet_qos)核心,5.10a。DWC_Ethernet_qos實現了與MAC層相關的以太網
    發表于 03-31 15:11 ?3次下載

    基于DWC_ether_qos以太網驅動開發-包過濾

    以太網上數據非常多,如果所有數據都接收交給軟件去處理軟件負載會非常重,所以一般只需要接收發給自己的數據即可
    的頭像 發表于 09-02 09:19 ?1014次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-包過濾

    基于DWC_ether_qos以太網驅動開發-軟復位介紹與問題案例

    一般模塊都會有軟復位的功能,軟復位在驅動編寫中很重要。一般初始化時執行軟復位使得模塊進入確定的初始狀態以提高可靠性,異常時也可以重新初始化來恢復,所以軟復位在驅動中一般是必須要做的動作。
    的頭像 發表于 09-02 09:17 ?998次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-軟復位介紹與問題案例

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

    前面我們介紹了描述符鏈表的工作模式,重點是了解環形鏈表是如何環形的,以及相關的寄存器。驅動編寫就需要更進一步,了解描述符的具體內容,即4個描述符的每個字段的含義。
    的頭像 發表于 09-04 14:14 ?1213次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-描述符格式介紹
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>