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

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

3天內不再提示

基于DWC_ether_qos的以太網(wǎng)驅動開發(fā)-軟復位介紹與問題案例

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-09-02 09:17 ? 次閱讀

一.前言

一般模塊都會有軟復位的功能,軟復位在驅動編寫中很重要。一般初始化時執(zhí)行軟復位使得模塊進入確定的初始狀態(tài)以提高可靠性,異常時也可以重新初始化來恢復,所以軟復位在驅動中一般是必須要做的動作。對應復雜的IP其復位過程其實是很復雜的,有很多前提和依賴,對于驅動編寫來說也有一些需要注意的地方甚至是有一些坑,所以本篇單獨來講講DWC_ether_qos的軟復位。如果你有遇到DWC_ether_qos軟復位的問題,建議可以看看本文章,說不定就有你的問題的答案!

二.DWC_ether_qos的軟復位

軟復位的作用簡單的可以總結為復位控制邏輯(比如狀態(tài)機等),和相關的資源(比如寄存器值恢復到默認狀態(tài)等)。

DWC_ether_qos的軟復位參考手冊P1013,偏移0x1000的寄存器DMA_Mode寄存器的位0,SWR的解釋。

圖片

從以上描述可以看出其實信息量是很多的,換句話說需要注意的地方是很多的,以下做一個總結

1.觸發(fā)軟復位,MAC和DMA控制器會復位DMA,MTL,MAC這幾個子系統(tǒng)的內部邏輯和相關寄存器。

2.該位是自清零的,即軟件寫1觸發(fā)軟復位,硬件復位完成清零。

3.必須等到DWC_ether_qos所有的時鐘域都完成復位才會完成,才會清零該位。

4.該位為0之前,即為1時不能寫DWC_ether_qos的任何寄存器。

  1. 該位置位后,不能立馬去回讀該位,需要等待4個CSR周期后才能讀 ,因為狀態(tài)更新需要時間(具體的原因就涉及具體的總線協(xié)議了)。這里是驅動編寫的一個容易掉坑的地方需要注意。立即讀可能讀出0認為復位完成了(實際復位還未完成)馬上去操作其他寄存器會導致不可預知結果,這種結果是隨機的導致的現(xiàn)象更可能是隨機加隨機。
  2. 復位需要PHY的所有input時鐘比如RXC有效 ,這一點也是驅動編寫容易掉坑的地方,如果RXC引腳映射錯誤,PHY未就緒,都可以導致沒有RXC時鐘而不能完成復位。如果你遇到不能軟復位的問題第一步就查這里吧!
  3. 復位完成時間是不確定的 ,需要等到所有時鐘域完成復位才算,所以要等最慢的那個完成才算。底層接口最好只提供set_rst和get_rst兩個接口,由上層去調用該兩個接口實現(xiàn)等待查詢操作。因為時間不定,所以調用者可以使用線程等待,超時重試等處理,而如果底層接口使用指令死等則效率太低,會占用CPU,并且也不知道設置死等多長時間合適(指令死等時間受主頻等影響,使用定時器則需要占用硬件外設且不具備可移植性)。

三.軟復位不能完成的案例

我驅動開發(fā)時就遇到過不能軟復位的案例,后面調試發(fā)現(xiàn)一個是RXC引腳映射錯誤導致的,另外一個就是PHY沒有輸出RXC的時鐘導致的,所以如果你遇到類似問題先查上述原因吧。

另外觸發(fā)復位后等待4個CSR時鐘以上再去查詢這點也很重要,因為這個很可能導致隨機問題,也就是你可能立馬回讀讀到的是1,那么繼續(xù)等待為0復位完成,沒問題。也可能是立馬讀到0,沒有復位你認為復位了繼續(xù)去操作寄存器,此時操作寄存器操作行為不可預料。所以很可能導致隨機異常,并且很難定位。這個時候你可能會遇到白天有問題,晚上沒問題(因為溫度導致讀寫時序細微差異可能導致立馬回讀的狀態(tài)不一樣),重新編譯一下運行有問題,再重新編譯一下運行沒問題,加個打印有問題,去掉又沒問題等各種詭異的問題,此時你可能會覺得這是神學了,只能燒香拜佛了。實際上任何問題都有確定的原因的只是你不知道而已,所以驅動開發(fā)者遇到問題從來不說神學,也從來不瞎試,而是從原理分析,看手冊,梳理原理,梳理路徑,反推,測信號,逐步推進等方式去定位根本原因。這就是驅動開發(fā)與一般開發(fā)的區(qū)別。如果還找不到原因,上廁所時翻翻手冊吧,你可能會有所發(fā)現(xiàn)。隨手翻手冊,手冊當小說看,是驅動開發(fā)的必備素養(yǎng),基本上我每開發(fā)一個IP驅動,至少手冊的所有文字都要看一遍以上,尤其是標注*號的,note的,其他就是各個模塊調試時詳讀具體章節(jié)加翻閱,寄存器至少是每一個寄存器的每一個bit都要看一遍的。當然開發(fā)階段熟讀手冊,勘誤手冊,積累,多調試不通配置的效果等很重要,這樣才可能遇到問題知道查哪,才有可能上廁所時靈感迸發(fā)。

四.總結

驅動開發(fā)需要注重細節(jié),了解原理很重要,手冊一定要熟讀,經驗積累也很重要,一定要充分調試各個功能,多去嘗試不同配置對應的不同效果。

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

    關注

    53

    文章

    8261

    瀏覽量

    146670
  • 嵌入式
    +關注

    關注

    5087

    文章

    19150

    瀏覽量

    306356
  • 以太網(wǎng)

    關注

    40

    文章

    5447

    瀏覽量

    172134
  • 寄存器
    +關注

    關注

    31

    文章

    5358

    瀏覽量

    120771
  • PHY
    PHY
    +關注

    關注

    2

    文章

    305

    瀏覽量

    51795
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27590
收藏 人收藏

    評論

    相關推薦

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-MAC幀格式介紹

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-MDIO驅動編寫與測試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-MDIO驅動編寫與測試 一.前言
    的頭像 發(fā)表于 08-30 09:37 ?3848次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-MDIO<b class='flag-5'>驅動</b>編寫與測試

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-描述符鏈表介紹

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-數(shù)據(jù)流驗證過程

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-收發(fā)驅動編寫與調試

    本文轉自公眾號,歡迎關注 基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-收發(fā)驅動編寫與調試 (qq.com) https://mp.wei
    的頭像 發(fā)表于 09-05 08:47 ?2391次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-收發(fā)<b class='flag-5'>驅動</b>編寫與調試

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-無OS環(huán)境移植LWIP

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-LWIP的堆管理介紹

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-RTOS環(huán)境移植LWIP與性能測試

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-LWIP在PC上進行開發(fā)調試

    本文轉自公眾號歡迎關注 基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-LWIP在PC上進行開發(fā)調試 (qq.com) https://mp
    的頭像 發(fā)表于 09-11 08:40 ?2092次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-LWIP在PC上進行<b class='flag-5'>開發(fā)</b>調試

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-LWIP的ARP模塊介紹

    TCP/IP通訊第一步需要先調通ARP,否則TCP/IP包都不知道MAC地址要發(fā)給誰。這一篇來基于LWIP的ARP實現(xiàn)進行相關的分析。
    的頭像 發(fā)表于 09-18 09:34 ?1980次閱讀
    基于<b class='flag-5'>DWC_ether_qos</b>的<b class='flag-5'>以太網(wǎng)</b><b class='flag-5'>驅動</b><b class='flag-5'>開發(fā)</b>-LWIP的ARP模塊<b class='flag-5'>介紹</b>

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-LWIP的ICMP模塊介紹與PING收發(fā)測

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

    設計軟件核心以太網(wǎng)服務質量數(shù)據(jù)手冊免費下載

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

    DesignWare核心以太網(wǎng)服務質量數(shù)據(jù)本

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-包過濾

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

    基于DWC_ether_qos以太網(wǎng)驅動開發(fā)-描述符格式介紹

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