本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注
基于DWC2的USB驅(qū)動(dòng)開發(fā)-高速設(shè)備速度握手詳解 (qq.com)
前言
前面我們分析了USB連接和復(fù)位的過程, 也知道低速和全速/高速的USB設(shè)備分別是上拉DM和DP,主機(jī)通過不同的上拉區(qū)分接的是低速還是全速/高速設(shè)備的。但是怎么區(qū)分全速和高速呢? 這就需要額外的一些握手過程,本篇就來詳細(xì)介紹該過程。
高速握手過程
USB連接檢測(cè)過程見如下
https://mp.weixin.qq.com/s/T6pbLP83IIeJDvM_6ogQDA
USB復(fù)位過程見
https://mp.weixin.qq.com/s/8xKca-XPjZXAiO6MOQVGAQ
對(duì)于低速設(shè)備上拉DM,主機(jī)檢測(cè)到該上拉,然后發(fā)送復(fù)位就完了
對(duì)于全速和高速設(shè)備上拉DP,主機(jī)檢測(cè)到該上拉,然后發(fā)送復(fù)位,接下來是速度握手過程。
老規(guī)矩我們從規(guī)格書入手,USB2.0規(guī)格書P154中《High-speed Detection Handshake (not performed if low-speed device detected by hub):》有描述整個(gè)過程,但是這都是文字描述,不是很直觀,所以我們理論結(jié)合實(shí)踐,直接根據(jù)真實(shí)的波形和規(guī)格書的描述對(duì)照進(jìn)行分析。
在速度握手中,主機(jī)(集線器)和設(shè)備都需要檢測(cè)擁有最小持續(xù)時(shí)間的Chirp J和K, 涉及到兩個(gè)關(guān)鍵信號(hào)Chirp J和K(參見規(guī)格書7.1 Signaling或者本系列文章)。
整個(gè)過程如下
(1)設(shè)備使能DP上拉1.5K,如下圖的(1)處,此時(shí)DP大概3V左右

(2)主機(jī)檢測(cè)到DP拉高,檢測(cè)到設(shè)備連接,發(fā)送SE0進(jìn)行復(fù)位
如上圖的(2),因?yàn)闀r(shí)間很短,下面是細(xì)節(jié)圖,可以看到下圖SE0狀態(tài)只維持了8uS,后面就是藍(lán)色線(DM)高于黃色線即Chirp K信號(hào),對(duì)應(yīng)上圖的(3)部分。
回顧一下復(fù)位分析那一篇文章,發(fā)送放復(fù)位會(huì)持續(xù)50mS,但是接收方在最低2.5uS就可以識(shí)別到復(fù)位,這里實(shí)測(cè)是8uS設(shè)備就識(shí)別到復(fù)位然后開始發(fā)送Chirp K信號(hào)了。

保持D+上的1.5K上拉電阻使能,設(shè)備發(fā)送Chirp K信號(hào)是通過,禁用高速終端電阻,并將高速信號(hào)電流驅(qū)動(dòng)到D-線完成的。
這里有點(diǎn)不理解禁用了終端電阻,電流驅(qū)動(dòng)到D-線,電流環(huán)路是什么?
并且如下可以看到DM有1.2V左右,這個(gè)電壓是如何來的?

該Chirp K信號(hào)必須持續(xù)不少于1.0 ms(TUCH),并且在高速復(fù)位時(shí)間T0點(diǎn)(即主機(jī)發(fā)出的SE0開始)后不超過7.0 ms(TUCHEND)結(jié)束。
Chirp K持續(xù)時(shí)間如下所示,這里是2mS,滿足上述要求

參數(shù)TUCH和TUCHEND的值在手冊(cè)中的描述如下

上述可以看到Chirp K的信號(hào),DM大概是1.1V左右,比后面的KJ序列高一點(diǎn)。
(3)主機(jī)(集線器)必須在看到chirp K信號(hào)持續(xù)2.5μs(TFILT)時(shí)間以上,后認(rèn)為檢測(cè)到設(shè)備發(fā)出的ChirpK,這里的2.5uS的要是實(shí)際是相當(dāng)于濾波避免干擾。如果主機(jī)(集線器)未檢測(cè)到設(shè)備發(fā)出的chirp K信號(hào),則必須繼續(xù)發(fā)送SE0,直到復(fù)位結(jié)束(持續(xù)50mS)。
TFILT參數(shù)見規(guī)格書如下處說明

在Chirp K狀態(tài)結(jié)束后不超過100μs(TWTDCH),主機(jī)(集線器)必須開始發(fā)送Chirp K和Chirp J的交替序列,J和K之間不得存在空閑狀態(tài)。此序列必須持續(xù)到復(fù)位結(jié)束前不超過500μs且不少于100μs的時(shí)間(TDCHSE0)(這樣的目的是保證總線保持活動(dòng)狀態(tài),防止設(shè)備進(jìn)入高速掛起狀態(tài)。)。每個(gè)單獨(dú)的Chirp K和Chirp J必須持續(xù)不少于40μs且不超過60μs(TDCHBIT)。
TWTDCH,TDCHSE0,TDCHBIT的參數(shù)上圖。
如下圖(4)處

細(xì)節(jié)圖如下

如下可以看到要求Chirp K結(jié)束100μs(TWTDCH)以內(nèi)開始后面的KJ序列,實(shí)際10uS左右就開始了,滿足要求。

如下圖所示,主機(jī)發(fā)送的KJ序列持續(xù)了約50mS,即約復(fù)位的時(shí)間,實(shí)際要求是發(fā)送到復(fù)位結(jié)束前的100μs~500uS,這里示波器能力有限就不展示下圖右邊紅色圈處的細(xì)節(jié)了。

在K-J序列之后,主機(jī)(集線器)發(fā)送SE0,直到復(fù)位結(jié)束,即上面說的KJ序列之后100~500uS復(fù)位結(jié)束。復(fù)位結(jié)束時(shí),主機(jī)(集線器)必須轉(zhuǎn)換到高速啟用狀態(tài),而不會(huì)在數(shù)據(jù)線上引起任何轉(zhuǎn)換。
(4)設(shè)備這端發(fā)送完Chirp K之后監(jiān)控主機(jī)發(fā)送的K-J序列。設(shè)備端需要至少看到3對(duì)K-J序列,即序列Chirp K-J-K-J-K-J才認(rèn)為是有效的KJ序列。每個(gè)單獨(dú)的Chirp K和Chirp J必須檢測(cè)不少于2.5μs(TFILT)。
我們這里看到有持續(xù)50uS滿足要求

如果設(shè)備檢測(cè)到序列Chirp K-J-K-J-K-J,則檢測(cè)后不超過500μs(TWTHS),設(shè)備需要斷開D+上拉電阻器,啟用高速終端,并進(jìn)入高速默認(rèn)狀態(tài)。
如下圖所示,這里剛好約500uS左右進(jìn)行了上述切換,上述切換也導(dǎo)致了DP和DM的電平的變化,原來KJ序列大概是0.8V左右,即主機(jī)發(fā)送KJ是通過電流17.78mA驅(qū)動(dòng)45歐終端電阻實(shí)現(xiàn)的,17.78mA*45即0.8V。而我們又看到后面箭頭處的電壓下降,是因?yàn)檎檬巧鲜龅脑O(shè)備切換到了高速模式,使能了45Ω終端電阻,所以設(shè)備的終端電阻和主機(jī)的終端電阻并聯(lián)只有一般電阻,所以電壓就只有一般0.4V左右了。


如果設(shè)備在完成其自己的Chirp K之后,在不小于1.0ms且不大于2.5ms(TWTFS)的時(shí)間內(nèi)未檢測(cè)到有效KJ序列,則設(shè)備需要恢復(fù)到全速默認(rèn)狀態(tài)并等待復(fù)位結(jié)束。
以上就是整個(gè)速度握手的過程,比較細(xì)節(jié),我們?cè)僮鲆恍┛偨Y(jié)
關(guān)于整體電壓的變化,如下圖,有4個(gè)等級(jí),圖中(1)和(2)之間還有個(gè)復(fù)位的SE0電平這里就略掉了。
(1)即設(shè)備通過DP上拉,即15K和1.5k的分壓,3.3x15/(1.5+15) DP大概3V.
(2)設(shè)備發(fā)送Chirp K,DP 1.5K上拉還在,設(shè)備終端電阻禁用,實(shí)測(cè)D-上的電壓是大概1.2V,這里的電流路徑是什么? 待確定。
(3)主機(jī)發(fā)送KJ序列,主機(jī)通過驅(qū)動(dòng)17.78mA電流到對(duì)應(yīng)45歐終端電阻,發(fā)送KJ,所以DP DM是0.8V
(4)設(shè)備也進(jìn)入了高速模式,1.5k上拉斷開,設(shè)備使能了45歐終端電阻,和主機(jī)的終端電阻并聯(lián),主機(jī)繼續(xù)在發(fā)KJ序列,此時(shí)主機(jī)的17.78mA電流驅(qū)動(dòng)只能產(chǎn)生0.4V的電壓。

驅(qū)動(dòng)編寫
手冊(cè)P522 5.4.47 DCFG的bit[1:0]DevSpd用于配置設(shè)備期望工作過的速度,注意這里是期望,而不是一定,因?yàn)檫€需要速度握手過程,比如這里配置為高速,則還需要看主機(jī)是否支持高速。

所以我們需要在初始化時(shí)配置該位,告訴控制器后面以該速度去進(jìn)行速度握手。那么握手結(jié)束之后實(shí)際是什么速度呢,手冊(cè)P539的5.4.49 DSTS寄存器的位[2:1]EnumSpd可以看到

在速度握手完成之后還會(huì)產(chǎn)生中斷,
手冊(cè)P369寄存器5.4.7 GINTMSK的位13 EnumDoneMsk設(shè)置為1使能,速度握手完成中斷。

相應(yīng)的手冊(cè)P357寄存器5.4.6 GINTSTS的位13EnumDone為中斷標(biāo)志,寫1清除標(biāo)志

所以驅(qū)動(dòng)的基本過程是
1.初始化配置DevSpd設(shè)置期望的工作速度
2.配置EnumDoneMsk使能中斷,清除標(biāo)志EnumDone
3.等待中斷,查詢實(shí)際握手的速度EnumSpd,根據(jù)該速度再次重新配置DevSpd設(shè)置工作過速度。并清除標(biāo)志EnumDone。
以上就完成了整個(gè)速度握手過程。
實(shí)際以上邏輯如果是非標(biāo)主機(jī),可能會(huì)存在BUG,后面會(huì)有一個(gè)實(shí)際案例進(jìn)行分享,先賣個(gè)關(guān)子以后再單獨(dú)寫一篇文章分享該案例。
如下圖兩個(gè)箭頭處分別對(duì)應(yīng)的是復(fù)位中斷,和速度握手完成中斷

我們通過中斷服務(wù)函數(shù)中打印時(shí)間戳(注意要用非阻塞方式),看到Reset_Intr和High speed之間的時(shí)間剛好是50mS(打印的是uS單位),和圖中對(duì)應(yīng)

而我們?cè)趗sb_dev_crtl_sft_discon(0);使能DP上拉時(shí)也加一個(gè)打印,即上面connect后打印的時(shí)間戳和Reset_Intr之間是50mS,如下圖

總結(jié)
以上介紹了整個(gè)速度握手過程,以及設(shè)備驅(qū)動(dòng)的編寫。重點(diǎn)是結(jié)合手冊(cè)的描述對(duì)照波形去看和分析,要了解沒以一個(gè)實(shí)踐段,每一個(gè)信號(hào),每一個(gè)電平的含義和原理,知道那個(gè)信號(hào)是誰驅(qū)動(dòng)的,為什么是這個(gè)波形,一定要自己親自用示波器去抓波形,而不要使用別人的波形,因?yàn)椴煌脑O(shè)備可能略有差異,如何去觸發(fā),如何去抓波形,也會(huì)加深自己的理解。
-
嵌入式
+關(guān)注
關(guān)注
5210文章
20680瀏覽量
337367 -
usb
+關(guān)注
關(guān)注
60文章
8480瀏覽量
286046 -
USB2.0
+關(guān)注
關(guān)注
2文章
194瀏覽量
48066 -
USB驅(qū)動(dòng)
+關(guān)注
關(guān)注
1文章
138瀏覽量
21346 -
DWC2
+關(guān)注
關(guān)注
0文章
35瀏覽量
404
發(fā)布評(píng)論請(qǐng)先 登錄
基于DWC2的USB驅(qū)動(dòng)開發(fā)-0x01開篇介紹與新思DWC2 USB2.0控制器簡介
基于DWC2的USB驅(qū)動(dòng)開發(fā)-0x02 DWC2 USB2.0 IP功能特征介紹
基于DWC2的USB驅(qū)動(dòng)開發(fā)-IAD描述符詳解
基于DWC2的USB驅(qū)動(dòng)開發(fā)-USB復(fù)位詳解
基于DWC2的USB驅(qū)動(dòng)開發(fā)-USB連接詳解
基于DWC2的USB驅(qū)動(dòng)開發(fā)-高速設(shè)備枚舉為全速設(shè)備問題案例分析
基于DWC2的USB驅(qū)動(dòng)開發(fā)-設(shè)備類驅(qū)動(dòng)框架
基于DWC2的USB驅(qū)動(dòng)開發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解
基于DWC2的USB驅(qū)動(dòng)開發(fā)-USB包詳解
基于DWC2的USB驅(qū)動(dòng)開發(fā)-數(shù)據(jù)不能發(fā)送問題分析案例
新思 DWC2 的參考手冊(cè)從哪里可以下載
如何對(duì)基于hal庫的DWC2 USB IP進(jìn)行調(diào)試呢
使用USB OTG端口作為以太網(wǎng)小工具無法工作是為什么?
《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第20章、USB主機(jī)與設(shè)備驅(qū)動(dòng)
基于DWC2的USB驅(qū)動(dòng)開發(fā)-抽絲剝繭再論切換到狀態(tài)階段標(biāo)志DOEPINTn.StsPhseRcvd
基于DWC2的USB驅(qū)動(dòng)開發(fā)-高速設(shè)備速度握手詳解
評(píng)論