<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開發 ? 來源: 嵌入式Lee ? 作者: 嵌入式Lee ? 2023-07-10 17:12 ? 次閱讀

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

基于DWC2的USB驅動開發-高速設備枚舉為全速設備問題案例分析 (qq.com)

一.前言

本文分享一個高速設備被枚舉為全速的問題。

高速設備速度握手參見本系列的文章。

二.問題

我們設計的UVC攝像頭工作在高速模式,接一個第三方的主機用于顯示和無線上傳,主機也支持高速模式。

我們的UVC攝像頭接PC測試都能正常枚舉為高速,從來沒有失敗過。接第三方的主機時總是被枚舉為全速,偶爾能成功一兩次枚舉為高速,幾乎都是枚舉為全速。

三.分析過程

既然接電腦沒問題,接第三方主機有問題,那么就懷疑第三方主機的兼容性問題。先前軟件做了一些分析,調試沒法確認問題,進行了一些打印信息的調試,在中斷中關鍵事件進行打印,發現接入第三方設備時進行了兩次復位和速度握手。這是一個異常信號,正常一次復位和速度握手就能完成。于是使用示波器監控,對比接PC正常的和接第三方設備不正常的復位,速度握手過程。

接PC正常的波形,由于要抓長時間所以圖中高速握手的細節顯示不了了,但是整體依舊可以知道各個階段

a2c0773a-1df1-11ee-9c1d-dac502259ad0.png

接第三方主機不正常的

a2dcd060-1df1-11ee-9c1d-dac502259ad0.png

對比可以看到接PC一次完成高速握手

a31ef3dc-1df1-11ee-9c1d-dac502259ad0.png

而接第三方復位了兩次第一次嘗試高速握手主機無響應,第二次沒有嘗試高速握手了,注意這里沒有抓前面初始化過程了。

a3521384-1df1-11ee-9c1d-dac502259ad0.png

這里主機第一次沒有響應設備的Chirp K是不對的,這里因為主機是按鍵喚醒的,懷疑是剛上電未就緒,但是主機為什么未就緒就要發送復位呢,應該是USB初始化完后就緒才發復位的,所以這里主機肯定是不對的,而且為什么主機要發兩次復位也不得而知,但是肯定是不正常的,有些第三方的東西做的不健壯也沒辦法,我們現在也沒辦法知道主機的處理邏輯。

既然主機不對,這個先不管,但是為什么設備在第2次復位時沒有發Chirp K進行高速握手了呢。

這要從上一篇說的設備驅動說起。

設備驅動的流程如下

1.初始化配置DevSpd設置期望的工作速度,按照該速度去握手

2.配置EnumDoneMsk使能中斷,清除中斷標志EnumDone

3.等待中斷,中斷中查詢實際握手的速度EnumSpd,根據該速度再次重新配置DevSpd設置實際工作速度。并清除中斷標志EnumDone。

上述的邏輯是用戶可以設置最高期望的工作速度,但是實際主機支持多少就工作在多少,這樣不管主機是什么速度,代碼都不需要修改,初始化指定為高速即可,最終按照實際握手結果而定。

原因就在于上述紅色字體部分,第一次由于主機沒有響應Chirp K所以設備握手結果是全速,所以中斷服務函數中設置為了工作模式為全速,下一次復位時依然會按照全速握手此時就不會發Chirp K了。

即如圖所示

a385a3ca-1df1-11ee-9c1d-dac502259ad0.png

那么是不是可以在復位中斷中重新再配置為高速來達到下一次復位進行高速握手呢,因為復位中斷是在握手完成中斷之前的,這樣是不行的,因為設備檢測到復位進入復位中斷時硬件已經開始進行后續的握手處理了,軟件的修改已經來不及了。此時設備已經是正常的全速工作了,并不知道在何時需要重新設置為高速以等待下一次的復位握手,畢竟這個兩次復位握手不是標準流程,是主機的異常導致的。以上導致了第一次握手為全速之后后面就只能是全速了。

既然如此我們還可以修改中斷服務函數中的處理,不在中斷服務函數中根據前一次握手速度設置實際工作速度,這樣第二次就可以握手為高速了,如下所示

這樣看似解決了問題,但是實際導致了用戶API邏輯問題,原來用戶API初始化設置期望的速度為高速,如果主機不支持高速則握手為全速工作,沒有問題,

現在這種情況如果主機不支持高速,則設備一直工作在高速將沒辦法工作,所以這個修改會導致和其他主機通訊異常,不可取。即改變了原來API的邏輯。

a3d6ba94-1df1-11ee-9c1d-dac502259ad0.png

四.解決方法

雖然問題在于主機,但是出于兼容性考慮還是要想解決辦法的,畢竟第三方設備健壯性沒法保證,寫驅動考慮兼容性,甚至兼容非標,非健壯設備也是要考慮的。

所以這里對API接口再增加參數區分,原來的參數還是表示期望速度,但是實際工作速度按照握手結果決定,原來的邏輯不變。再增加一個參數即強制固定速度,也就是如果設置為固定速度則握手完成中斷中不根據握手結果更新速度,設置多少就多少不再改。這樣通過參數來應對原來的用戶邏輯和兼容這個有問題的主機。需要修改的地方是API增加一組強制固定速度和原來的期望速度對應,中斷服務函數中根據是強制速度還是期望速度處理,期望速度就根據握手值更新速度,固定值則不更改。

五.總結

本篇以一個實際的案例進行分析,體現了對USB高速握手過程理解的重要性,所以前一篇高速握手詳解的文章非常重要,在此基礎上才能很快的定位問題。之前一直強調知其然知其所以然很重要,只有深入理解才能快速解決問題。同時也體現了驅動開發比一般嵌入式開發更深入的要求,不僅要考慮正常設備能工作,還要兼容不正常的,不標準的,不健壯的設備,這也需要更深的理解和功力。

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

    關注

    33

    文章

    7771

    瀏覽量

    148788
  • usb
    usb
    +關注

    關注

    59

    文章

    7480

    瀏覽量

    259252
  • API
    API
    +關注

    關注

    2

    文章

    1404

    瀏覽量

    61046
  • USB驅動
    +關注

    關注

    1

    文章

    136

    瀏覽量

    20020
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    104
收藏 人收藏

    評論

    相關推薦

    基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2.0控制器簡介

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2
    的頭像 發表于 05-08 18:10 ?3364次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x01開篇介紹與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制器簡介

    基于DWC2USB驅動開發-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。從linux的內核源碼驅動中就帶
    的頭像 發表于 05-09 10:09 ?6507次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-0x02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征介紹

    基于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描述符詳解

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

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-USB復位詳解 (qq.com) 一.前言 ? ? ? ? ?上一篇我們詳細介紹了
    的頭像 發表于 07-07 11:18 ?1.6w次閱讀
    基于<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>復位詳解

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊,規格書,練習招式
    的頭像 發表于 07-07 08:46 ?2429次閱讀
    基于<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>連接詳解

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-設備驅動框架 (qq.com) 一.前
    的頭像 發表于 07-16 15:56 ?729次閱讀
    基于<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>類<b class='flag-5'>驅動</b>框架

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

    本文轉自公眾號歡迎關注 基于DWC2USB驅動開發-數據不能發送問題分析案例 (qq.com) ? 一.前言 ? ? ? ?對于
    的頭像 發表于 08-08 09:43 ?1229次閱讀
    基于<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>案例

    STM32 USB 枚舉和移除問題

    我們的設備使用的是STM32芯片,將設備枚舉為3個CCID+2HID的復合設備,但在使用過程中,出現以下兩個問題1、
    發表于 08-16 13:56

    全速USB高速USB的識別過程分析

    Device)。因此,如果高速設備掛到USB1.x的hub上,那該設備只能工作在全速模式下。不管是hub還是
    發表于 08-16 15:08

    請問如何將USB設備設置為全速設備高速設備?

    如何將USB設備設置為全速設備高速設備?
    發表于 12-14 07:10

    如何對基于hal庫的DWC2 USB IP進行調試呢

    背景之前適配 DWC2 USB IP 的時候,主要是基于 st 的 hal 庫來走的,當時我就對他們的 hal 庫代碼不滿,只是無奈,迫于時間就沒重構,果不其然,usb bug 一堆,隨意舉例,這還
    發表于 06-14 15:23

    虛擬com端口設備運行全速工作但高速無效罪魁禍首是什么?

    `hpcd_USB_OTG_HS.Init.speed = PCD_SPEED_HIGH;`枚舉后,Windows 顯示“未知 USB 設備”。U
    發表于 12-01 07:28

    USB高速物理層不工作怎么解決?

    數據。如果禁用 OTG 的內部 DMA,全速 USB 設備工作正常,但高速設備無法在枚舉時傳輸
    發表于 01-05 08:43

    zImage如何在mfg下載期間將USB重新枚舉為UMS設備?

    USB,然后它會找到設備并繼續下一步。我覺得 zImage 無法將 USB 重新枚舉為大容量存儲設備,或者至少它無法向我的 PC 發出正確
    發表于 03-14 12:56

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

    前面我們分析USB連接和復位的過程, 也知道低速和全速/高速USB設備分別是上拉DM和DP,
    的頭像 發表于 07-08 08:40 ?1610次閱讀
    基于<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><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>