日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USB 之一 USB2.0 规范详解 第一部分

發(fā)布時(shí)間:2024/10/14 编程问答 101 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USB 之一 USB2.0 规范详解 第一部分 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

注意

  • 對于物理特性僅做簡單說明
  • 主要是針對 USB 2.0 規(guī)范的前八章。后續(xù)見 第二部分

關(guān)于USB 2.0

??在USB官方網(wǎng)站( http://www.usb.org/ )包含了我們必需的所有的USB協(xié)議規(guī)范。目前官網(wǎng)最新規(guī)范為USB 3.2。默認(rèn)打開官網(wǎng)的 Document 菜單,顯示的就是 USB 3.2 的相關(guān)規(guī)范文檔,在 Document 菜單下有USB2.0相關(guān)規(guī)范。USB 2.0 的下載頁面為http://www.usb.org/developers/docs/usb20_docs/。

??其中 USB 規(guī)范定義了各種 USB Class,具體看見http://www.usb.org/developers/docs/devclass_docs/。該頁面下面就是每個(gè)類對應(yīng)的文檔。

簡介

??USB(Universal Serial Bus) 是一種支持熱插拔的高速串行傳輸總線,它使用 差分信號 來傳輸數(shù)據(jù)。在 USB 1.0和 USB 1.1 版本中,只支持 1.5Mb/s 的低速(low-speed)模式和 12Mb/s 的全速(full-speed)模式,在 USB 2.0 中,又加入了480Mb/s 的高速模式,USB 3.0(super speed),傳輸速率最大5Gbps。USB 2.0 被設(shè)計(jì)成為向下兼容的模式,當(dāng)有全速(USB 1.1)或者低速(USB 1.0)設(shè)備連接到高速(USB 2.0)主機(jī)時(shí),主機(jī)可以通過分離傳輸來支持它們。一條USB 總線上,可達(dá)到的最高傳輸速度等級由該總線上最慢的“設(shè)備”決定。

由于USB是主從模式的結(jié)構(gòu),設(shè)備與設(shè)備之間、主機(jī)與主機(jī)之間不能互連,為解決這個(gè)問題,擴(kuò)大USB的應(yīng)用范圍,出現(xiàn)了USB規(guī)范的擴(kuò)展部分USB OTG(ON The Go)。USB OTG 同一個(gè)設(shè)備,在不同的場合下可行在主機(jī)和從機(jī)之間切換。

??以下部分主要根據(jù) USB 2.0 規(guī)范的第四章,USB 體系包括 USB host(主機(jī))USB device(設(shè)備) 以及 物理連接(USB interconnect) 三個(gè)部分。其中,設(shè)備(USB device) 又分為 USB functionUSB Hub

  • USB host: 任何USB系統(tǒng)中只有一個(gè)主機(jī)。 主機(jī)系統(tǒng)的USB接口被稱為主機(jī)控制器。 主機(jī)控制器可以以硬件,固件或軟件的組合來實(shí)現(xiàn)。 根集線器集成在主機(jī)系統(tǒng)內(nèi)以提供一個(gè)或多個(gè)連接點(diǎn)。
  • USB device: 可以分為
    • USB Hub: USB HUB提供了一種低成本、低復(fù)雜度的USB接口擴(kuò)展方法。HUB的上行PORT面向HOST,下行PORT面向設(shè)備(HUB或功能設(shè)備)。在下行PORT上,HUB提供了設(shè)備連接檢測和設(shè)備移除檢測的能力,并給各下行PORT供電。HUB可以單獨(dú)使能各下行PORT。不同PORT可以工作在不同的速度等級(高速/全速/低速)。

(1)一個(gè) USB HOST 最多可以同時(shí)支持128 個(gè)地址,地址0 作為默認(rèn)地址,只在設(shè)備枚舉期間臨時(shí)使用,而不能被分配給任何一個(gè)設(shè)備,因此一個(gè)USB HOST 最多可以同時(shí)支持127 個(gè)地址,如果一個(gè)設(shè)備只占用一個(gè)地址,那么可最多支持127 個(gè)USB 設(shè)備。在實(shí)際的USB 體系中,如果要連接127 個(gè)USB設(shè)備,必須要使用USB HUB,而USB HUB 也是需要占用地址的,所以實(shí)際可支持的USB 功能設(shè)備的數(shù)量將小于127。
(2)ROOT HUB 是一個(gè)特殊的USB HUB,它集成在主機(jī)控制器里,不占用地址。ROOT HUB 不但實(shí)現(xiàn)了普通USB HUB 的功能,還包括其他一些功能。
(3)“復(fù)合設(shè)備(Compound Device)”可以占用多個(gè)地址。所謂復(fù)合設(shè)備其實(shí)就是把多個(gè)功能設(shè)備通過內(nèi)置的USB HUB 組合而成的設(shè)備,比如帶錄音話筒的USB 攝像頭等。

  • USB function: 能夠通過總線傳輸或接收數(shù)據(jù)或控制信息的設(shè)備,在USB2.0標(biāo)準(zhǔn)中,別成為Class,規(guī)范中有詳細(xì)的章節(jié)進(jìn)行定義。主要有以下三類:
    • A human interface device such as a mouse, keyboard, tablet, or game controller
    • An imaging device such as a scanner, printer, or camera
    • A mass storage device such as a CD-ROM drive, floppy drive, or DVD drive
  • USB interconnect: USB設(shè)備連接到主機(jī)并與之通信的方式。主要由以下三部分:
    • Bus Topology: USB上的設(shè)備通過分層的星形拓?fù)湮锢磉B接到主機(jī),如下圖所示。 USB連接點(diǎn)由稱為集線器的特殊類別的USB設(shè)備提供。 集線器提供的附加連接點(diǎn)稱為端口。 主機(jī)包括稱為根集線器的嵌入式集線器。 主機(jī)通過根集線器提供一個(gè)或多個(gè)連接點(diǎn)。 為主機(jī)提供附加功能的USB設(shè)備稱為功能。 為了防止循環(huán)附件,USB層的星形拓?fù)浣Y(jié)構(gòu)上采用了分層排序。USB設(shè)備和主機(jī)之間的連接模型


以HOST-ROOT HUB為起點(diǎn),最多支持7 層(Tier),也就是說任何一個(gè)
USB 系統(tǒng)中最多可以允許5個(gè)USB HUB 級聯(lián)。一個(gè)復(fù)合設(shè)備(Compound Device)將同時(shí)占據(jù)兩層或更多的層。

  • Inter-layer Relationships: 就功能堆棧而言,是系統(tǒng)中每層執(zhí)行的USB任務(wù)。
  • Data Flow Models: 數(shù)據(jù)在生產(chǎn)者和消費(fèi)者之間通過USB在系統(tǒng)中移動(dòng)的方式。

管道(Pipe)是主機(jī)和設(shè)備端點(diǎn)之間數(shù)據(jù)傳輸?shù)哪P?/strong>,共有兩種類型的管道:無格式的流管道(Stream Pipe)有格式的信息管道(Message Pipe) 。任何USB 設(shè)備一旦上電就存在一個(gè)信息管道,即默認(rèn)的控制管道,USB 主機(jī)通過該管道來獲取設(shè)備的描述、配置、狀態(tài),并對設(shè)備進(jìn)行配置。

  • USB Schedule: USB 提供共享互連。 為了支持同步數(shù)據(jù)傳輸并消除仲裁開銷,計(jì)劃訪問互連。

USB電器特性

??該部分主要針對USB 2.0規(guī)范的第六章和第七章。在USB 2.0系統(tǒng)中要求USB傳輸線使用屏蔽雙絞線。USB 支持“總線供電”和“自供電”兩種供電模式。在總線供電模式下,設(shè)備最多可以獲得500mA 的電流。一條USB傳輸線分別由地線、電源線、D+ 和 D- 四條線構(gòu)成,D+ 和 D- 是差分輸入線。它使用的是 3.3V 的電壓(與 CMOS 的 5V 電平不同),而電源線和地線可向設(shè)備提供 5V 電壓,最大電流為 500mA (可以在編程中設(shè)置)。

在 USB2.0 規(guī)范中,定義了以下一些電平信號:

  • 差分信號1:D+>2.8V,D-<0.3V;
  • 差分信號0:D->2.8V,D+<0.3V。
  • J 狀態(tài)和 K 狀態(tài)
    ??低速下:D+ 為“0”,D- 為“1”是為“J”狀態(tài),“K”狀態(tài)相反;
    ??全速下:D+ 為“1”,D- 為“0”是為“J”狀態(tài),“K”狀態(tài)相反;
    ??高速同全速。
  • SE0 狀態(tài):D+為“0”,D- 為“0”
  • IDLE 狀態(tài)
    ??低速下空閑狀態(tài)為“K”狀態(tài);
    ??全速下空閑狀態(tài)為“J”狀態(tài);
    ??高速下空閑狀態(tài)為“SE0”狀態(tài)。

針對低速 / 全速模式,有以下幾個(gè)重要信號:

  • Reset 信號: 主機(jī)在要和設(shè)備通信之前會(huì)發(fā)送Reset信號來把設(shè)備配置到默認(rèn)的未配置狀態(tài)。即 SE0 狀態(tài)保持10ms。
  • Resume 信號: 20ms 的 K 狀態(tài) + 低速 EOP

(1)主機(jī)在掛起設(shè)備后可通過翻轉(zhuǎn)數(shù)據(jù)線上的極性并保持20ms來喚醒設(shè)備,并以低速EOP信號結(jié)尾。
(2)帶遠(yuǎn)程喚醒功能的設(shè)備還可自己發(fā)起該喚醒信號;前提是設(shè)備已進(jìn)入idle狀態(tài)至少5ms,然后發(fā)出喚醒K信號,維持1ms到15ms并由主機(jī)在1ms內(nèi)接管來繼續(xù)驅(qū)動(dòng)喚醒信號

  • Suspend 信號: 3ms 以上的 J 狀態(tài)
  • SOP 信號: 從IDLE狀態(tài)切換到 K 狀態(tài)
  • EOP 信號: 持續(xù)2位時(shí)間的SE0信號,后跟隨1位時(shí)間的J狀態(tài)

  • SYNC 信號: 3個(gè) K、J 狀態(tài)切換,后跟隨2位時(shí)間的 K 狀態(tài)(看到的波形變化是總線上發(fā)送0000 0001經(jīng)過 NRZI 編碼后的波形)

規(guī)范中給出的各信號電平如下圖所示:

規(guī)范中給出的DC 電氣特性如下圖所示:

USB 通信協(xié)議

??以下部分主要根據(jù) USB 2.0 規(guī)范的第八章。數(shù)據(jù)在USB線里傳送是由低位到高位發(fā)送的。USB采用 NRZI(非歸零編碼) 對發(fā)送的數(shù)據(jù)包進(jìn)行編碼。即:輸入數(shù)據(jù)0,編碼成“電平翻轉(zhuǎn)”;輸入數(shù)據(jù)1,編碼成“電平不變”。
??USB采用不歸零取反來傳輸數(shù)據(jù),當(dāng)傳輸線上的差分?jǐn)?shù)據(jù)輸入0時(shí)就取反,輸入1時(shí)就保持原值,為了確保信號發(fā)送的準(zhǔn)確性,當(dāng)在USB總線上發(fā)送一個(gè)包時(shí),傳輸設(shè)備就要進(jìn)行位插入操作(即在數(shù)據(jù)流中每連續(xù) 6 個(gè) 1 后就插入一個(gè)0) ,從而強(qiáng)迫 NRZI 碼發(fā)生變化。接收方解碼 NRZI 碼流,然后識(shí)別出填充位,并丟棄它們。這些是由專門硬件處理的。

USB 數(shù)據(jù)格式

??USB 數(shù)據(jù)是由二進(jìn)制數(shù)字串構(gòu)成的,首先 數(shù)字串組成域(有七種)域再組成包包再組成事務(wù)(IN、OUT、SETUP)事務(wù)最后組成傳輸(中斷傳輸、并行傳輸、批量傳輸和控制傳輸) 。下面介紹一下域、包和事務(wù)。
??USB協(xié)議規(guī)定了四種傳輸(transfer)類型:批量傳輸、同步傳輸、中斷傳輸和控制傳輸。其中,批量傳輸、同步傳輸和中斷傳輸每傳輸一次數(shù)據(jù)都是一個(gè)事務(wù),控制傳輸包括三個(gè)過程,建立過程和狀態(tài)過程分別是一個(gè)事務(wù),數(shù)據(jù)過程則可能包含多個(gè)事務(wù)。
首先介紹幾個(gè)關(guān)鍵字:

  • SOF: Start-of-(micro)Frame,是一個(gè)特殊的包,開始幀(SOF)數(shù)據(jù)包由主機(jī)以全速總線每1.00毫秒±0.0005毫秒和高速總線125微秒±0.0625微秒的標(biāo)稱速率發(fā)出。 SOF數(shù)據(jù)包由一個(gè)PID指示數(shù)據(jù)包類型,后面跟著一個(gè)11位幀數(shù)字段,如下圖所示:

    ??SOF令牌包括僅用于令牌的事務(wù)處理,其以對應(yīng)于每個(gè)幀的開始的精確時(shí)間間隔來分配SOF標(biāo)記和伴隨幀號。 所有高速和全速功能(包括集線器)都會(huì)收到SOF數(shù)據(jù)包。 SOF令牌不會(huì)導(dǎo)致任何接收函數(shù)生成返回?cái)?shù)據(jù)包; 因此,SOF交付給任何給定的功能不能得到保證。
  • EOF: End-of-(micro)Frame,是一種電平狀態(tài)
  • SOP: Start-of-Packet,定義為從IDLE狀態(tài)切換到K狀態(tài)的電平變化
  • EOP: End-of-Packet,定義為持續(xù)2位時(shí)間的 SE0 信號,后跟隨1位時(shí)間的J狀態(tài)的電平變化
  • 端點(diǎn)(Endpoint): 位于USB設(shè)備或主機(jī)上的一個(gè)數(shù)據(jù)緩沖區(qū),是USB設(shè)備中可以進(jìn)行數(shù)據(jù)收發(fā)的最小單元,支持單向或者雙向的數(shù)據(jù)傳輸,用來存放和發(fā)送USB的各種數(shù)據(jù),每一個(gè)端點(diǎn)都有惟一的確定地址,有不同的傳輸特性(如輸入端點(diǎn)、輸出端點(diǎn)、配置端點(diǎn)、批量傳輸端點(diǎn))。設(shè)備支持端點(diǎn)的數(shù)量是有限制的,除默認(rèn)端點(diǎn)外低速設(shè)備最多支持2組端點(diǎn)(2 個(gè)輸入,2 個(gè)輸出),高速和全速設(shè)備最多支持15組端點(diǎn)。按照USB協(xié)議棧的層次劃分:
    ??一個(gè) Host 可能有一個(gè)或者多個(gè) Device
    ??一個(gè) Device 可能有一個(gè)或者多個(gè) Interface
    ??一個(gè) Interface 可能有一個(gè)或者多個(gè) Endpoint
  • 幀: 時(shí)間概念,在USB中,高速USB 總線的幀周期為 125us,全速以及低速 USB 總線的幀周期為 1ms,它是一個(gè)獨(dú)立的單元,包含了一系列總線動(dòng)作,USB將1幀分為好幾份,每一份是一個(gè)USB的傳輸動(dòng)作。
    ??幀的起始由一個(gè)特定的包(SOF 包)表示,幀尾為 EOF。EOF不是一個(gè)包,而是一種電平狀態(tài),EOF期間不允許有數(shù)據(jù)傳輸。 具體見上一節(jié)的信號電平。

注意:雖然高速USB總線和全速/低速USB總線的幀周期不一樣,但是SOF包中幀編號的增加速度是一樣的,因?yàn)樵诟咚賃SB系統(tǒng)中,SOF包中幀編號實(shí)際上取得是計(jì)數(shù)器的高11位,最低三位作為微幀編號沒有使用,因此其幀編號的增加周期也為 1mS。

域(Field)

??域一個(gè)包被分為不同域,域是USB數(shù)據(jù)最小的單位,由若干位組成(多少位由具體的域決定)。根據(jù)不同類型的包,所包含的域是不一樣的。但都要 以同步域SYNC開始緊跟一個(gè)包標(biāo)識(shí)符PID ,最終 以包結(jié)束符EOP 來結(jié)束這個(gè)包。

  • 同步域(SYNC): 所有的USB包都由SYNC開始,高速包的SYNC寬度為32bit,全速/低速包的SYNC段度為8bit。實(shí)際接收到的SYNC長度由于USB HUB的關(guān)系,可能會(huì)小于該值。八位的值固定為0000 0001,用于本地時(shí)鐘與輸入同步。
  • 標(biāo)識(shí)域(PID): PID是用來標(biāo)識(shí)一個(gè)包的類型的。它共有8位,只使用4(PID0 ~ PID3),另外4位是PID0 ~ PID3的取反,用來校驗(yàn)PID。PID規(guī)定了四類包:令牌包數(shù)據(jù)包握手包特殊包。同類的包又各分為具體的四種包。

僅在幀首傳輸一次 SOF 包

  • 地址域(ADDR): 地址共占11位,其中低7位是設(shè)備地址,高4位是端點(diǎn)地址。
    • 地址域: 七位地址,代表了設(shè)備在主機(jī)上的地址,地址 000 0000 被命名為零地址,是任何設(shè)備第一次連接到主機(jī)時(shí),在被主機(jī)配置、枚舉前的默認(rèn)地址,由此可以知道為什么一個(gè)USB主機(jī)只能接127個(gè)設(shè)備的原因。
    • 端點(diǎn)域(ENDP): 四位,由此可知一個(gè)USB設(shè)備端點(diǎn)數(shù)量最大為16個(gè)。
  • 幀號: 占11位,主機(jī)每發(fā)出一個(gè)幀,幀號都會(huì)自加1,當(dāng)幀號達(dá)到 0x7FF 時(shí),將歸零重新開始計(jì)數(shù)。幀號域最大容量0x800,對于同步傳輸有重要意義。
  • 數(shù)據(jù): 根據(jù)傳輸類型的不同,數(shù)據(jù)域的數(shù)據(jù)長度從0到1024字節(jié)不等。
  • CRC: 對令牌包和數(shù)據(jù)包中非PID域進(jìn)行校驗(yàn)的一種方法,CRC校驗(yàn)在通訊中應(yīng)用很泛,是一種很好的校驗(yàn)方法,CRC碼的除法是模2運(yùn)算,不同于10進(jìn)制中的除法。
  • Token CRCs
    ??對于令牌(Token)使用5位CRC。涵蓋了IN,SETUP和OUT令牌的ADDR和ENDP字段 或 SOF令牌的時(shí)間戳字段。 PING和SPLIT特殊令牌也包括一個(gè)五位CRC字段。生成多項(xiàng)式如下:‘G(X)=X5+X2+1`G(X) = X^5 + X^2 + 1G(X)=X5+X2+1
    ??表示這個(gè)多項(xiàng)式的二進(jìn)制位模式是00101B。 如果所有令牌比特都沒有錯(cuò)誤地被接收到,則接收器處的五比特殘差將是01100B。
  • Data CRCs
    ??數(shù)據(jù)CRC是應(yīng)用在數(shù)據(jù)包的數(shù)據(jù)字段上的16位多項(xiàng)式。 生成多項(xiàng)式是:G(X)=X16+X15+X2+1G(X) = X^{16} + X^{15} + X^2 + 1G(X)=X16+X15+X2+1
    ??表示這個(gè)多項(xiàng)式的二進(jìn)制位模式是1000000000000101B。 如果接收到的所有數(shù)據(jù)和CRC位都沒有錯(cuò)誤,則16位殘差將為1000000000001101B。

包(Packet)

??包(Packet)是USB系統(tǒng)中信息傳輸?shù)幕締卧?#xff0c;所有數(shù)據(jù)都是經(jīng)過打包后在總線上傳輸?shù)摹?br /> ??包是USB總線上數(shù)據(jù)傳輸?shù)淖钚挝?#xff0c;不能被打斷或干擾,否則會(huì)引發(fā)錯(cuò)誤。若干個(gè)數(shù)據(jù)包組成一次事務(wù)傳輸,一次事務(wù)傳輸也不能打斷,屬于一次事務(wù)傳輸?shù)膸讉€(gè)包必須連續(xù),不能跨幀完成。一次傳輸由一次到多次事務(wù)傳輸構(gòu)成,可以跨幀完成。
??由域構(gòu)成的包有四種類型,分別是令牌包、數(shù)據(jù)包、握手包和特殊包,前面三種是重要的包,不同包的域結(jié)構(gòu)不同,介紹如下:

  • 令牌包: 分為輸入包、輸出包、設(shè)置包和幀起始包(注意這里的輸入包是用于設(shè)置輸入命令的,輸出包是用來設(shè)置輸出命令的,而不是放數(shù)據(jù)的)其中輸入包、輸出包和設(shè)置包的格式都是一樣的:
    SYNC + PID + (ADDR + ENDP) + CRC5(五位的校驗(yàn)碼)

    幀起始包的格式:
    SYNC + PID + 11位FRAM + CRC5(五位的校驗(yàn)碼)
    • 輸出(OUT)令牌包:用來通知設(shè)備將要輸出一個(gè)數(shù)據(jù)包
    • 輸入(IN)令牌包:用來通知設(shè)備返回一個(gè)數(shù)據(jù)包
    • 建立(SETUP)令牌包:只用在控制傳輸中,和輸出令牌包作用一樣,也是通知設(shè)備將要輸出一個(gè)數(shù)據(jù)包。
    • 幀起始包:在每幀(或微幀)開始時(shí)發(fā)送,以廣播的形式發(fā)送,所有USB全速設(shè)備和高速設(shè)備都可以接收到SOF包。
  • 數(shù)據(jù)包: 分為DATA0包和DATA1包。當(dāng)USB發(fā)送數(shù)據(jù)的時(shí)候,如果一次發(fā)送的數(shù)據(jù)長度大于相應(yīng)端點(diǎn)的容量時(shí),就需要把數(shù)據(jù)包分為好幾個(gè)包,分批發(fā)送,DATA0 包和DATA1 包交替發(fā)送,即如果第一個(gè)數(shù)據(jù)包是DATA0,那第二個(gè)數(shù)據(jù)包就是DATA1。但也有例外情況,在同步傳輸中(四類傳輸類型中之一),所有的數(shù)據(jù)包都是為 DATA0,格式如下:
    SYNC + PID + 0~1024字節(jié) + CRC16

低速設(shè)備允許的最大數(shù)據(jù)有效載荷大小為8個(gè)字節(jié)。 全速設(shè)備的最大數(shù)據(jù)有效載荷大小為1023.高速設(shè)備的最大數(shù)據(jù)有效載荷大小為1024個(gè)字節(jié)。

  • 握手包: 握手包包括 ACK、NAK、STALL以及NYET 四種,其中
  • ACK 表示肯定的應(yīng)答,成功的數(shù)據(jù)傳輸。對于IN事務(wù),它將由host發(fā)出;對于OUT、SETUP和PING事務(wù),它將由device發(fā)出。
  • NAK 表示否定的應(yīng)答,失敗的數(shù)據(jù)傳輸,要求重新傳輸。在數(shù)據(jù)階段,對于IN事務(wù),它將由device發(fā)出;在握手階段,對于OUT和PING事務(wù),它也將由device發(fā)出;host從不發(fā)送NAK包。
  • STALL表示功能錯(cuò)誤或端點(diǎn)被設(shè)置了STALL屬性。
  • NYET表示尚未準(zhǔn)備好,要求等待。結(jié)構(gòu)最為簡單的包,格式如下:SYNC + PID

事務(wù)(Transaction)

?? 在USB上數(shù)據(jù)信息的一次接收或發(fā)送的處理過程稱為事務(wù)處理(Transaction),分別有IN、OUT和SETUP三大事務(wù)。一個(gè)事務(wù)由一系統(tǒng)packet組成,具體由哪些packet組成,它取決于具體的事務(wù)。可能由如下包組成:

  • 一個(gè)token packet
  • 可選的data pcket
  • 可選的handshake packet
  • 可選的special packet

事務(wù)的三種類型如下(以下按三個(gè)階段來說明一個(gè)事務(wù)):

IN事務(wù)

?? 表示USB主機(jī)從總線上的某個(gè)USB設(shè)備接收一個(gè)數(shù)據(jù)包的過程。
令牌包階段——主機(jī)發(fā)送一個(gè)PID為IN的輸入包給設(shè)備,通知設(shè)備要往主機(jī)發(fā)送數(shù)據(jù);
數(shù)據(jù)包階段——設(shè)備根據(jù)情況會(huì)作出三種反應(yīng)(要注意:數(shù)據(jù)包階段也不總是傳送數(shù)據(jù)的,根據(jù)傳輸情況還會(huì)提前進(jìn)入握手包階段)。

  • 【正常】的輸入事務(wù)處理:設(shè)備往主機(jī)里面發(fā)出數(shù)據(jù)包(DATA0與DATA1交替)
  • 【設(shè)備忙】時(shí)的輸入事務(wù)處理:無法往主機(jī)發(fā)出數(shù)據(jù)包就發(fā)送NAK無效包,IN事務(wù)提前結(jié)束,到了下一個(gè)IN事務(wù)才繼續(xù);
  • 【設(shè)備出錯(cuò)】時(shí)的輸入事務(wù)處理:發(fā)送錯(cuò)誤包STALL包,事務(wù)也就提前結(jié)束了,總線進(jìn)入空閑狀態(tài)。

    握手包階段——主機(jī)正確接收到數(shù)據(jù)之后就會(huì)向設(shè)備發(fā)送ACK包。

OUT 事務(wù)

??輸出事務(wù)處理:表示USB主機(jī)把一個(gè)數(shù)據(jù)包輸出到總線上的某個(gè)USB設(shè)備接收的過程。
令牌包階段——主機(jī)發(fā)送一個(gè)PID為OUT的輸出包給設(shè)備,通知設(shè)備要接收數(shù)據(jù);
數(shù)據(jù)包階段——比較簡單,就是主機(jī)會(huì)往設(shè)備送數(shù)據(jù),DATA0與DATA1交替
握手包階段——設(shè)備根據(jù)情況會(huì)作出三種反應(yīng)

  • 【正常】的輸出事務(wù)處理:設(shè)備給主機(jī)返回ACK,通知主機(jī)可以發(fā)送新的數(shù)據(jù),如果數(shù)據(jù)包發(fā)生了CRC校驗(yàn)錯(cuò)誤,將不返回任何握手信息;
  • 【設(shè)備忙時(shí)】的輸出事務(wù)處理:無法給主機(jī)返回ACK,就發(fā)送NAK無效包,通知主機(jī)再次發(fā)送數(shù)據(jù)
  • 【設(shè)備出錯(cuò)】的輸出事務(wù)處理:發(fā)送錯(cuò)誤包STALL包,事務(wù)提前結(jié)束,總線直接進(jìn)入空閑狀態(tài)

SETUT 事務(wù)

令牌包階段——主機(jī)發(fā)送一個(gè)PID為SETUP的輸出包給設(shè)備,通知設(shè)備要接收數(shù)據(jù);
數(shù)據(jù)包階段——比較簡單,就是主機(jī)往設(shè)備送數(shù)據(jù),注意,這里只有一個(gè)固定為8個(gè)字節(jié)的DATA0包,這8個(gè)字節(jié)的內(nèi)容就是標(biāo)準(zhǔn)的USB設(shè)備請求命令。
握手包階段——設(shè)備接收到主機(jī)的命令信息后,返回ACK,此后總線進(jìn)入空閑狀態(tài),并準(zhǔn)備下一個(gè)傳輸(在SETUP事務(wù)后通常是一個(gè)IN或OUT事務(wù)構(gòu)成的傳輸)。

  • 【正常】的設(shè)置事務(wù)處理
  • 【設(shè)備忙時(shí)】的設(shè)置事務(wù)處理
  • 【設(shè)備出錯(cuò)】的設(shè)置事務(wù)處理

傳輸(Transfers)

??以下部分主要根據(jù) USB 2.0 規(guī)范的第五章和第八章 。USB系統(tǒng)中的數(shù)據(jù)傳輸,宏觀看是在HOST和USB功能設(shè)備之間進(jìn)行。微觀看是在應(yīng)用軟件的Buffer和USB功能設(shè)備的端點(diǎn)之間進(jìn)行。一般來說端點(diǎn)都有Buffer,可以認(rèn)為USB通訊就是應(yīng)用軟件Buffer和設(shè)備端點(diǎn)Buffer之間的數(shù)據(jù)交換,交換的通道稱為管道。通常需要多個(gè)管道來完成數(shù)據(jù)交換,因?yàn)橥还艿乐恢С忠环N類型的數(shù)據(jù)傳輸。用在一起來對設(shè)備進(jìn)行控制的若干管道稱為設(shè)備的接口,這就是端點(diǎn)、管道和接口的關(guān)系。Host與Device之間的通信視圖如下:

??USB 采用“令牌包”-“數(shù)據(jù)包”-“握手包”的傳輸機(jī)制,在令牌包中指定數(shù)據(jù)包去向或者來源的設(shè)備地址和端點(diǎn)(Endpoint),從而保證了只有一個(gè)設(shè)備對被廣播的數(shù)據(jù)包/令牌包作出響應(yīng)。握手包表示了傳輸?shù)某晒εc否。
??USB 采用輪詢的廣播機(jī)制傳輸數(shù)據(jù),所有的傳輸都由主機(jī)發(fā)起,任何時(shí)刻整個(gè) USB 體系內(nèi)僅允許一個(gè)數(shù)據(jù)包的傳輸,即不同物理傳輸線上看到的數(shù)據(jù)包都是同一被廣播的數(shù)據(jù)包。
??各種傳輸類型下,對于包長、速率限制如下:

??傳輸由OUT、IN和SETUP事務(wù)構(gòu)成,傳輸有四種類型,中斷傳輸、批量傳輸、同步傳輸、控制傳輸,其中中斷傳輸和批量傳輸?shù)慕Y(jié)構(gòu)一樣,同步傳輸有最簡單的結(jié)構(gòu),而控制傳輸是最重要的也是最復(fù)雜的傳輸。

控制傳輸(Control Transfers)

??控制傳輸是一種可靠的雙向傳輸,是最重要也是最復(fù)雜的。一次控制傳輸分為三(或兩個(gè))個(gè)階段:建立(Setup)數(shù)據(jù)(DATA)(可能沒有)以及狀態(tài)(Status)。每個(gè)階段都由一次或多次(數(shù)據(jù)階段)事務(wù)傳輸組成(Transaction)。在USB設(shè)備初次接到主機(jī)后,主機(jī)通過控制傳輸來交換信息、設(shè)備地址和讀取設(shè)備的描述符,使得主機(jī)識(shí)別設(shè)備,并安裝相應(yīng)的驅(qū)動(dòng)程序,這是每一個(gè)USB開發(fā)者都要關(guān)心的問題。
??控制傳輸是雙向的傳輸,必須有IN和OUT兩個(gè)方向上的特定端點(diǎn)號的控制端點(diǎn)來完成兩個(gè)方向上的控制傳輸

  • 建立階段: 主機(jī)從USB設(shè)備獲取配置信息,并設(shè)置設(shè)備的配置值。建立階段的數(shù)據(jù)交換包含了SETUP令牌封包、緊隨其后的DATA0數(shù)據(jù)封包以及ACK握手封包。它的作用是執(zhí)行一個(gè)設(shè)置(概念含糊)的數(shù)據(jù)交換,并定義此控制傳輸?shù)膬?nèi)容(即:在Data Stage中IN或OUT的data包個(gè)數(shù),及發(fā)送方向,在Setup Stage已經(jīng)被設(shè)定)。
    ??建立階段,Device 只能返回ACK包,或者不返回任何包。

  • 數(shù)據(jù)階段: 數(shù)據(jù)過程是可選的。一個(gè)數(shù)據(jù)過程包含一筆或者多筆數(shù)據(jù)事務(wù)。數(shù)據(jù)過程的第一個(gè)數(shù)據(jù)包必須是DATA1包,然后每次正確傳輸一個(gè)數(shù)據(jù)包就在DATA0和DATA1之間交替。

    根據(jù)數(shù)據(jù)階段的數(shù)據(jù)傳輸?shù)姆较?#xff0c;控制傳輸又可分為3種類型:

  • 控制讀取(讀取USB描述符): 是將數(shù)據(jù)從設(shè)備讀到主機(jī)上,讀取的數(shù)據(jù)USB設(shè)備描述符。該過程如上圖的【Control Read】所示。對每一個(gè)數(shù)據(jù)信息包而言,首先,主機(jī)會(huì)發(fā)送一個(gè)IN令牌信息包,表示要讀數(shù)據(jù)進(jìn)來。然后,設(shè)備將數(shù)據(jù)通過DATA1/DATA0數(shù)據(jù)信息包回傳給主機(jī)。最后,主機(jī)將以下列的方式加以響應(yīng):當(dāng)數(shù)據(jù)已經(jīng)正確接收時(shí),主機(jī)送出ACK令牌信息包;當(dāng)主機(jī)正在忙碌時(shí),發(fā)出NAK握手信息包;當(dāng)發(fā)生了錯(cuò)誤時(shí),主機(jī)發(fā)出STALL握手信息包。

  • 控制寫入(配置USB設(shè)備): 是將數(shù)據(jù)從主機(jī)傳到設(shè)備上,所傳的數(shù)據(jù)即為對USB設(shè)備的配置信息,該過程如上圖的【Control Wirte】所示。對每一個(gè)數(shù)據(jù)信息包而言,主機(jī)將會(huì)送出一個(gè)OUT令牌信息包,表示數(shù)據(jù)要送出去。緊接著,主機(jī)將數(shù)據(jù)通過DATA1/DATA0數(shù)據(jù)信息包傳遞至設(shè)備。最后,設(shè)備將以下列方式加以響應(yīng):當(dāng)數(shù)據(jù)已經(jīng)正確接收時(shí),設(shè)備送出ACK令牌信息包;當(dāng)設(shè)備正在忙碌時(shí),設(shè)備發(fā)出NAK握手信息包;當(dāng)發(fā)生了錯(cuò)誤時(shí),設(shè)備發(fā)出STALL握手信息包。

  • 無數(shù)據(jù)控制: 如上圖

  • 狀態(tài)階段: 用來表示整個(gè)傳輸?shù)倪^程已完全結(jié)束。通過一次IN/OUT傳輸表明請求是否成功完成。
    ??狀態(tài)階段傳輸?shù)姆较虮仨毰c數(shù)據(jù)階段的方向相反,即原來是IN令牌封包,這個(gè)階段應(yīng)為OUT令牌封包;反之,原來是OUT令牌封包,這個(gè)階段應(yīng)為IN令牌封包。
    ??對于【控制讀取】而言,主機(jī)會(huì)送出OUT令牌封包,其后再跟著0長度的DATA1封包。而此時(shí),設(shè)備也會(huì)做出相對應(yīng)的動(dòng)作,送ACK握手封包、NAK握手封包或STALL握手封包。
    ??相對地對于【控制寫入】傳輸,主機(jī)會(huì)送出IN令牌封包,然后設(shè)備送出表示完成狀態(tài)階段的0長度的DATA1封包,主機(jī)再做出相對應(yīng)的動(dòng)作:送ACK握手封包、NAK握手封包或STALL握手封包。

??控制傳輸通過控制管道在應(yīng)用軟件和Device的控制端點(diǎn)之間進(jìn)行,控制傳輸過程中傳輸?shù)臄?shù)據(jù)是有格式定義的,USB 設(shè)備或主機(jī)可根據(jù)格式定義解析獲得的數(shù)據(jù)含義。其他三種傳輸類型都沒有格式定義。控制傳輸對于最大包長度有固定的要求。對于高速設(shè)備該值為64Byte,對于低速設(shè)備該值為8,全速設(shè)備可以是8或16或32或64
??最大包長度表征了一個(gè)端點(diǎn)單次接收/發(fā)送數(shù)據(jù)的能力,實(shí)際上反應(yīng)的是該端點(diǎn)對應(yīng)Buffer的大小。Buffer越大,單次可接收/發(fā)送的數(shù)據(jù)包越大,反之亦反。當(dāng)通過一個(gè)端點(diǎn)進(jìn)行數(shù)據(jù)傳輸時(shí),若數(shù)據(jù)的大小超過該端點(diǎn)的最大包長度時(shí),需要將數(shù)據(jù)分成若干個(gè)數(shù)據(jù)包傳輸。并保證除最后一個(gè)包外,所有的包長度均等于該最大包長度。這也就是說如果一個(gè)端點(diǎn)收到/發(fā)送了一個(gè)長度小于最大包長度的包,即意味著數(shù)據(jù)傳輸結(jié)束。

??控制傳輸在訪問總線時(shí)也受到一些限制,如高速端點(diǎn)的控制傳輸不能占用超過 20%的微幀,全速和低速的則不能超過 10%。在一幀內(nèi)如果有多余的未用時(shí)間,并且沒有同步和中斷傳輸,可以用來進(jìn)行控制傳輸。

??與批量傳輸相比,在流程上并沒有多大區(qū)別,區(qū)別只在于該事務(wù)傳輸發(fā)生的端點(diǎn)不一樣、支持的最大包長度不一樣、優(yōu)先級不一樣等這樣一些對用戶來說透明的東西。

中斷傳輸(Interrupt Transfers)

??中斷傳輸是一種輪詢的傳輸方式,是一種單向的傳輸。HOST通過固定的間隔對中斷端點(diǎn)進(jìn)行查詢,若有數(shù)據(jù)傳輸或可以接收數(shù)據(jù)則返回?cái)?shù)據(jù)或發(fā)送數(shù)據(jù)。否則返回NAK,表示尚未準(zhǔn)備好。中斷傳輸?shù)难舆t有保證,但并非實(shí)時(shí)傳輸,它是一種延遲有限的可靠傳輸,支持錯(cuò)誤重傳。對于高速/全速/低速端點(diǎn),最大包長度分別可以達(dá)到1024/64/8 Bytes。 高速中斷傳輸不得占用超過 80%的微幀時(shí)間,全速和低速不得超過90%。 中斷端點(diǎn)的輪詢間隔由在端點(diǎn)描述符中定義,全速端點(diǎn)的輪詢間隔可以是1 ~ 255mS。低速端點(diǎn)為10 ~ 255mS,高速端點(diǎn)為(2interval-1)*125uS,其中 interval 取 1到 16 之間的值。
??除高速高帶寬中斷端點(diǎn)外,一個(gè)微幀內(nèi)僅允許一次中斷事務(wù)傳輸。高速高帶寬端點(diǎn)最多可以在一個(gè)微幀內(nèi)進(jìn)行三次中斷事務(wù)傳輸,傳輸高達(dá) 3072 字節(jié)的數(shù)據(jù)。
??所謂單向傳輸,并不是說該傳輸只支持一個(gè)方向的傳輸。而是指在某個(gè)端點(diǎn)上該傳輸僅支持一個(gè)方向,或輸出、或輸入。如果需要在兩個(gè)方向上進(jìn)行某種單向傳輸,需要占用兩個(gè)端點(diǎn),分別配置成不同的方向。可以擁有相同的端點(diǎn)編號。
??中斷傳輸由OUT事務(wù)和IN事務(wù)構(gòu)成,用于鍵盤、鼠標(biāo)等HID設(shè)備的數(shù)據(jù)傳輸。
??中斷傳輸在流程上除不支持PING之外,其他的跟批量傳輸是一樣的。他們之間的區(qū)別也僅在于事務(wù)傳輸發(fā)生的端點(diǎn)不一樣、支持的最大包長度不一樣、優(yōu)先級不一樣等這樣一些對用戶來說透明的東西。
??主機(jī)在排定中斷傳輸任務(wù)時(shí),會(huì)根據(jù)對應(yīng)中斷端點(diǎn)描述符中指定的查詢間隔發(fā)起中斷傳輸。中斷傳輸有較高的優(yōu)先級,僅次于同步傳輸。同樣中斷傳輸也采用 PID 翻轉(zhuǎn)的機(jī)制來保證收發(fā)端數(shù)據(jù)同步。
??中斷傳輸方式總是用于對設(shè)備的查詢,以確定是否有數(shù)據(jù)需要傳輸。因此中斷傳輸?shù)姆较蚩偸菑腢SB設(shè)備到主機(jī)。
??下圖為中斷傳輸?shù)牧鞒虉D。

DATA0或DATA1中的包含的是中斷信息,而不是中斷數(shù)據(jù)

批量傳輸(Bulk Transfers)

??批量傳輸由OUT事務(wù)和IN事務(wù)構(gòu)成,是一種可靠的單向傳輸,但延遲沒有保證,它盡量利用可以利用的帶寬來完成傳輸,適合數(shù)據(jù)量比較大的傳輸。低速USB設(shè)備不支持批量傳輸,高速批量端點(diǎn)的最大包長度為512,全速批量端點(diǎn)的最大包長度可以為8、16、32、64。
??用于傳輸大量數(shù)據(jù),要求傳輸不能出錯(cuò),但對時(shí)間沒有要求,適用于打印機(jī)、存儲(chǔ)設(shè)備等
??批量傳輸在訪問USB總線時(shí),相對其他傳輸類型具有最低的優(yōu)先級,USB HOST總是優(yōu)先安排其他類型的傳輸,當(dāng)總線帶寬有富余時(shí)才安排批量傳輸。高速的批量端點(diǎn)必須支持PING操作,向主機(jī)報(bào)告端點(diǎn)的狀態(tài)。NYET表示否定應(yīng)答,沒有準(zhǔn)備好接收下一個(gè)數(shù)據(jù)包,ACK 表示肯定應(yīng)答,已經(jīng)準(zhǔn)備好接收下一個(gè)數(shù)據(jù)包。
??它通過在硬件級執(zhí)行“錯(cuò)誤檢測”和“重傳”來確保host與device之間“準(zhǔn)確無誤”地傳輸數(shù)據(jù),即可靠傳輸。它由三種包組成(即IN事務(wù)或OUT事務(wù)):

  • token
  • data
  • handshake


??上圖(USB2.0規(guī)范的8.5.2章節(jié))中一個(gè)方框表示一個(gè) Packet,灰色的包表示主機(jī)發(fā)出的包,白色的包表示Device發(fā)出的包。***批量傳輸是可靠的傳輸,需要握手包來表明傳輸?shù)慕Y(jié)果。***若數(shù)據(jù)量比較大,將采用多次批量事務(wù)傳輸來完成全部數(shù)據(jù)的傳輸,傳輸過程中數(shù)據(jù)包的PID按照 DATA0-DATA1-DATA0-…的方式翻轉(zhuǎn),以保證發(fā)送端和接收端的同步。若成功則將錯(cuò)誤次數(shù)計(jì)數(shù)器清0,否則累加該計(jì)數(shù)器。

  • For IN Token (即:IN Transaction)
  • ACK: 表示host正確無誤地接收到數(shù)據(jù)
  • NAK: 指示設(shè)備暫時(shí)不能返回或接收數(shù)據(jù) (如:設(shè)備忙)
  • STALL:指示設(shè)備永遠(yuǎn)停止,需要host軟件的干預(yù) (如:設(shè)備出錯(cuò))
  • For OUT Token (即:OUT Transaction)
    如果接收到的數(shù)據(jù)包有誤,如:CRC錯(cuò)誤,Device不發(fā)送任何handshake包
  • ACK: Device已經(jīng)正確無誤地接收到數(shù)據(jù)包,且通知Host可以按順序發(fā)送下一個(gè)數(shù)據(jù)包
  • NAK: Device 已經(jīng)正確無誤地接收到數(shù)據(jù)包,且通知Host重傳數(shù)據(jù),由于Device臨時(shí)狀況(如buffer滿)
  • STALL: 指示Device endpoint已經(jīng)停止,且通知Host不再重傳

??USB 允許連續(xù) 3次以下的傳輸錯(cuò)誤,錯(cuò)誤時(shí)會(huì)重試該傳輸,若成功則將錯(cuò)誤次數(shù)計(jì)數(shù)器清零,否則累加該計(jì)數(shù)器。超過三次后,HOST 認(rèn)為該端點(diǎn)功能錯(cuò)誤(STALL),放棄該端點(diǎn)的傳輸任務(wù)。
??一次批量傳輸(Transfer)由 1 次到多次批量事務(wù)傳輸(Transaction)組成。


??上圖(USB2.0規(guī)范的8.5.2章節(jié))為批量讀寫時(shí)數(shù)據(jù)位和PID的變化情況。主機(jī)總是使用配置事件將總線傳輸?shù)牡谝粋€(gè)事務(wù)初始化為 DATA0 PID。 第二個(gè)事務(wù)使用 DATA1 PID,并且在批量傳輸?shù)钠溆嗖糠种薪惶媸褂?DATA0 和 DATA1 傳輸數(shù)據(jù)。翻轉(zhuǎn)同步:發(fā)送端按照 DATA0-DATA1-DATA0-…的順序發(fā)送數(shù)據(jù)包,只有成功的事務(wù)傳輸才會(huì)導(dǎo)致PID翻轉(zhuǎn),也就是說發(fā)送段只有在接收到ACK后才會(huì)翻轉(zhuǎn)PID,發(fā)送下一個(gè)數(shù)據(jù)包,否則會(huì)重試本次事務(wù)傳輸。同樣,若在接收端發(fā)現(xiàn)接收到的數(shù)據(jù)包不是按照此順序翻轉(zhuǎn)的,比如連續(xù)收到兩個(gè)DATA0,那么接收端認(rèn)為第二個(gè)DATA0是前一個(gè)DATA0的重傳。

同步傳輸(Isochronous Transfers)

??同步傳輸是一種實(shí)時(shí)的、不可靠的傳輸,不支持錯(cuò)誤重發(fā)機(jī)制。只有高速和全速端點(diǎn)支持同步傳輸,高速同步端點(diǎn)的最大包長度為1024,低速的為1023。由OUT事務(wù)和IN事務(wù)構(gòu)成。有兩個(gè)特殊地方,第一,在同步傳輸?shù)腎N和OUT事務(wù)中是沒有返回包階段的;第二,在數(shù)據(jù)包階段所有的數(shù)據(jù)包都為DATA0。
它由兩種包組成:

  • token
  • data


??同步傳輸不支持“handshake”和“重傳能力”,所以它是不可靠傳輸。
??同步傳輸適用于必須以固定速率抵達(dá)或在指定時(shí)刻抵達(dá),可以容忍偶爾錯(cuò)誤的數(shù)據(jù)上。實(shí)時(shí)傳輸一般用于麥克風(fēng)、喇叭、UVC Camera等設(shè)備。實(shí)時(shí)傳輸只需令牌與數(shù)據(jù)兩個(gè)信息包階段,沒有握手包,故數(shù)據(jù)傳錯(cuò)時(shí)不會(huì)重傳。
??除高速高帶寬同步端點(diǎn)外,一個(gè)微幀內(nèi)僅允許一次同步事務(wù)傳輸,高速高帶寬端點(diǎn)最多可以在一個(gè)微幀內(nèi)進(jìn)行三次同步事務(wù)傳輸,傳輸高達(dá) 3072 字節(jié)的數(shù)據(jù)。全速同步傳輸不得占用超過 80%的幀時(shí)間,高速同步傳輸不得占用超過90%的微幀時(shí)間。同步端點(diǎn)的訪問也和中斷端點(diǎn)一樣,有固定的時(shí)間間隔限制。
??同步傳輸是不可靠的傳輸,所以它沒有握手包,也不支持PID翻轉(zhuǎn)。主機(jī)在排定事務(wù)傳輸時(shí),同步傳輸有最高的優(yōu)先級。

分離傳輸(Split Transaction)

??分離傳輸是在主機(jī)控制器和USB HUB之間的傳輸,它僅在主機(jī)控制器和HUB之間執(zhí)行,通過分離傳輸,可以允許全速/低速設(shè)備連接到高速主機(jī)。分離傳輸對于USB設(shè)備來說是透明的、不可見的。
??分離傳輸,顧名思義就是把一次完整的事務(wù)傳輸分成兩個(gè)事務(wù)傳輸來完成。其出發(fā)點(diǎn)是高速傳輸和全速/低速傳輸?shù)乃俣炔幌嗟?#xff0c;如果使用一次完整的事務(wù)來傳輸,勢必會(huì)造成比較長的等待時(shí)間,從而降低了高速USB總線的利用率。通過將一次傳輸分成兩次,將令牌(和數(shù)據(jù))的傳輸與響應(yīng)數(shù)據(jù)(和握手)的傳輸分開,這樣就可以在中間插入其他高速傳輸,從而提高總線的利用率。

參考

  • Universal Serial Bus Specification Revision 2.0
  • 國嵌相關(guān)資料

附件

  • Bus Hound監(jiān)聽的U盤的報(bào)文
  • 國嵌資料USB部分
  • 總結(jié)

    以上是生活随笔為你收集整理的USB 之一 USB2.0 规范详解 第一部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。