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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

USB協(xié)議:控制傳輸(二)

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2023-11-09 11:55 ? 次閱讀

本篇筆記寫的很糙,在這里你會(huì)看到很多專業(yè)名詞,可能會(huì)一臉懵逼,但還是先發(fā)出來(lái)給大家看看,沒有基礎(chǔ)的不用細(xì)看,大概了解即可,后面的筆記將把這些內(nèi)容揉碎了再呈現(xiàn)給大家。而且當(dāng)時(shí)看的例程是 HID 鼠標(biāo)的,比較復(fù)雜,內(nèi)核代碼也沒有使用狀態(tài)機(jī),比較難以理解,但是魚鷹接下來(lái)的例程用了狀態(tài)機(jī),并且魚鷹畫了整個(gè)狀態(tài)機(jī)的運(yùn)行流程圖,將更加清晰易懂,所以 HID 的例程暫時(shí)就不再提供給大家。

現(xiàn)在和電腦通信基本上是采用 USB 進(jìn)行通信,所以我們有必要學(xué)習(xí) USB 協(xié)議。而 USB 協(xié)議中最重要的一種傳輸就是控制傳輸

串口通信在設(shè)置串口波特率、連上線后是沒有數(shù)據(jù)傳輸?shù)模挥性陔娔X或設(shè)備發(fā)送數(shù)據(jù)時(shí),線上才會(huì)有數(shù)據(jù)傳輸,而 USB 設(shè)備不同,在設(shè)備插入電腦時(shí),電腦就開始和設(shè)備進(jìn)行交流了,就像人們剛見面就打招呼似的。但是 USB 主機(jī)可不是僅僅問你(USB 設(shè)備)有沒有吃飯什么的,而是全面的了解你的信息(必要信息)。

為了獲得你的信息,就必須有一個(gè)通道,還有一個(gè)雙方支持的通信格式才行。所以就有了控制端點(diǎn)。控制端點(diǎn)是一個(gè)具有雙向通信能力的默認(rèn)端點(diǎn)(也叫缺省端點(diǎn)),是一個(gè) USB 設(shè)備必須支持的端點(diǎn)。初期的枚舉過程都在該端點(diǎn)上完成。枚舉過程是一個(gè) USB 設(shè)備必須經(jīng)歷的一個(gè)過程。通過枚舉,讓主機(jī)了解設(shè)備的一些基本信息。而枚舉過程的實(shí)現(xiàn)就是通過控制傳輸實(shí)現(xiàn)的。我們通過枚舉過程來(lái)了解控制傳輸。

首先確定控制傳輸是四大傳輸之一,也是最基本的傳輸,所有的 USB 設(shè)備都必須支持。它是可靠的傳輸,具有最少兩個(gè)個(gè)階段,建立階段(Setup Stage)、狀態(tài)階段(Data Stage),還有一個(gè)數(shù)據(jù)階段(Status Stage)是可能會(huì)有的。建立階段是由建立傳輸事務(wù)(Setup Transaction)實(shí)現(xiàn)的,狀態(tài)階段和數(shù)據(jù)階段是由數(shù)據(jù)輸出(Data Out Transaction)或輸入事務(wù)(Data IN Transaction)實(shí)現(xiàn)的(如果數(shù)據(jù)太多,將會(huì)采用多次數(shù)據(jù)輸入或輸出事務(wù))。如下圖,本文將主要講這圖中的內(nèi)容,一定要明白它們之間的關(guān)系。

各種可能的控制傳輸過程:

(SETUP(0)由三個(gè)包組成:SETUP Packet 、DATA0 Packet、ACK Packet;

OUT(1)由三個(gè)包組成:OUT Packet 、DATA1 Packet、ACK Packet;

IN(1)由三個(gè)包組成:IN Packet 、DATA0 Packet、ACK Packet 。這里的 SETUP 、DATA0 、ACK 、OUT 、IN 是 PID)

一個(gè)事務(wù)又是由各種包組成的。包又分為四大類包:Token(令牌)Packet、Data(數(shù)據(jù)) Packet、 Handshake(握手)Packet、特殊 Packet。每類包中又分為各種具體的包(由 PID(Packet ID)確定該包屬于哪一種包)。需要注意的是包是 USB 傳輸最小的傳輸單位、所有數(shù)據(jù)都必須進(jìn)行打包才可以進(jìn)行傳輸,包格式如下。

(灰色區(qū)域表示每個(gè)包都有,彩色表示可能有)

因?yàn)橛懈鞣N不同的包,各種包的具體格式也不盡相同。所以我們只分析我們需要的包。為了簡(jiǎn)化內(nèi)容,讓我們能夠?qū)⒆⒁饬性谖覀冃枰臇|西上,我們都以包來(lái)進(jìn)行說(shuō)明,包里面具體的其他內(nèi)容,將選擇性的了解,對(duì)于包,我們也只對(duì)需要的包進(jìn)行說(shuō)明。

令牌包:SETUP 包、OUT 包、IN 包。(主機(jī)發(fā)送)

主機(jī)最開始會(huì)發(fā)出的包,標(biāo)志一次傳輸事務(wù)的開始,里面有 PID(標(biāo)志這個(gè)是什么包,SETUP 包中的 PID 就是 SETUP)、地址(包括設(shè)備地址,端點(diǎn)地址)、CRC(對(duì)地址信息進(jìn)行校驗(yàn))。在程序中我們可以知道是什么類型的包。

數(shù)據(jù)包:DATA0 包、DATA1 包。(主機(jī)設(shè)備都可以發(fā)送)

里面有 PID、數(shù)據(jù)、CRC(對(duì)數(shù)據(jù)信息進(jìn)行校驗(yàn))。這是用戶真正要關(guān)心的數(shù)據(jù)。里面的數(shù)據(jù)我們是可以進(jìn)行查看的。我們枚舉過程處理的就是這些數(shù)據(jù)。

握手包:STALL 包、NAK 包、ACK 包(主機(jī)只能發(fā)送 ACK 包)

里面只有 PID。

ACK 包:表示正確接收數(shù)據(jù),并且有足夠的空間來(lái)容納數(shù)據(jù),主機(jī)和設(shè)備都可以用 ACK 確認(rèn),而 NAK,STALL,NYET 只有設(shè)備能夠返回,主機(jī)不能使用(因?yàn)檎?qǐng)求都是主機(jī)發(fā)送,當(dāng)主機(jī)發(fā)送請(qǐng)求了,就說(shuō)明已經(jīng)準(zhǔn)備好了,自然不應(yīng)該有這些回答)。

NAK 包:表示沒有數(shù)據(jù)需要返回,或者數(shù)據(jù)接收正確但是沒有足夠的空間來(lái)容納數(shù)據(jù),當(dāng)主機(jī)收到 NAK 是,知道設(shè)備沒有準(zhǔn)備好,主機(jī)會(huì)在合適的時(shí)機(jī)進(jìn)行重新傳輸。

STALL 包:表示設(shè)備無(wú)法執(zhí)行這個(gè)請(qǐng)求,或者端點(diǎn)已經(jīng)被掛起,它表示一種錯(cuò)誤的狀態(tài)。設(shè)備返回 STALL

后需要主機(jī)進(jìn)行干預(yù)才能解除這種 STALL 狀態(tài)。

注意:返回 NAK 并不代表數(shù)據(jù)出錯(cuò),只是說(shuō)明設(shè)備暫時(shí)沒有數(shù)據(jù)傳輸或暫時(shí)沒有能力接收數(shù)據(jù) . 當(dāng)主機(jī)或設(shè)備檢測(cè)到數(shù)據(jù)出錯(cuò)時(shí)(如 CRC 校驗(yàn)出錯(cuò),PID 校驗(yàn)出錯(cuò),位填充出錯(cuò)等 )將什么也不返回。這時(shí)等待握手包的一方就會(huì)因?yàn)槭詹坏轿帐职却瑫r(shí)。

現(xiàn)在有了這些基礎(chǔ)知識(shí),我們?yōu)榱烁宄J(rèn)識(shí)控制傳輸,就通過講解 usb_core.h、 usb_core.c 文件(本文必須結(jié)合這兩個(gè)文件)來(lái)了解枚舉過程,進(jìn)而認(rèn)識(shí)控制傳輸。

之前也說(shuō)過,枚舉過程是通過控制傳輸實(shí)現(xiàn)的,那么現(xiàn)在就來(lái)看看當(dāng)你把一個(gè) USB 設(shè)備插入主機(jī)時(shí),它的枚舉過程是怎樣的。

首先,弄清楚一點(diǎn),這兩個(gè)文件處理的就是枚舉過程,也是整個(gè) USB 程序中最最核心的部分,所有的 USB 相關(guān)的文件都是以它為基礎(chǔ)。它定義了各種結(jié)構(gòu)體,各種聯(lián)合體。而其他文件就是根據(jù)這個(gè)結(jié)構(gòu)體、聯(lián)合體進(jìn)行具體的定義,并且寫出具體的實(shí)現(xiàn)的方法。弄明白這兩個(gè)文件是重中之重。

因?yàn)榭刂苽鬏敱容^復(fù)雜,和上一個(gè)狀態(tài)有很大關(guān)系。所以定義了一個(gè)枚舉類型 CONTROL_STATE 確定程序當(dāng)前的各種狀態(tài)。還有結(jié)構(gòu)體 ENDPOINT_INFO、DEVICE_INFO、DEVICE_PROP,還有一個(gè)特殊的結(jié)構(gòu)體 USER_STANDARD_REQUESTS 等各種類型。

CONTROL_STATE:確定當(dāng)前的端點(diǎn)的傳輸狀態(tài)

ENDPOINT_INFO:端點(diǎn)傳輸數(shù)據(jù)的信息,包括要發(fā)送或接收的剩余數(shù)據(jù)長(zhǎng)度,已經(jīng)發(fā)送或接收的數(shù)據(jù)偏移,該端點(diǎn)的最大包長(zhǎng)(決定了該端點(diǎn)一次處理的數(shù)據(jù)的能力),要發(fā)送或接收數(shù)據(jù)的地址。(數(shù)據(jù)長(zhǎng)度和地址由具體的函數(shù)提供,這個(gè)結(jié)構(gòu)體有一個(gè)函數(shù)指針指向具體實(shí)現(xiàn)函數(shù)。也就是說(shuō)要接收或發(fā)送數(shù)據(jù)的大小和地址是由具體的函數(shù)實(shí)現(xiàn)的)。

DEVICE_INFO:包含了設(shè)備的狀態(tài)信息,控制端點(diǎn)的傳輸狀態(tài)(CONTROL_STATE 控制傳輸狀態(tài)),控制端點(diǎn)的信息(ENDPOINT_INFO 的具體實(shí)現(xiàn)),還有標(biāo)準(zhǔn)請(qǐng)求的數(shù)據(jù)信息。

DEVICE_PROP:這里面包含了具體的實(shí)現(xiàn)函數(shù)。如具體設(shè)備的硬件相關(guān)的函數(shù)實(shí)現(xiàn)

void (*Init)(void);,復(fù)位信號(hào)發(fā)過來(lái)時(shí)的處理函數(shù)void (*Reset)(void);,控制傳輸中的狀態(tài)階段的處理函數(shù)void (*Process_Status_IN)(void);void (*Process_Status_OUT)(void);,發(fā)送接收函數(shù)的具體實(shí)現(xiàn)函數(shù),就是之前的 ENDPOINT_INFO 中需要的具體實(shí)現(xiàn)函數(shù)。等等。

USER_STANDARD_REQUESTS:這個(gè)結(jié)構(gòu)體就比較特殊了,因?yàn)檫@個(gè)結(jié)構(gòu)體的函數(shù)是用來(lái)給用戶使用的。比如主機(jī)發(fā)送了什么信息過來(lái),我們把數(shù)據(jù)發(fā)出去了,那么我們還要告知用戶(我們的程序),我們做了這些操作才行,但是這些操作函數(shù)有的可以省去的,而不會(huì)影響正常通信,雖然不會(huì)影響正常通信,但是對(duì)設(shè)備本身還是有可能有影響的。

現(xiàn)在我們來(lái)具體看看主機(jī)與設(shè)備是怎么通信的,所以看它的使用函數(shù) void CTR_LP(void)(usb_int.c 文件),USB 通信是在中斷函數(shù)中的。

在我們插上 USB 設(shè)備時(shí),枚舉過程數(shù)據(jù)(串口接收到的數(shù)據(jù)):

1.SETUP:80 6 1 0 40 發(fā)送數(shù)據(jù):112 200 0 4000 483 5710 200 201 103 IN:OUT:

2.SETUP:0 5 100 0 0 IN:

3.SETUP:80 6 1 0 12 發(fā)送數(shù)據(jù):112 200 0 4000 483 5710 200 201 103 IN:OUT:

4.SETUP:80 6 2 0 ff 發(fā)送數(shù)據(jù):209 22 101 e000 932 4 100 103 2 2109 100 100 4a22 700 8105 403 2000 IN:OUT:

5.SETUP:80 6 303 904 ff 發(fā)送數(shù)據(jù):31a 38 ff ff ff 33 41 37 31 21 63 15 57 IN:OUT:

6.SETUP:80 6 3 0 ff 發(fā)送數(shù)據(jù):304 409 IN:OUT:

7.SETUP:80 6 203 904 ff 發(fā)送數(shù)據(jù):322 41 4c 49 45 4e 54 45 4b 20 89e6 63a7 55 53 42 9f20 6807 IN:OUT:

8.SETUP:80 6 6 0 a

9.SETUP:80 6 1 0 12 發(fā)送數(shù)據(jù):112 200 0 4000 483 5710 200 201 103 IN:OUT:

10.SETUP:80 6 2 0 9 發(fā)送數(shù)據(jù):209 22 101 e000 932 IN:OUT:

11.SETUP:80 6 2 0 22 發(fā)送數(shù)據(jù):209 22 101 e000 932 4 100 103 2 2109 100 100 4a22 700 8105 403 2000 IN:OUT:

12.SETUP:0 9 100 0 0 IN:

13.SETUP:21 a 0 0 0

注意:因?yàn)橛玫氖?printf 函數(shù)發(fā)送的,所以有些是省去了,有些高字節(jié)和低字節(jié)可能換了,所以分析時(shí)要注意。

我們現(xiàn)在主要分析傳輸過程,而不是具體數(shù)據(jù)的處理,所以不要太關(guān)心具體數(shù)據(jù)。

我們假設(shè)前期工作都做好了,USB 能通信了,既然如此,程序必定會(huì)進(jìn)入 usb_int.c 文件中的 void CTR_LP(void)函數(shù)。當(dāng)?shù)谝淮芜M(jìn)入此函數(shù)時(shí),就說(shuō)明一次傳輸事務(wù)成功完成。從包的角度來(lái)看就是主機(jī)發(fā)送一個(gè) SETUP 包,再發(fā)一個(gè) DATA 包,設(shè)備確認(rèn)數(shù)據(jù)的正確性(從 PID 和 CRC 確定)然后發(fā)送 ACK 包。設(shè)備硬件將該端點(diǎn)自動(dòng)設(shè)置為 NAK(此時(shí)如果主機(jī)發(fā)送包過來(lái),一律以 NAK 回應(yīng),表示忙著呢,還沒有準(zhǔn)備好),使設(shè)備有足夠的時(shí)間處理 DATA 包中的數(shù)據(jù)。在這之后程序才運(yùn)行到了 CTR_LP()函數(shù)里。

程序每運(yùn)行到這里一次,意味著主機(jī)發(fā)送的設(shè)備地址和端點(diǎn)號(hào)正確,也意味著一次傳輸事務(wù)的結(jié)束。這一點(diǎn)要牢記。

現(xiàn)在我們看著設(shè)備接收到的數(shù)據(jù)再理一理過程。(以下內(nèi)容必須結(jié)合附帶工程進(jìn)行驗(yàn)證)

SETUP:80 6 1 0 40 發(fā)送數(shù)據(jù):112 200 0 4000 483 5710 200 201 103 IN:OUT:

設(shè)備的一次傳輸事務(wù)結(jié)束了(從 SETUP:看出)(第一次進(jìn)入 CTR_LP()),先判斷這次傳輸事務(wù)是什么類型傳輸事務(wù)(STM32 中有一個(gè)標(biāo)志位可以進(jìn)行判斷),然后發(fā)現(xiàn)是建立令牌包,那么就是建立傳輸事務(wù),現(xiàn)在就轉(zhuǎn)到建立傳輸事務(wù)程序中。

在該程序中,先把數(shù)據(jù)包中的數(shù)據(jù)拷貝出來(lái)再說(shuō)。

拷完了,同時(shí)設(shè)置當(dāng)前的設(shè)備狀態(tài)為 SETTING_UP,表示開始處理一次建立事務(wù),然后發(fā)現(xiàn)這是一個(gè)有數(shù)據(jù)階段的建立傳輸事務(wù)而且是設(shè)備發(fā)送數(shù)據(jù)給主機(jī)(怎么發(fā)現(xiàn)的就看具體的標(biāo)準(zhǔn)請(qǐng)求格式吧,現(xiàn)在只說(shuō)結(jié)果)。

好吧,看看要什么數(shù)據(jù),發(fā)現(xiàn)要設(shè)備描述符,長(zhǎng)度是 64 字節(jié)。那行,只是我的設(shè)備描述符只有 18 字節(jié),怎么辦,不管,就發(fā) 18 字節(jié)過去。

發(fā)送完這 18 字節(jié)后程序第二次進(jìn)入了 CTR_LP()函數(shù)(從 IN:看出),剛剛設(shè)備把數(shù)據(jù)發(fā)送出去了,這次進(jìn)入相關(guān)處理函數(shù)也就沒什么事干了,就等著主機(jī)發(fā)送狀態(tài)數(shù)據(jù)過來(lái)呢,所以設(shè)置設(shè)備狀態(tài)為 WAIT_STATUS_OUT,表示正在等待主機(jī)發(fā)送狀態(tài)數(shù)據(jù)(之后發(fā)送端點(diǎn)狀態(tài)設(shè)為 STALL,表示如果主機(jī)發(fā)送 IN 令牌包將以 STALL 握手包進(jìn)行回應(yīng))。

然后第三次進(jìn)入 CTR_LP()函數(shù)(從 OUT:看出),因?yàn)槭?OUT 包,所以是一次數(shù)據(jù)輸出事務(wù)的完成(沒有寫錯(cuò),就是輸出,這是對(duì)于主機(jī)來(lái)說(shuō)),這時(shí)設(shè)備就知道這應(yīng)該是狀態(tài)階段的數(shù)據(jù)了,經(jīng)過一系列的判斷,發(fā)現(xiàn)確實(shí)是(之后發(fā)送接收端點(diǎn)都設(shè)置為 STALL)。

到這里一個(gè)完整的控制傳輸過程算是完成了。但是一個(gè)枚舉過程是由很多這樣的控制傳輸過程構(gòu)成的。

SETUP:0 5 100 0 0 IN:

第二次建立傳輸事務(wù)又來(lái)了(從 SETUP:看出),也標(biāo)志著一次控制傳輸?shù)拈_始(建立階段)。看看有沒有數(shù)據(jù)要發(fā)送或輸入,嗯,好像沒有,而且是設(shè)置地址的(這里有地址信息,就是 1),那行,開始設(shè)置地址吧?

那可不不行,USB 協(xié)議規(guī)定,設(shè)置地址的工作必須在設(shè)備發(fā)送狀態(tài)數(shù)據(jù)(狀態(tài)階段沒有具體的數(shù)據(jù),也就是說(shuō)數(shù)據(jù)區(qū)為 0 字節(jié))到主機(jī),主機(jī)接收到后發(fā)送 ACK 握手包后被設(shè)備接收到才能進(jìn)行設(shè)置設(shè)備的地址(為什么這么規(guī)定,可能是防止中間出現(xiàn)問題吧)。

所以在程序中還真沒進(jìn)行設(shè)置地址的工作,而是只是設(shè)置設(shè)備當(dāng)前的狀態(tài)為 WAIT_STATUS_IN,什么意思,就是表示設(shè)備正在等待發(fā)送狀態(tài)數(shù)據(jù)呢(為什么要等,而不是直接發(fā)送,這是因?yàn)?USB 是有主從關(guān)系的,主機(jī)沒叫你發(fā)送數(shù)據(jù),你是不能發(fā)送數(shù)據(jù)的,你只能把數(shù)據(jù)放在緩存區(qū)中,并且設(shè)置發(fā)送端點(diǎn)有效。當(dāng)設(shè)備收到 IN 令牌包時(shí),它就自動(dòng)由硬件發(fā)送出去了)。

當(dāng)主機(jī)成功收到狀態(tài)階段的數(shù)據(jù)時(shí)就會(huì)發(fā)送 ACK 握手包。然后設(shè)備接收到了握手包,這時(shí)也就意味著一次數(shù)據(jù)輸入事務(wù)(狀態(tài)階段)的結(jié)束,此時(shí),程序再次運(yùn)行到 CTR_LP()這里(從 IN:看出),并進(jìn)入到相關(guān)處理函數(shù),這時(shí)相關(guān)處理函數(shù)就會(huì)設(shè)置地址了,此后發(fā)送和接收的端點(diǎn)再次變?yōu)?STALL。

上面這些都是正常的控制傳輸,如果不正常(不正常不代表數(shù)據(jù)出錯(cuò),而是請(qǐng)求不合理)的呢?我們跳過正常的,直接看下面這一次控制傳輸。

SETUP:80 6 6 0 a

看這條請(qǐng)求代碼是 6(后面那個(gè)),要求發(fā)送 10 個(gè)字節(jié)數(shù)據(jù)給主機(jī),但是我的設(shè)備沒有這種代碼為 6 的描述符,怎么辦。USB 協(xié)議規(guī)定有些請(qǐng)求是必須支持的,但是有些請(qǐng)求卻不一定要支持。這個(gè)描述符沒有應(yīng)該怎么處理呢。

分析程序,最終你會(huì)發(fā)現(xiàn)控制狀態(tài)設(shè)置為 STALLED,也就是說(shuō)在主機(jī)下一個(gè) IN 令牌包(在此之前主機(jī)可能已經(jīng)發(fā)送了多次 IN 令牌包過來(lái),只是設(shè)備都以 NAK 包進(jìn)行回應(yīng))來(lái)的時(shí)候,設(shè)備會(huì)返回一個(gè) STALL 包,當(dāng)主機(jī)收到這個(gè)握手包之后,就知道設(shè)備不支持該請(qǐng)求,它就會(huì)放棄繼續(xù)發(fā)送 IN 令牌包,而是發(fā)送 SETUP 包,因?yàn)樵O(shè)備控制端點(diǎn)處于 STALL 狀態(tài)時(shí),必須主機(jī)進(jìn)行干預(yù)才能幫助設(shè)備解除這種狀態(tài)。

由于此次控制傳輸是設(shè)備不支持的請(qǐng)求,所以就沒有數(shù)據(jù)階段,同時(shí)也沒有狀態(tài)階段,既然不需要發(fā)送或接收數(shù)據(jù),也就不會(huì)在建立傳輸事務(wù)來(lái)之前再次進(jìn)入程序了。但是如果發(fā)送的請(qǐng)求為輸出數(shù)據(jù),那么程序就會(huì)直接接收數(shù)據(jù)了。

說(shuō)了這么多,下面進(jìn)行一些總結(jié):

1. 程序運(yùn)行到 CTR_LP()里面,就說(shuō)明一次事務(wù)傳輸?shù)耐瓿桑还苁墙⑹聞?wù)還是數(shù)據(jù)輸入輸出事務(wù)。注意是已經(jīng)完成,而不是將要完成。

2. 數(shù)據(jù)如果出錯(cuò)了,只會(huì)有錯(cuò)誤中斷產(chǎn)生,而不會(huì)產(chǎn)生傳輸完成中斷,也就不會(huì)進(jìn)入 CTR_LP()服務(wù)程序中。

3. 注意分析每一次事務(wù)傳輸?shù)耐瓿蓪⑹巩?dāng)前端點(diǎn)的發(fā)送接收狀態(tài)產(chǎn)生何種影響,又會(huì)對(duì)之后的事務(wù)傳輸產(chǎn)生何種影響。

4. 每一次控制傳輸?shù)慕Y(jié)束,都會(huì)使端點(diǎn)發(fā)送和接收狀態(tài)都設(shè)為 STALL。

5. 控制傳輸在請(qǐng)求不支持情況下沒有狀態(tài)階段的數(shù)據(jù)。

6. 建立階段也由三個(gè)包組成,SETUP 令牌包 、DATA0 數(shù)據(jù)包(只能是 DATA0)、ACK 握手包。也是一次建立事務(wù)。

7. 數(shù)據(jù)階段也由三個(gè)包組成,OUT/IN 令牌包 、DATA0/1 數(shù)據(jù)包、ACK 握手包。也是一次數(shù)據(jù)輸出或輸入事務(wù)。在建立傳輸中有可能有多次該傳輸事務(wù)。

8. 狀態(tài)階段也由三個(gè)包組成,OUT/IN 令牌包 、DATA1 數(shù)據(jù)包、ACK 握手包。也是一次數(shù)據(jù)輸出或輸入事務(wù)。但是它沒有用戶所使用的數(shù)據(jù)。

9.OUT、IN 是對(duì)于主機(jī)來(lái)說(shuō)的。OUT 就是主機(jī)向設(shè)備發(fā)送數(shù)據(jù)。

10. 注意根據(jù)實(shí)際數(shù)據(jù)進(jìn)行分析。

注意:如果使用 USB 協(xié)議分析軟件,你會(huì)發(fā)現(xiàn)軟件的捕獲數(shù)據(jù)不全,所以要根據(jù)設(shè)備串口發(fā)送的數(shù)據(jù)進(jìn)行分析

審核編輯 黃宇

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

    關(guān)注

    18

    文章

    6133

    瀏覽量

    136970
  • USB協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    14419
收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    TCP傳輸控制協(xié)議知識(shí)科普拓展

    傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由I
    的頭像 發(fā)表于 11-27 17:46 ?1084次閱讀
    TCP<b class='flag-5'>傳輸</b><b class='flag-5'>控制</b><b class='flag-5'>協(xié)議</b>知識(shí)科普拓展

    USB充電協(xié)議端口控制IC

    DSK2001/DSK2002是USB充電協(xié)議端口控制IC,可自動(dòng)識(shí)別充電設(shè)備類型,并通過對(duì)應(yīng)的USB充電協(xié)議與設(shè)備握手,使之獲得最大充電電
    發(fā)表于 09-07 10:02

    什么是USB PD協(xié)議

    的電源上。USB PD協(xié)議利用USB Type-C接口的CC(Configuration channel)引腳作為數(shù)據(jù)傳輸通道來(lái)協(xié)商充電的電壓、電流和功率
    發(fā)表于 09-15 07:41

    傳輸控制協(xié)議(TCP)/網(wǎng)絡(luò)層協(xié)議是什么意思

    傳輸控制協(xié)議(TCP)/網(wǎng)絡(luò)層協(xié)議是什么意思 傳輸控制協(xié)議
    發(fā)表于 04-06 16:44 ?2750次閱讀

    USB培訓(xùn)_Part1 協(xié)議

    usb協(xié)議介紹,部分協(xié)議。可以參考使用 通用串行總線(USB) 2.0 USB技術(shù)簡(jiǎn)介 ? 技術(shù)背景 ? 架構(gòu)、系統(tǒng)、
    發(fā)表于 04-28 14:57 ?3次下載

    TCP:傳輸控制協(xié)議

    TCP-IP詳解卷2 TCP:傳輸控制協(xié)議,學(xué)習(xí)TCP很好的資料。歡迎下載。
    發(fā)表于 05-09 14:33 ?0次下載

    USB電源傳輸技術(shù)的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是USB電源傳輸技術(shù)的詳細(xì)資料說(shuō)明包括了:USB電源傳輸規(guī)范概述,USB電源
    發(fā)表于 06-24 08:00 ?4次下載
    <b class='flag-5'>USB</b>電源<b class='flag-5'>傳輸</b>技術(shù)的詳細(xì)資料說(shuō)明

    一文詳解TCP傳輸控制協(xié)議

    TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接(連接導(dǎo)向)的、可靠的、 基于IP的傳輸協(xié)議
    發(fā)表于 05-25 15:38 ?1672次閱讀
    一文詳解TCP<b class='flag-5'>傳輸</b><b class='flag-5'>控制</b><b class='flag-5'>協(xié)議</b>

    傳輸控制協(xié)議TCP是怎樣進(jìn)行工作的

    傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議
    的頭像 發(fā)表于 08-19 09:17 ?3189次閱讀
    <b class='flag-5'>傳輸</b><b class='flag-5'>控制</b><b class='flag-5'>協(xié)議</b>TCP是怎樣進(jìn)行工作的

    USB電力傳輸USB PD)和USB Type-C的不同之處是什么?

    USB 電力傳輸(USB PD) 是在一條線纜中同時(shí)支持高達(dá)100W電力傳輸和數(shù)據(jù)通信的協(xié)議規(guī)范.
    發(fā)表于 05-08 10:28 ?6147次閱讀
    <b class='flag-5'>USB</b>電力<b class='flag-5'>傳輸</b>(<b class='flag-5'>USB</b> PD)和<b class='flag-5'>USB</b> Type-C的不同之處是什么?

    SCTP流控制傳輸協(xié)議簡(jiǎn)析

    SCTP(Stream Control Transmission Protocol,流控制傳輸協(xié)議,RFC 2960、RFC 3286、RFC 3309)是一個(gè) IP 協(xié)議之上的、可靠
    的頭像 發(fā)表于 07-25 10:02 ?2733次閱讀
    SCTP流<b class='flag-5'>控制</b><b class='flag-5'>傳輸</b><b class='flag-5'>協(xié)議</b>簡(jiǎn)析

    USB接口控制傳輸包含哪幾個(gè)階段?

    控制傳輸一般在USB枚舉的時(shí)候見得多,控制傳輸包含三個(gè)階段:Setup階段、Data階段、Status階段,其中Data階段是可選的。
    發(fā)表于 09-12 10:24 ?617次閱讀
    <b class='flag-5'>USB</b>接口<b class='flag-5'>控制</b><b class='flag-5'>傳輸</b>包含哪幾個(gè)階段?

    FP6606ACLP5 USB電源傳輸3.0協(xié)議控制

    概述FP6606AC是一個(gè)簡(jiǎn)化的USB電源傳輸3.0協(xié)議控制器。集成了HiSilen快速充電協(xié)議(FCP)和高通快速充電2.0/3.0功能。
    發(fā)表于 08-02 15:57 ?0次下載

    FP6606ACMP5 USB電源傳輸3.0協(xié)議控制

    概述FP6606AC是一個(gè)簡(jiǎn)化的USB電源傳輸3.0協(xié)議控制器。集成了HiSilen快速充電協(xié)議(FCP)和高通快速充電2.0/3.0功能。
    發(fā)表于 08-02 15:59 ?3次下載

    USB電源傳輸3.0協(xié)議控制器JD6606S數(shù)據(jù)手冊(cè)

    概述JD6606S是一個(gè)集成的USB電源傳輸3.0協(xié)議控制器。符合HUAWEI快速充電協(xié)議(FCP)、超級(jí)充電
    發(fā)表于 02-04 09:05 ?1次下載
    主站蜘蛛池模板: 亚洲熟女乱色一区二区三区 | 人妻满熟妇AV无码区国产 | 国产成人免费观看在线视频 | 网红刘婷hd国产高清 | 儿子操妈妈 | 亚洲区视频在线观看 | 精品欧美一区二区三区四区 | 调教玩弄奶头乳夹开乳震动器 | 久久精品视在线观看2 | 扒开校花粉嫩小泬喷潮漫画 | 青青涩射射 | 永久免费精品精品永久-夜色 | 国产色婷婷亚洲99麻豆 | 久久精品国产首叶 | 国产精品永久免费视频观看 | 在线播放免费人成毛片视频 | 日日噜噜夜夜狠狠视频 | 爱穿丝袜的麻麻3d漫画acg | 24小时日本在线电影 | 老板吻我下身好爽到高潮 | 日本一二三区视频在线 | 国产精品视频yy9099 | 久久日本精品在线热 | 91麻豆精品一二三区在线 | 亚洲国产在线观看免费视频 | 伊人狠狠丁香婷婷综合尤物 | 岛国大片在线观看完整版 | jyzzjyzzz视频国产在线观看 | 欧美成人中文字幕在线视频 | 在线 自拍 综合 亚洲 欧美 | 国产成人a在一区线观看高清 | 网红主播 国产精品 开放90后 | 亚洲视频区| 俄罗斯9一14 young处 | 精品国产手机视频在在线 | 成人在线观看免费视频 | 18禁三级黄 | 国产 高清 无码 中文 | 色欲色香天天天综合 | 女人和男人插曲视频大全 | 晓雪老师我要进你里面好爽 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品