衡阳派盒市场营销有限公司

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于DWC2的USB驅(qū)動開發(fā)-高速設(shè)備枚舉為全速設(shè)備問題案例分析

嵌入式USB開發(fā) ? 來源: 嵌入式Lee ? 作者: 嵌入式Lee ? 2023-07-10 17:12 ? 次閱讀

本文轉(zhuǎn)自公眾號,歡迎關(guān)注

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

一.前言

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

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

二.問題

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

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

三.分析過程

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

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

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

接第三方主機(jī)不正常的

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

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

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

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

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

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

既然主機(jī)不對,這個先不管,但是為什么設(shè)備在第2次復(fù)位時沒有發(fā)Chirp K進(jìn)行高速握手了呢。

這要從上一篇說的設(shè)備驅(qū)動說起。

設(shè)備驅(qū)動的流程如下

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

2.配置EnumDoneMsk使能中斷,清除中斷標(biāo)志EnumDone

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

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

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

即如圖所示

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

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

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

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

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

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

四.解決方法

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

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

五.總結(jié)

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

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

    關(guān)注

    33

    文章

    8691

    瀏覽量

    151911
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7980

    瀏覽量

    266067
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1510

    瀏覽量

    62393
  • USB驅(qū)動
    +關(guān)注

    關(guān)注

    1

    文章

    137

    瀏覽量

    20275
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    150
收藏 人收藏

    評論

    相關(guān)推薦

    基于DWC2USB驅(qū)動開發(fā)-0x01開篇介紹與新思DWC2 USB2.0控制器簡介

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

    基于DWC2USB驅(qū)動開發(fā)-0x02 DWC2 USB2.0 IP功能特征介紹

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

    基于DWC2USB驅(qū)動開發(fā)-IAD描述符詳解

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

    基于DWC2USB驅(qū)動開發(fā)-USB復(fù)位詳解

    本文轉(zhuǎn)自公眾號歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB復(fù)位詳解 (qq.com) 一.前言 ? ? ? ? ?上一篇我們詳細(xì)介紹了
    的頭像 發(fā)表于 07-07 11:18 ?7.5w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>復(fù)位詳解

    基于DWC2USB驅(qū)動開發(fā)-USB連接詳解

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊,規(guī)格書,練習(xí)招式
    的頭像 發(fā)表于 07-07 08:46 ?3876次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>USB</b>連接詳解

    基于DWC2USB驅(qū)動開發(fā)-設(shè)備驅(qū)動框架

    本文轉(zhuǎn)自公眾號,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-設(shè)備驅(qū)動框架 (qq.com) 一.前
    的頭像 發(fā)表于 07-16 15:56 ?1375次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>設(shè)備</b>類<b class='flag-5'>驅(qū)動</b>框架

    基于DWC2USB驅(qū)動開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例

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

    新思 DWC2 的參考手冊從哪里可以下載

    最近在學(xué)習(xí)STM32F4 USB驅(qū)動,有看到 dwc2驅(qū)動的代碼,但是沒有手冊用來參考,ST手冊上寄存器不全,從網(wǎng)上看到有下面兩個手冊,但是一直找不到下載的資源 《DesignWar
    發(fā)表于 01-22 11:32

    STM32 USB 枚舉和移除問題

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

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

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

    請問如何將USB設(shè)備設(shè)置為全速設(shè)備高速設(shè)備

    如何將USB設(shè)備設(shè)置為全速設(shè)備高速設(shè)備
    發(fā)表于 12-14 07:10

    如何對基于hal庫的DWC2 USB IP進(jìn)行調(diào)試呢

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

    zImage如何在mfg下載期間將USB重新枚舉為UMS設(shè)備

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

    基于DWC2USB驅(qū)動開發(fā)-高速設(shè)備速度握手詳解

    前面我們分析USB連接和復(fù)位的過程, 也知道低速和全速/高速USB設(shè)備分別是上拉DM和DP,
    的頭像 發(fā)表于 07-08 08:40 ?3018次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-<b class='flag-5'>高速</b><b class='flag-5'>設(shè)備</b>速度握手詳解

    基于DWC2USB驅(qū)動開發(fā)-抽絲剝繭再論切換到狀態(tài)階段標(biāo)志DOEPINTn.StsPhseRcvd

    本文轉(zhuǎn)自公眾號系列文章,歡迎關(guān)注 基于DWC2USB驅(qū)動開發(fā)-USB包詳解 (qq.com) 一.前言 前面我們對SETUP完成標(biāo)志DOE
    的頭像 發(fā)表于 07-24 18:04 ?1704次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>-抽絲剝繭再論切換到狀態(tài)階段標(biāo)志DOEPINTn.StsPhseRcvd
    足球百家乐投注网出租| LV百家乐官网娱乐城| 通化大嘴棋牌游戏| 百家乐辅助工具| 百家乐官网高人玩法| 机器百家乐软件| 百家乐官网娱乐城返水| 百家乐游戏下载| 有关百家乐官网玩家论坛| 德州扑克 在线| 澳门百家乐一把决战输赢| 百家乐官网试玩平台| 博发百家乐的玩法技巧和规则| 百家乐官网平7s88| 大发888游戏客户端| 百家乐发牌的介绍| 新澳门百家乐官网娱乐城| 六合彩官网| 真人百家乐的玩法技巧和规则 | 一直对百家乐官网很感兴趣.zibo太阳城娱乐城 | 香港六合彩全年资料| 现金百家乐技巧| 名人百家乐官网的玩法技巧和规则 | 大发888体育真人| 百家乐赌博娱乐城| 千亿娱百家乐官网的玩法技巧和规则| 大佬娱乐城怎么样| 赌场百家乐打法| 网上百家乐官网娱乐网| 娱乐城注册送彩金| 重庆百家乐的玩法技巧和规则| 百家乐官网大西洋城| 四会市| 大发888bet亚洲lm0| 赌场百家乐试玩| 七匹狼百家乐官网的玩法技巧和规则| 足球投注现金网| 威尼斯人娱乐城购物| 百家乐是多少个庄闲| 狮威百家乐官网赌场娱乐网规则| 台南县|