在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

CDC設備枚舉過程解析

GReq_mcu168 ? 來源:面包板社區(qū) ? 作者:面包板社區(qū) ? 2020-10-09 11:43 ? 次閱讀

本篇筆記將詳述 CDC設備枚舉過程,讓大家對整體的枚舉過程有個概念。

為了更好到理解并分析接下來的通信流程,魚鷹首先介紹標準請求和描述符。

上篇筆記了解了標準請求和描述符是怎么回事,但還不夠,還需要更細節(jié)的東西。

首先從標準請求的8字說起:

第一字節(jié):位圖請求信息。 D7 代表了接下來傳輸?shù)臄?shù)據(jù)是從主機到從機,還是從機到主機的。我們知道枚舉過程使用控制傳輸,有三個階段,如果有數(shù)據(jù)階段,那么這個階段的DATA數(shù)據(jù)是由主機發(fā)出還是由從機發(fā)出,就看這個位的值了。 當然了,因為每一次事務都有令牌包存在,所以IN令牌后的數(shù)據(jù)一定是由從機發(fā)出的,但是標準請求的這個位可以讓從機做好發(fā)送數(shù)據(jù)或者接收數(shù)據(jù)的準備。

D6~D5:代表了請求類型。 請求類型代表本次請求屬于什么類型的請求。目前有三類,標準、類、廠商。標準請求主要有:

除了標準請求,還有類請求,比如 CDC 類,用到了三種類請求: SET_LINE_CODING(0x20) 設置串口波特率、起始位、停止位、流控等信息 GET_LINE_CODING(0x21) 獲取串口波特率、起始位、停止位、流控等信息 SET_CONTROL_LINE_STATE(0x22)用于設置串口的狀態(tài) 廠商請求一般不會用于標準設備,CDC 類就沒有用到(如果需要的話,應該也是能發(fā)出的)。 D4~D0:代表了請求類型。 因為請求的內容可能是面向設備,也可能面向接口、端點,所以這個域確定了本次請求面向的對象,這樣設備可以根據(jù)請求的對象作相應的措施。 第二字節(jié):bRequest:請求代碼,即上面的幾種請求代碼,每個請求都會有請求代碼,代表了具體請求。 第三四字節(jié):wValue:這個雙字節(jié)主要根據(jù)bReuest來確定含義,比如如果是獲取描述符(GET_DESCRIPTOR),而描述符有很多種,比如設備描述符、字符串描述符、配置描述符,那么到底主機要獲取什么描述符?就看這個雙字的高字節(jié)了。如果高字節(jié)為 1,代表獲取設備描述符,高字節(jié)為 2,代表獲取配置描述符。 總之這個值的具體含義需要根據(jù)請求代碼來確定,而每一種請求代碼都會明確規(guī)定wValue具體含義。 第五六字節(jié):wIndex:這個值和上面一樣,也是需要請求代碼來確定含義的。比如在獲取產(chǎn)品序列號字符串時,這個值代表了語言 ID,告訴從機需要返回什么哪種字符串,當值為0x0409時代表英語。 第七八字節(jié):wLenth:這個值代表接下來主機會發(fā)送或者需要接收字節(jié)長度。 一般來說,主機會根據(jù)需要在接下來的數(shù)據(jù)階段獲取或發(fā)送指定長度數(shù)據(jù),主機發(fā)送的數(shù)據(jù)因為是由主機控制的,所以可以很容易確定這個值,但是因為主機并不清楚從機到底有多少數(shù)據(jù)會返回,所以這個值可能會比實際的更大。 比如第一次獲取設備描述符時,因為主機不清楚這個描述符多長,一般會比實際的描述符長度更大,所以如果從機沒有足夠的數(shù)據(jù)返回,那么只要返回從機能返回的最大數(shù)據(jù)即可; 但是如果主機請求返回的數(shù)據(jù)比從機實際的數(shù)據(jù)短,那么從機就按照主機的要求來就行,不必把自己所有的數(shù)據(jù)返回。 以上就是標準請求的內容。設備返回的描述符通用格式比較簡單: 第一字節(jié):描述符總長度(包括本字節(jié)) 第二字節(jié):描述符類型(對應標準請求wValue的高字節(jié)) 其余字節(jié)就代表了這個描述符的具體內容了,每種描述的具體內格式都不相同,需要根據(jù)實際的描述符確定,比如:

bcdUSB 代表 USB 版本號,比如 0x0110,代表 USB 1.1 版本(bcd編碼,即寫成十六進制時的版本號),這樣主機就知道這個設備只支持全速 12 Mbit/s 那么關于關于高速的請求qualifier(wValue 高字節(jié)為6)就不用發(fā)送到該設備了,因為發(fā)送給設備也肯定會被回復 STALL,那么主機就沒必要浪費這個帶寬了。 但是如果你這里寫成 0x0200,那么這個設備可能是全速的,也可能是高速的,那么主機就會發(fā)送請求來詢問是否支持高速,如果設備不支持,回復的描述符設置為0即可。 接下來的三個字節(jié)根據(jù)設備屬于什么類別來確定,比如 CDC 類,這三個值分別為 0x02 ,0x00,0x00。 bMaxPacketSize0 確定了端點0的數(shù)據(jù)包大小,主機可以據(jù)此知道設備的傳輸能力,進而控制傳輸數(shù)據(jù)包的大小,不然主機一次發(fā)送的數(shù)據(jù)包太大,那么從機可能無法正確接收。 idVendor 由 USB-IF 分配,這個值確定了這個設備屬于哪個廠家的產(chǎn)品。比如 0xC251,代表了KEIL,只要主機看到了這個代號,就知道這個設備由哪個廠家生產(chǎn)的了,因為這個在USB-IF中掛了號,大家都可以從網(wǎng)上查到。 和必須購買的 idVendor 不同卻類似的是,iProduct 是由廠家自己定義的,可以根據(jù)這個來確定這個設備屬于哪個產(chǎn)品。 這個USB設備更新到哪一個版本了?通過bcdDevice 即可確定,也是bcd 編碼。 iManufacture 代表廠商的字符串序號,一般都是 1,這樣當主機需要獲取廠商的字符串,只要在wValue 的低字節(jié)為設置為 1,那么從機就知道該發(fā)送什么字符串給主機了。 iProject 代表產(chǎn)品字符串序號,一般為2。 iSerialNumber 代表產(chǎn)品序列字符串序號,一般為3。 為什么從 1 開始編號,而不是從 0 開始呢,這是因為如果設備沒有這個字符串的話,可以設置該值為 0,這樣主機就知道沒有這個字符串,也就不會主動獲取這個字符串。 當然了,即使你告訴了主機有這個字符串存在,主機也是按照需求來獲取的,不一定會把所有的字符串描述符都獲取回來。 iNumConfigurations 代表了設備有多少種配置,前面說過,設備可能會在不同時刻的功能表現(xiàn)不一樣,那么可以通過該值確定這個設備有多少種配置,一般而言這個值是1,即只有一種配置。畢竟復合設備可以同時滿足多功能的要求,沒必要使用多種配置來達到多種功能的要求。 以上就是設備描述符的具體含義,其他描述符比如配置描述符、接口描述符、端點描述符等就自行看魚鷹給的資料理解即可,只要找到對應描述符的格式說明,分析代碼中的描述符數(shù)據(jù)也不是那么難的事情。 接下來魚鷹介紹枚舉總體流程。 主機在對設備復位后,首先會請求獲取設備描述符。這個描述符一般為18個字節(jié),但是主機一開始并不知道這個描述符多大(雖然一般是18,但萬一不是呢),所以一般主機會以更大的請求長度來獲取,而從機根據(jù)實際長度18字節(jié)返回即可。 現(xiàn)在我們從多個維度看看這次交互的數(shù)據(jù)情況: 從傳輸事務的角度看:

從包的角度看:

從DATA內容看: 主機發(fā)送數(shù)據(jù):80 06 00 01 00 00 40 00

從機回復數(shù)據(jù):

從D+、D-數(shù)據(jù)線電平變化的角度: 主機發(fā)送(建立階段):

從機回復(數(shù)據(jù)階段):

狀態(tài)階段:

現(xiàn)在把整個枚舉過程大概圖解一遍(其他請求交互的具體情況請看魚鷹提供的資料):

數(shù)據(jù)流截?。~鷹提供的《CDC設備完整數(shù)據(jù)通信.txt》):

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

    關注

    2

    文章

    4602

    瀏覽量

    71286
  • CDC
    CDC
    +關注

    關注

    0

    文章

    57

    瀏覽量

    18044

原文標題:【圖解USB】USB 之CDC 設備枚舉過程詳解

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32 HID和CDC組合設備無法枚舉成功是哪里出了問題?

    想用STM32F103C8T6最小系統(tǒng)板試驗HID和CDC組合設備,單獨的HID和CDC都能枚舉成功,但是參考網(wǎng)上多篇大佬的組合設備的教程,
    發(fā)表于 03-10 07:27

    使用TUSB1046插入USB3.0的U盤,發(fā)現(xiàn)有不識別的現(xiàn)象,為什么?

    插入沒反應后續(xù)再怎么拔插都沒反應,如果開機后第一次插入可以正常識別,后續(xù)拔插都會比較正常。 經(jīng)過反復測試發(fā)現(xiàn)如果USB的電源一直是打開狀態(tài)就不會出現(xiàn)這個問題。 感覺像是設備插入枚舉過程出現(xiàn)問題,我
    發(fā)表于 12-05 07:15

    Java 枚舉與策略模式、函數(shù)式接口的結合:實現(xiàn)高內聚低耦合的設計

    作者:京東物流 楊唯一 一、Java 枚舉類 Java 枚舉是一個特殊的類,一般表示一組常量,比如一年的 4 個季節(jié),一年的 12 個月份,一個星期的 7 天,方向有東南西北等。 我們在業(yè)務需求開發(fā)
    的頭像 發(fā)表于 11-21 14:06 ?464次閱讀

    cdc減振器控制原理是什么

    CDC(Continuous Damping Control,連續(xù)阻尼控制)是一種先進的車輛懸掛系統(tǒng)技術,它能夠根據(jù)車輛的行駛條件實時調整懸掛的阻尼力,以提供最佳的乘坐舒適性和操控穩(wěn)定性。CDC系統(tǒng)
    的頭像 發(fā)表于 09-18 15:16 ?1369次閱讀

    在GaN半橋電路中實現(xiàn)自舉過充預防

    電子發(fā)燒友網(wǎng)站提供《在GaN半橋電路中實現(xiàn)自舉過充預防.pdf》資料免費下載
    發(fā)表于 08-29 09:42 ?0次下載
    在GaN半橋電路中實現(xiàn)自<b class='flag-5'>舉過</b>充預防

    USBX在F407上創(chuàng)建CDC不能正常使用是怎么回事?

    我使用CubeMX創(chuàng)建了一個ThreadX+USBX的一個程序框架,然后移植了ST在F469上的DEVIEC_CDC_ACM的例程,但是USB無法正常枚舉。用邏輯分析儀抓了一下,在GET_Descriptor后并沒有正確的發(fā)送VID,PID一類的信息,而是不停的發(fā)送如圖所
    發(fā)表于 07-23 08:27

    USB復合設備MSC+CDC,MSC異常影響CDC收發(fā)怎么解決?

    MSC讀寫物理存儲設備的時候,如果返回一次錯誤(錯誤碼:-1),不知道為什么會觸發(fā)一個枚舉中斷(USB_OTG_GINTSTS_ENUMDNE0),會調用到reset_callback,也會把CDC也會reset,導致
    發(fā)表于 07-23 06:23

    ESP32S2使用單根USB線創(chuàng)建MSC+CDC與上位機通信,CDC異常的原因?

    斷開。 附件內有用WIRESHARK 4.2.0抓取到的數(shù)據(jù)包log可供參考,以下是對log的一些解析: 2.46.2是CDC設備 2.46.3是MSC設備 2.41.2是串口打印
    發(fā)表于 06-06 07:29

    解析經(jīng)典藍牙設備連接過程

    應用中,藍牙設備發(fā)現(xiàn)、連接、斷開等使用場景較為常見,其中設備連接是至關重要的一環(huán),它涵蓋了設備之間建立連接的整個過程。本文將對經(jīng)典藍牙設備
    的頭像 發(fā)表于 06-05 09:11 ?3296次閱讀
    <b class='flag-5'>解析</b>經(jīng)典藍牙<b class='flag-5'>設備</b>連接<b class='flag-5'>過程</b>

    STM32 USB Host LibraryV3.2.2枚舉死機的原因?

    STM32 USB Host LibraryV3.2.2庫剛移植的USB主機庫,在使用的時候發(fā)現(xiàn),反復拔插U盤出現(xiàn)死機現(xiàn)象甚至不識別,懷疑是枚舉過程中出了問題。
    發(fā)表于 05-10 07:59

    使用nucleo_f767做USB CDC的測試,bus hound抓不到USB的包怎么解決?

    現(xiàn)在使用nucleo_f767做USB CDC的測試。驅動一直有問題,所以想通過bus hound查看一下枚舉過程是不是有問題。但bus hound一直抓不到任何數(shù)據(jù)。在 插入usb的時候,沒有數(shù)據(jù)產(chǎn)生。請問各位有什么好辦法嗎?謝謝。
    發(fā)表于 04-30 07:00

    stm32f407 USB外接HUB怎么枚舉HUB和其他USB設備

    stm32f407 的USB接口 我想外接一個HUB 來支持更多的USB設備,但是這個HUB 該怎么枚舉,還有就是HUB下的USB設備怎么枚舉,有做過的大神嗎。求指導,求demo。小弟
    發(fā)表于 04-29 08:13

    stm32f103 usb枚舉問題求解

    移植了一個USB HID設備,發(fā)現(xiàn)必須初始化usart1,這樣usb hid設備才能枚舉,否則枚舉失敗,沒有發(fā)現(xiàn)硬件上有聯(lián)系???
    發(fā)表于 04-26 07:57

    用STM32f205+PHY做一個高速usb的Device設備,USB批量傳輸設置兩個端點為OUT、IN后異常怎么解決?

    各位大神,小弟現(xiàn)在正在用STM32f205+PHY做一個高速usb的Device設備,需要使用兩個端點,分別設置:端點2為OUT、端點6為IN的BULK模式。 正常邏輯應該是:枚舉過程成功后,收到
    發(fā)表于 04-24 07:41

    STM32做3個CDC復合設備遇到的地址問題怎么解決?

    組合了三個CDC設備: 使用EP1的IN、OUT做CDC1的數(shù)據(jù)接口端點,EP4的IN做控制接口端點。 關聯(lián)串口1。 使用EP2的IN、OUT做CDC2的數(shù)據(jù)接口端點,EP5的IN做控
    發(fā)表于 04-18 08:29
    主站蜘蛛池模板: 青草久草视频 | 天天干天天狠 | 色综合久久网女同蕾丝边 | 免费国产黄网站在线观看视频 | 一色屋精品免费视频 视频 一色屋免费视频 | 天堂网在线资源www最新版 | 123综合网在线 | 免费高清成人啪啪网站 | 成人免费国产gav视频在线 | 一级毛片aa | 在线亚洲综合 | 国产精品久久久久久久9999 | 久久99精品国产麻豆宅宅 | 黄视频网站在线观看 | 国产a一级毛片午夜剧场14 | 68日本 xxxxxxxxx | 久久国产午夜精品理论篇小说 | 国产人成精品香港三级古代 | 国产女乱淫真高清免费视频 | 2018天天干天天操 | 91拍拍在线观看 | 久久精品网站免费观看 | 1024你懂的国产精品 | 久久久久久久久久久9精品视频 | 国产男女交性视频播放免费bd | 天天操综合视频 | 九色九色九色在线综合888 | 久久久xxx| 国产三级精品三级在线观看 | 一级aaaaaa片毛片在线播放 | 亚洲国产精品久久婷婷 | 日本特黄在线观看免费 | 老师我好爽再深一点好大 | 亚洲四虎| 免费国产在线视频 | 免看一级a毛片一片成人不卡 | 最近2018中文字幕2019高清 | 视色4se成人午夜精品 | 全免费a级毛片免费看不卡 全日本爽视频在线 | 美女和帅哥在床上玩的不可描述 | 免费美剧在线观看 |