色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

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

本文轉自公眾號歡迎關注
基于DWC2的USB驅動開發-USB包詳解 (qq.com)

一.前言

不管什么通訊協議,比如UART,SPI,USB等等,不管是并口還是串口,不管是同步還是異步,我們從抽象的角度去看,其本質都是一樣的。都是先定義物理信號,物理信號可能是差分,單端,電流驅動電壓驅動等等,不管是什么樣的物理信號,我們從抽象角度看就是不同的物理狀態和數字1和0的對應, 這里的狀態不一定是電壓(雖然數字通訊大部分就是電壓),也可能是頻率,相位等等,這里的狀態也不一定是電平狀態也可能是跳變狀態,只要是有不同狀態可以區分的都可以,甚至你可以自由發揮自我創造。這里的數字1和0即bit,至此我們就到了數字的世界,一切都是1和0的世界了,這個轉化是由PHY的收發器完成的。bit再按照一定規則組成幀或者包,然后在包的基礎上定義各層協議。任意的通信協議都不外呼上述的過程,USB也是如此。這樣一看USB也沒有那么可怕了,和我們用的UART等協議本質是一樣的,只是物理層信號不一樣,協議不一樣而已。這一篇我們就來介紹協議層,底層相關的一些內容,這一篇主要關注USB的包,不涉及物理層信號,也不管位填充等等。

二.協議的一般約定

上面提到,協議都是建立在bit之上的,bit組成byte然后組成包或者幀。那么對于bit和byte在總線上的出現就有一個順序的約定,對于bit先發低位即 LSb ,對于byte先發低字節即 LSB 。對于協議中的多字節數據域都是 小端模式 ,即低字節在低地址,總線上先發送。

三.包組成

前面提到了包就是一系列的1,0序列組成,但是為了協議能解析,包需要分成一些特定的區域以代表不同的功能。比如一些常見的協議一般都有同步域,頭,負載,校驗等部分。

USB也類似,下面就介紹USB包的組成部分,不同包類型可能由不同的部分扭組合而成。

3.1SYNC同步域

所有USB的數據包以一個SYNC同步區域開始,接收電路可以利用該區域進行時鐘對齊。類似的CAN協議也有硬同步機制都差不多。所謂的硬對齊即通過一個特殊的狀態(區別于正常的數據,比如一個長串的1,長串的0,任何可以區別于其他狀態的都可以)來表示開始,然后以該開始狀態后的一個時鐘邊沿作為對齊。

SYNC的最后兩位用于標志SYNC的結束,承接PID的開始。

我們看到SYNC就是KJ對,所以有,邊沿這樣接收端就可以根據這些邊沿進行和北部時鐘同步,注意有意第一個KJ對有失真,所以不能用于同步。

SYNC是包的同步機制,不含協議層的有效信息,所以一般協議分析中就不會體現這部分了,只有硬件分析時才可能關注該部分,比如要示波器抓包則可以設置觸發條件來觸發到包頭觸發。

另外圖中SYNC開始,即從Idle到K也叫SOP,表示包的開始。

3.1.1全速/低速

8位:3個KJ對加兩個K,KJKJKJKK

如下所示

圖片

3.1.2高速

32位:15個KJ對加兩個K,KJKJKJKJ KJKJKJKJ KJKJKJKJ KJKJKJKK .

當重復數據包時,集線器允許從SYNC開始最多丟棄4位,但不能破壞SYNC字段的任何重復位。因此,在被5個集線器重復之后,SYNC字段可以短至12位。

但是注意對于接收方不一定要接收8位或者32位,對于高速接收到至少12位就算(KJKJKJKJKJKK)

3.2包ID區域

SYNC后面就是PID區域,可以看到和我們通常的協議都是一個套路,比如我們使用串口自定義應用層協議,一般前面會用幾個特殊字節作為同步域用于標志包的開頭,如果用AA,55這種還可以用于時鐘同步,波特率自適應。然后定義一個TYPE字段表示該包的作用和類型,這樣看來USB也不過如此,這種套路我們早就用過很多了。

USB的PID定義如下,用于表示包的類型,

低4位為包類型編碼,高四位為其取反用于校驗,接收方如果校驗低4位不是高4位的取反則為PID錯誤。對于編碼類型位定義或者PID校驗錯誤的包丟棄。

對于PID合法但是不符合預期的比如對IN端點收到了OUT令牌則不響應。

圖片

PID的編碼如下,注意如下是按照高位在左,實際傳輸是低位先傳輸,注意觀察下表

可以看到PID分為了4組,通過PID<0:1> 區分。

圖片

比如,以下為一個控制傳輸的實例,和上表對應,高低4位相加都是0xF

SETUP是0x2D

DATA0 是0xC3

ACK是0xD2

IN是0x69

NAK是0x5A

圖片

3.3地址域

地址域包括功能地址域和端點域。地址域必須完全獨立匹配,不容許重名(別名),不符合的SETUP必須忽略,訪問未初始化的端點的SETUP也要忽略。

一個設備對應一個地址,地址有7位,所以可以尋址128個設備。

一個設備地址對應一個功能,默認設備地址是0,在枚舉階段,標準請求設置地址。

設備地址0即做枚舉使用,不能分配給其他使用。

IN,STEUP,OUT,PING,SPLIT都需要帶ADDR以表明是和哪個設備通訊。

圖片

ADDR后面是端點域,4位可以表示16個端點。所以可以到設備最多16個端點。

端點0用于控制傳輸是必須支持的,所以很多控制端點是默認使能的,不需要手動使能,

其他端點是功能相關。

SETUP,IN,OUT,PING都要帶端點,表示和哪個端點通訊。

低速設備支持最多3個端點,控制端點0+兩個端點(兩個控制端點,控制端點+中斷端點,或者兩個中斷端點)。

注意控制端點不一定要是端點0,也可以是其他端點,但是必須要有端點0的控制端點。

全速和高速設備支持最多16個IN和OUT端點。

圖片

3.4幀序號域

幀序號區域11位,由主機每1mS遞增1.

到達最大值0x7FFH時繞回,只有SOF包中有。

SOF包在低速全速時是1mS發一次,

高速則是125uS發一次,注意只有1mS才子等一次,即一個微幀內不遞增,也就是8個SOF才遞增一次。

3.5數據域

數據域范圍從0到1024字節,不同速度不同端點類型長度不一樣,低字節先發

圖片

不同速度不同端點類型包長如下表

控制中斷批量同步
高速64≤1024 x 3512≤1024 x 3
全速8, 16, 32, 64≤648, 16, 32, 64≤1023
低速8≤8

3.6校驗域

校驗區域采用CRC校驗,保護非PID區域,這里為什么不包括PID呢? 因為PID自帶校驗了。

注意:CRC是在bit填充之前生成的,帶CRC的結果之后才是bit填充,接收是先bit填充恢復,然后才是CRC計算。這個很好理解bit填充是硬件層對于信號編碼的處理,所以是最后一步,CRC是協議層的內容肯行在前。

對于CRC錯誤的丟棄該部分數據,一般就是整個包。

Token的CRC

對IN,SETUP和OUT包的ADDR ENDP部分

SOF包的時間戳部分

PING和SPLIT包的ADDR ENDP部分

進行5位CRC校驗。

G(X) = X5+ X **2 ** + 1

數據的CRC

數據包使用16位CRC,對數據域進行校驗

G(X) = X16+ X15+ X **2 ** + 1

四.各種包格式

4.1令牌包

圖片

PID可以是IN,OUT,SETUP,PING

只有主機才能發令牌包,為什么呢? 因為USB架構是主從架構的,只有主機發起通訊,即由令牌包開始,從機才能會響應,否則這么多設備一起啟動發送就會亂套了。哪怕是設備要發送數據也是必須要主機發IN令牌包,從機才能響應。

令牌和SOF包由數據之后三字節的EOP間隔。如果一個數據包解碼為非有效的令牌或SOF沒有有效的EOP終止,則它必須被視為無效包被忽略。

4.2SOF包

全速時1.00 ms ±0.0005 ms 發一次SOF包

高速則125 μs ±0.0625 μs 發一次

SOF包不需要響應。

SOF包由主機或者HUB發送

圖片

圖片

注意高速的微幀內幀序號是不遞增的,只有下一個ms才遞增,可以通過判斷幀號的遞增來同步到該微幀是1ms內的第一個微幀,接下來的是剩余的7個。

4.3數據包

圖片

數據包有以下幾種

DATA0,DATA1,DATA2,MDATA

DATA1 DATA1 DATA0用于高帶寬ISO傳輸,即一個微幀傳3包則按照DATA2-DAT1-DATA0傳輸。

DATA1-DATA0用于傳輸翻轉差錯控制

不同速度的不同傳輸類型包長不一樣進前面的說明。

4.4握手包

握手包用于數據傳輸時報告狀態, 反應數據命令是否成功接收或接受,流控,halt等。

注意不是所有的包都需要握手,比如ISO數據是不需要握手的,因為其注重實時性,不管可靠性,IN和OUT數據之后對方收沒收到不管,好比UDP和TCP的區別。

例如如下的ISO的IN,設備返回數據后主機是不需要回ACK的

圖片

握手包格式如下,只有PID域:

圖片

握手包有如下幾種類型,具體什么情況回什么包,可以參考規格書的第8章的不同傳輸的拓撲圖,比如對于中斷傳輸的IN設備可能回NAK和STALL。

圖片

4.4.1ACK

ACK由數據的接收方回,表示數據被接收且沒有任何錯誤。

4.4.2NAK

NAK用于流控,由設備回,注意主機不能回NAK。

表示數據沒有準備好,或者不能接收數據。

4.4.3STALL

STALL由設備回,表示不能收發數據,或者指定的請求不支持。

主機不能回STALL。

在端點相關的特征Halt之后,再請求端點相關的特征則回STALL。

還有就是控制傳輸時可能回STALL,具體參考規格書中各種傳輸的拓撲圖。

4.4.4NYET

只有高速有,

PING協議中對數據包回NYET表示本包接收,不能繼續接收下一包。

HUB在split傳輸時也可能回NYET表示split船速和未完成或者不能處理split傳輸。

4.4.5ERR

只有高速HUB使用

用于報告全速/低速總線上的錯誤。

規格書8.4.6章節對響應有一個總結,

IN傳輸設備的響應

圖片

IN傳輸主機的響應,可以看到主機不能NAK要不就是ACK要不就是不響應。

圖片

OUT傳輸設備響應

圖片

設備對SETUP的響應

設備不能對SETUP和其數據做STALL和NAK響應,要么就是ACK要么就是不響應。

4.5SPLIT相關令牌包

這部分內容也比較多,后面單獨一篇講。

五.總結

熟悉USB包的格式,是后面查看協議分析儀,示波器抓波形分析等基礎,所以需要了解。USB報的格式沒有什么特殊,和其他協議套路都是一樣的,要從抽象的結構去理解。

審核編輯:湯梓紅

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

    關注

    60

    文章

    7936

    瀏覽量

    264473
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1706

    瀏覽量

    91502
  • 編程
    +關注

    關注

    88

    文章

    3614

    瀏覽量

    93686
  • 開發板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68521
  • 單板計算機
    +關注

    關注

    0

    文章

    74

    瀏覽量

    15627
  • 編譯
    +關注

    關注

    0

    文章

    657

    瀏覽量

    32852
  • 驅動開發
    +關注

    關注

    0

    文章

    130

    瀏覽量

    12072
  • DWC2
    +關注

    關注

    0

    文章

    35

    瀏覽量

    125
收藏 人收藏

    評論

    相關推薦

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-0x01開篇介紹與新思DWC2 USB2
    的頭像 發表于 05-08 18:10 ?4584次閱讀
    基于<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 ?9357次閱讀
    基于<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 ?12.5w次閱讀
    基于<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驅動開發-USB復位詳解

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-USB連接詳解 (qq.com) 一.前
    的頭像 發表于 07-07 08:46 ?3690次閱讀
    基于<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驅動開發-高速設備枚舉為全速設備問題案例分析

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

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

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-設備類驅動框架 (qq.com) 一.前言 從軟件頂層,從數據流的角度來看
    的頭像 發表于 07-16 15:56 ?1307次閱讀
    基于<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驅動開發-發送相關的寄存器DMA寄存器詳解

    本文轉自公眾號,歡迎關注 基于DWC2USB驅動開發-發送相關的寄存器DMA寄存器詳解 (qq.com) 前言 如下寄存器DIEPxxx,
    的頭像 發表于 07-16 16:42 ?1641次閱讀
    基于<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驅動開發-PING協議詳解

    這里先介紹下PING協議的背景和原理,我們不一上來就介紹PING格式和協議,因為只有知其然知其所以然才能加深理解,任何事務都是有其出現的歷史背景的,不會憑空而生,所以理解背后產生的背景和原理很重要。
    的頭像 發表于 07-23 16:18 ?1794次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-PING協議<b class='flag-5'>詳解</b>

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

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

    RK3399平臺上USB控制器和PHY的連接方式和配置說明

    USB2.0 OTG對應的控制器是DWC2USB2.0 OTG使用的是Synopsys 方案,即使用DWC2控制器同時實現Host和Device功能,
    發表于 05-12 17:46

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

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

    無法讓USB主機正常工作是我做錯了什么嗎?

    cdc_ncm[ 1.793050] dwc2 49000000.usb-otg: mapped PA 49000000 to VA 7975fc9b[ 1.793872] ehci_hcd: USB 2.0
    發表于 12-02 06:06

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

    前面我們分析了USB連接和復位的過程, 也知道低速和全速/高速的USB設備分別是上拉DM和DP,主機通過不同的上拉區分接的是低速還是全速/高速設備的。但是怎么區分全速和高速呢? 這就需要額外的一些握手過程,本篇就來詳細介紹該過程。
    的頭像 發表于 07-08 08:40 ?2798次閱讀
    基于<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驅動開發-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd

    本文轉自公眾號系列文章,歡迎關注 基于DWC2USB驅動開發-USB
    的頭像 發表于 07-24 18:04 ?1569次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅動</b><b class='flag-5'>開發</b>-抽絲剝繭再論切換到狀態階段標志DOEPINTn.StsPhseRcvd
    主站蜘蛛池模板: 久久综合色超碰人人| 国产人妻777人伦精品HD| 成人免费在线视频| 公交车轮C关老师| 国产精品久久vr专区| 国产亚洲精品久久久久久禁果TV| 国内精品久久久久影院亚洲| 99热这里有精品| 亚洲精品婷婷无码成人A片在线| 一个人的视频全免费在线观看www| 中文字幕不卡在线高清| 99精品视频一区在线视频免费观看| 成人影片下载网站| 好大的太粗好深BL| 蜜芽手机在线观看| 少妇高潮A片特黄久久精品网| 亚洲福利电影一区二区?| 真实国产精品视频国产网| music radio在线收听| 国产日韩精品一区二区在线观看| 久久99热这里只频精品6| 奇米色偷偷| 亚洲爆乳无码精品AAA片蜜桃| 最近2019中文字幕免费版视频| 成人性生交大片| 精品国产在线手机在线| 欧美视频毛片在线播放| 亚洲XXX午休国产熟女屁| 98久久无码一区人妻A片蜜| 国产精华av午夜在线观看| 玖玖爱在线播放| 婷婷五月久久丁香国产综合| 又黄又猛又爽大片免费| 粉嫩国产14xxxxx0000| 久久大香线蕉综合爱| 日韩人妻少妇一区二区三区| 一抽一出BGM免费3分钟| 岛国大片在线播放高清| 久久这里只精品国产99re66| 婷婷五月久久精品国产亚洲| 538prom精品视频我们不只是|