<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天內不再提示

基于DWC2的USB驅動開發-USB復位詳解

嵌入式USB開發 ? 來源:嵌入式Lee ? 作者:嵌入式Lee ? 2023-07-07 11:18 ? 次閱讀

本文轉自公眾號歡迎關注

基于DWC2的USB驅動開發-USB復位詳解 (qq.com)

一.前言

上一篇我們詳細介紹了USB枚舉的第一步,連接檢測。那么第二步是干什么呢? 相信做過嵌入式開發尤其做過驅動開發的都會想到-復位,基本上所有的外設模塊在開始都需要進行復位操作,以達到一個默認的狀態,USB也不例外。一方面初始化時復位以達到默認狀態,一方面在異常時復位以恢復。話說復位可以解決99%的問題就是這么來的,如果還不能解決那就斷電復位,相信這是很多人解決問題的第一板斧,且不說是不是最優選擇,至少這樣一般都有效,當然可靠性考慮是否能直接復位一般都需要評估不能這么直接簡單粗暴。

這一篇我們就來詳細講講USB的復位,老規矩理論結合實踐,先看規格書的說明再寫驅動實測。

二.USB的復位

2.1復位信號

首先,復位信號到底是什么樣的呢?調試外設時序的時候一般都會關注,復位一般用一組特殊的狀態時序來表示,USB也一樣。

我們看到USB2.0規格書中對復位信號的描述如下

b18e5432-1c5f-11ee-9c1d-dac502259ad0.png

對于發送端要求D+和D-小于VOL(max)持續10mS以上,VOL(max)的值為0.3V,如下

b1bacbd4-1c5f-11ee-9c1d-dac502259ad0.png

而對于接收端要求D+和D-小于VIL(max)持續10mS以上,VIL(max)值為0.8V

b1cca16a-1c5f-11ee-9c1d-dac502259ad0.png

可以看到VIL(max)比VOL(max)是要大的,這是對發送要求嚴格一些,因為要考慮信號傳輸的噪聲干擾等因素,預留一些裕度。

上述10ms的參數實際有個名字叫(TDRST),規格書中要求如下

b1e05246-1c5f-11ee-9c1d-dac502259ad0.png

而一般要求接收端在D+和D-小于VIL(max)持續2.5uS以上就應該檢測到復位,這個時間記住,我們可能會遇到臨界情況在這個值附近可能出現不穩定的情況,調試時留個心眼,一旦出現這種很可能就是疑難雜癥,但是現在留個心眼以后就可能想起來確認這里。

對于根集線器這里還有個要求就是非連續的復位要有3mS以上的間隔(TRHRSI),復位持續周期50mS(TDRSTR)以上(因為USB拓撲最大有5個集線器)

b1fc778c-1c5f-11ee-9c1d-dac502259ad0.png

2.2復位過程

參考USB2.0的規格書《7.1.7.5 Reset Signaling》

在低速/全速模式下運行的設備,如果其面向上游的端口上出現SE0超過2.5μs(TDETRST),則可以將該信號視為復位信號。復位須在復位信號結束之前生效。注意這里是復位信號結束之前就生效。(實際這里還可能導致隱蔽的BUG,我這里有一個精彩的案例分析,高速設備總是枚舉為全速設備的問題,神奇的是在復位中段服務函數中加個打印就好了,后面會分享)

b20fb68a-1c5f-11ee-9c1d-dac502259ad0.png

1.主機(HUB)檢測到設備連接,通過DP還是DM拉高區分是低速還是全速/高速。

2.主機(HUB驅動信號SE0以產生復位信號。

3.設備檢測到SE0持續2.5uS(TFILTSE0)以上檢測到復位,產生復位中斷。

對于低速設備完成復位,對于全速和高速設備后面繼續進行高速設備的檢測。

速度的檢測后面會單獨再講。

如果是從non-suspended全速狀態復位則必須在SE0

開始后的2.5uS(TFILTSE0)~3.0 ms(TWTRSTFS)時間內進行后續的高速速度檢測握手。

如果是從suspend狀態復位,則必須在SE0開始后的2.5uS(TFILTSE0)以上時間后進行高速速度檢測握手,為什么這里沒有最長時間3.0 ms(TWTRSTFS)的限制了呢,因為掛起時時鐘是停止的重啟時鐘需要時間,所以這里不限制上限時間。

如果是從non-suspended高速狀態復位,則設備在恢復到全速之前必須等待不少于3.0ms且不多于3.125ms(TWTREV)。通過移除高速端接電阻并重新連接D+上拉電阻器,可實現全速恢復。該設備對總線狀態進行采樣,并在開始恢復至全速后檢查SE0(復位而非掛起)、不小于100μs且不大于875μs(TWTRSTHS)。如果檢測到SE0(復位),則設備開始高速檢測握手。

注意

設備必須能夠在復位恢復時間10 ms(TRSTRCY)后接受SetAddress()請求,這個時間也是一個調試經驗,如果不能枚舉可以檢查設備的響應時間是否過長。

由于面向下游的端口在復位期間不會處于傳輸狀態,因此高速Chirp信號不會引發斷開連接檢測。

如下圖是DWC2驅動的復位波形,黃色為DP,高速模式。

b22b27f8-1c5f-11ee-9c1d-dac502259ad0.png

通過仿真器GDB load程序重新運行,而不是直接上電運行,如果是后者則沒有(1)這個狀態此時默認是沒有拉高的。

DWC2控制器的軟件復位不會影響SftDiscon位的狀態,所以load程序后SftDiscon保持之前的拉高狀態,DWC2控制器復位也不會影響

直到相關UTMI時鐘復位,如下代碼執行對應到(2)前面的DP拉低,此時UTMI等復位應該是導致了PHY的相關狀態復位。

b24e5bd8-1c5f-11ee-9c1d-dac502259ad0.png

然后是軟件設置SftDiscon位為0,拉高DP,如下代碼處,對應(2)處的拉高

b283e24e-1c5f-11ee-9c1d-dac502259ad0.png

然后DP拉高100mS之后(3),主機發送復位(4),這里看到復位時間非常短,這是因為設備2.5uS以上,實際是8uS就檢測到了復位(如下圖所示,圖中標尺部分,后面的藍色的高DM的高是設備發出的Chirp K高速握手信號),進行了后續的高速握手,所以覆蓋了主機發送的復位信號,所以看不到復位10mS的持續時間。

b2ad1344-1c5f-11ee-9c1d-dac502259ad0.png

三.總結

復位的信號很簡單,但是承接的是連接檢測到后續的高速速度握手,時序非常重要,尤其是有個參數2.5uS,檢測到復位信號持續2.5uS即檢測到復位,而不需要等復位信號移除即不需要等10mS,所以會出現主機在驅動復位,設備已經檢測到復位開始后續的高速握手,從波形上看就看不到復位信號持續10mS了,而這也可能導致一些性能不達標的主機,高速握手失敗,這個后面單獨講案例分析。

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

    關注

    59

    文章

    7448

    瀏覽量

    258745
  • 復位
    +關注

    關注

    0

    文章

    159

    瀏覽量

    24056
  • USB驅動器
    +關注

    關注

    0

    文章

    8

    瀏覽量

    5225
  • 復位信號
    +關注

    關注

    0

    文章

    50

    瀏覽量

    6173
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    102
收藏 人收藏

    評論

    相關推薦

    基于DWC2USB驅動開發-數據不能發送問題分析案例

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-數據不能發送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于驅動
    的頭像 發表于 08-08 09:43 ?1164次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-數據不能發送問題分析案例

    基于DWC2USB驅動開發-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd

    本文轉自公眾號系列文章,歡迎關注 基于DWC2USB驅動開發-USB詳解 (qq.com)
    的頭像 發表于 07-24 18:04 ?841次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd

    基于DWC2USB驅動開發-控制傳輸中斷相關寄存器

    本篇講解Scatter/Gather DMA模式下控制傳輸相關的寄存器??刂苽鬏斒?b class='flag-5'>USB驅動的核心部分,控制傳輸調通了驅動就完成了一大半,而驅動的核心又是中斷的處理。
    的頭像 發表于 07-24 00:07 ?1343次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-控制傳輸中斷相關寄存器

    基于DWC2USB驅動開發-USB詳解

    不管什么通訊協議,比如UART,SPI,USB等等,不管是并口還是串口,不管是同步還是異步,我們從抽象的角度去看,其本質都是一樣的。都是先定義物理信號,物理信號可能是差分,單端,電流驅動電壓驅動等等
    的頭像 發表于 07-23 17:11 ?1511次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>USB</b>包<b class='flag-5'>詳解</b>

    USB電氣信號復位與設備速率識別

    復位 從狀態切換圖上看,一個 USB 設備連接后,它將會被供電,然后被復位。當軟件出錯時,我們也可以發出復位信號重新驅動設備。 那么,
    的頭像 發表于 07-20 10:05 ?971次閱讀
    <b class='flag-5'>USB</b>電氣信號<b class='flag-5'>復位</b>與設備速率識別

    基于DWC2USB驅動開發-發送相關的寄存器DMA寄存器詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-發送相關的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,
    的頭像 發表于 07-16 16:42 ?925次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-發送相關的寄存器DMA寄存器<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-設備類驅動框架

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-設備類驅動框架 (qq.com) 一.前言 從軟件頂層,從數據流的角度來看
    的頭像 發表于 07-16 15:56 ?698次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-設備類<b class='flag-5'>驅動</b>框架

    基于DWC2USB驅動開發-UVC的相機終端詳解

    本篇來詳細分析下UVC的相機終端相關的內容,同樣的我們理論結合實踐來進行。
    的頭像 發表于 07-13 09:46 ?1181次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-UVC的相機終端<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-UVC的處理單元詳解

    本篇來詳細分析下UVC的處理單元相關的內容,同樣的我們理論結合實踐來進行。
    的頭像 發表于 07-13 09:42 ?1177次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-UVC的處理單元<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-高速設備枚舉為全速設備問題案例分析

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-高速設備枚舉為全速設備問題案例分析 (qq.com) 一.前言 ? 本文分享一個高速設備被枚舉為全速的問題。 ? ? 高速設備速
    的頭像 發表于 07-10 17:12 ?782次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-高速設備枚舉為全速設備問題案例分析

    基于DWC2USB驅動開發-高速設備速度握手詳解

    前面我們分析了USB連接和復位的過程, 也知道低速和全速/高速的USB設備分別是上拉DM和DP,主機通過不同的上拉區分接的是低速還是全速/高速設備的。但是怎么區分全速和高速呢? 這就需要額外的一些握手過程,本篇就來詳細介紹該過程
    的頭像 發表于 07-08 08:40 ?1541次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-高速設備速度握手<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-USB連接詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-USB連接詳解 (qq.com) 一.前
    的頭像 發表于 07-07 08:46 ?2345次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-<b class='flag-5'>USB</b>連接<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-IAD描述符詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-IAD描述符詳解 (qq.com) 一.? 前言 IAD描述符用于一個設備功能關聯多
    的頭像 發表于 06-27 08:45 ?1.3w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-IAD描述符<b class='flag-5'>詳解</b>

    基于DWC2USB驅動開發-0x0E 使用邏輯分析儀分析ULPI數據

    工欲善其事必先利其器,所以在USB開發中工具很重要,示波器,邏輯分析儀,USB協議分析儀等都不可少。在底層問題分析時缺少有力工具時很難進一步分析,本文分享了ULPI抓包分析,實際抓包波形因為信號質量問題可能沒有那么理想,所以信號
    的頭像 發表于 06-07 16:56 ?1199次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x0E 使用邏輯分析儀分析ULPI數據

    基于DWC2USB驅動開發-0x07 DWC2 USB2.0 IP 配置參數

    混淆,IP的配置參數固定之后就不能改了,就決定了IP所具有的能力。對于軟件開發者來說也要了解其具體的配置,因為只有知道當前IP的配置,知道支持哪些功能,哪些是軟件可以配置的哪些是硬件固定了無法配置的,等等這些,后面寫驅動才心中有數。 配置相關
    的頭像 發表于 05-17 09:49 ?1379次閱讀
    亚洲欧美日韩精品久久_久久精品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>