對于USB傳輸大體有個概念,下一步就來看看到底USB上傳的什么東西,以什么格式傳數據,先不涉及端點的概念。
各種總線的數據傳輸都是以固定的層次協議進行的,USB當然也不例外。所謂的層次也只是個抽象的概念罷了,就是表達一種依附關系,上層要依賴與底層,上層以底層為基礎,上層只需要關心自己的東西就行了,如果你還不明白,那就繼續看,學習一個東西不可能一兩句話說的明白一個點,需要全面了解后才能清楚各個點。
要實現兩個機器(機器的范圍比較廣,可以是電腦,交換機,單片機)的通信總是要有一個載體才可以,對于機器當然是電平高低為載體,具體的說機器甲要告訴機器乙一件事情(比如說一條指令),那么機器甲可以通過一根線(串行數據總線)連到機器乙的一個IO口上,甲發送一個個的高低電平,乙固定時間檢測自己的這個IO口,然后逐個記錄下放到自己的緩沖里,這樣乙就收到甲送的數據了。上述就是一個簡單的數據鏈路層(計算機網絡里這么叫)的描述,這一層要保證的就是甲發的每一位數據,乙都可以正確及時的接受,并且對在傳輸過程中出錯的數據做出反應。其實比數據連路更底層的還有物理層,這就是真正的物理介質,對于機器就是電線了,數據就是電線上傳輸的電壓,USB是用的四線,兩個電源,兩個數據線。
這里也打個比方,比如人與人進行交流,我們當然是通過說話了,物理層就是空氣和傳輸的聲波,數據鏈路層就是我們說的每一個字,物理層就是空氣,負責把我們說的話轉換成聲波傳給對方,數據鏈路層負責讓對方能正確的聽到每個字,如果聽的不清可以告訴對方重新說一遍。
經過上述的兩個底層,就可以保證每一位數據可以正確的傳到對方那里去。下一步的工作當然是解析數據代表了什么,一般來說,數據都是以一串數為單位,一般稱為一個包,機器間傳輸都是以一個包為單位傳出,就像人們說話都是以一句話為單位輸出一樣。每一個包包含有許多位數據,這些數據又分段表示不同的意義,如圖一,這是一個USB令牌階段的包,Sync是同步數據(相當于說話時先打個招呼,告訴對方要跟他說話了),PID是包標示(告訴對方這個包是干什么用的),ADDR是對方的地址(叫對方的名字),ENDP是用端點幾通訊(先不介紹這個),CRC5是校驗位(判斷這個包是否在傳輸中出錯),EOP是包結束。
|--------------------------------------------------------|
|???Sync??|??PID??|??ADDR??|??ENDP??|??CRC5??|??EOP??????|
|________________________________________________________|
?
??????????????????????圖一
USB的數據包又分為三種,一個是令牌包,一個是數據包,另一個是握手包。每一次的USB通訊事務處理都是以令牌包開頭,告訴對方要跟誰說話,這句話是用來干嘛的。如果要求有數據傳輸,則下一步就是數據包,另外如果要求對方要有反饋,則會發出握手包。令牌包又簡單的包括OUT,IN,STEP三種類型,OUT是用于主機告訴設備主機要向USB設備發送數據,IN是用于主機告訴設備要上傳數據,而STEUP是用于主機向USB設備發送配置信息,在枚舉過程中會用到。另外數據包和握手包的具體格式什么的,可以參照詳細的協議。
可以看到在所以的通訊過程中,主機都是發起者,不管是主機發送數據到USB設備還是USB設備發送數據到主機,都必須收主機控制。圖二為一次事務的過程
???
????????令牌階段???——》????????數據階段?????——》?????握手階段
????????????????????????????????圖二
這個過程可以這樣描述,甲和乙對話,甲是老板,乙是職員。第一節已經講過了,乙面試就是枚舉,在這個過程中,甲多段的發送STEP令牌包給乙,乙收到后如果要反饋數據,就發數據包給甲,甲正確接收后,跟甲握握手,表示這次對話成功。
乙被正式錄取后,甲會分派任務(OUT),這時甲對乙說有任務給你(令牌階段),然后乙就開始聽,甲說你的任務就是記錄數據并且上報(這段話就是數據包),乙說好的(握手包)。
乙開始正式工作,并且記錄數據。過了一段時間,甲開始要求提交數據(IN),乙把數據報告給甲(數據階段),甲說好(握手成功)。這里乙不能主動的去向老板匯報,只能被動的干活。
USB之數據包闡述
- usb(257400)
相關推薦
USB數據包的同步域可以同步主機端和從機端的時鐘,這個怎么理解
在看u***,書上說u***數據包的同步域可以同步主機端和從機端的時鐘,這個怎么理解u***接口沒有時鐘線,我又想到了單片機串口的波特率,不知道有沒有關系,向大家請教了這個簡單的問題,很想知道答案
2019-07-02 18:06:13
USB入門總結(3) 數據包闡述(轉載)
||________________________________________________________|圖一USB的數據包又分為三種,一個是令牌包,一個是數據包,另一個是握手包。每一次的USB通訊事務處理都是以令牌包開頭,告訴對方要跟誰
2011-11-17 08:29:01
USB控制傳輸間歇性孤立數據包
的轉移如UBFultUR.PNG所示。而不是捆綁在一起作為一個單一的控制轉移,比格解釋它作為兩個獨立的,不相關的數據包(一個設置TXN和OUT TXN),并檢測后續數據包作為孤立的數據包,Beagle
2018-11-06 14:34:12
數據包解密必須要配置哪些
1、數據包解密必須要配置 Netkey,Appkey,Devkey, IV Index的,可以找一下配置接口。2、廣播包需要 37,38, 39 三通道同時抓才行,一般使用的是專門的儀器。
2021-07-22 08:04:06
AXI流數據包傳輸問題
嗨eveyone,我是這個論壇的新人。如果我弄錯了,我道歉。我正在嘗試使用AXI Stream協議傳輸數據包。這些數據包包括512 * 32位數據。使用1 kHz時鐘使能發送重新生成的數據包。我
2019-04-15 13:51:29
C6678 SRIO數據包接收方式
? ? C6678 SRIO數據包接收有兩種方式,一種是DestIDs與DeviceID匹配,另一種是多路徑操作,第二種方式如何工作?謝謝,
2018-06-21 01:04:23
CC1101同時接收兩個數據包的話,會怎么處理?
CC1101 當有兩個數據包同時給一個CC1101,接受側接受一個數據包之后放在RXfifo內,未讀取,第二個數據包可以接受放在上一個數據包RXfifo之后嗎?還是將上一個數據包覆蓋,還是接收不到?CC1101是怎么處理的?
2016-04-18 15:04:34
CC1101在快速接收兩個數據包的處理方式是怎么樣的?
CC1101在快速接收兩個數據包的處理方式是怎么樣的?當接受到一個數據包之后,來一個中斷,在中斷處繼續來著接受或者寄存器配置RX完會后繼續保持為接受狀態,當在讀取第一個數據包的時候,還未讀完數據
2016-04-05 15:57:53
CC1101在快速接收兩個數據包的處理方式?
CC1101在快速接收兩個數據包的處理方式?當接受到一個數據包之后,來一個中斷,在中斷處繼續來著接受或者寄存器配置RX完會后繼續保持為接受狀態,當在讀取第一個數據包的時候,還未讀完數據,又來了一個數據包
2016-03-10 14:04:55
CC2540能否抓取與Android手機之間的數據包?
現在使用Android手機與CC2564MODN進行通信,請問利用packet sniffer和CC2540 USB Dongle能否抓取cc2564MODN與Android手機之間的數據包?
2016-03-31 16:35:19
CH559能否一次接收超過USB設備端點大小的數據包?
數據長度為256字節,讀卡器不能收發數據。上位機驅動的端點收發設置是否要調整為跟CH559的USB支持的最大64字節的數據包
2022-06-10 07:16:41
CYUSB3013在ISO模式下配置設備時,最后一個數據包缺少LPF設置,這是為什么?
125us(導致每個 USB 微幀有 3*11 KB 的數據),設備按預期執行。 但是,當我們將突發長度設置為 12 時,設備會以 12 KB 的數據進行響應,但最后一個數據包缺少 LPF(突發結束)設置。 有人知道為什么會發生這種情況嗎?
2024-02-26 06:07:22
EDK到ISE集成無法接收數據包
你好我正在使用ML506板,我已經將以太網從EDK集成到ISE,邏輯沒有區別。在SDK中我發送ARP請求,我收到了ARP回復以及從GUI發送的UDP數據包。我在ethereal中驗證了它,并在
2020-03-25 09:43:19
FixDATA RANSFER()失敗導致丟失數據包
嗨,大家好我用C流拖纜(最新版本)從USB板(3014)讀取數據,當源數據通過分組增加包時,通過檢測包的報頭,發現丟失了一些包。BTI檢查在USBAnalyzer中傳輸的所有數據包,表明所有數據包
2019-04-25 13:57:11
LPC55S69 SDK HID如何快速發送HID數據包?
LPC55S69 SDK:版本 2.12.0。 示例程序:dev_hid_generic_bm。USB速度:使用高速端口平臺:LPC55S69 EVK此演示接收 HID 數據包,并立即將其發回。當我
2023-04-19 06:54:38
LS1046上的UDP數據包順序是怎樣的?
我的 cpu 是 ls1046,所有以太網都在 DPAA1 上工作。當MAC10 收到UDP 數據包時,它有一些無法糾正的亂序數據包。我們的板子用MAC10跑10G,集成了FMC工具,運行FMC工具
2023-03-30 07:07:16
LS1046如何使用iperf3工具測試TCP數據包傳輸?
LS1046:
我嘗試使用iperf3工具測試TCP數據包傳輸。
找到一些速度為 10Mb/s 的重傳。數據包大小為 60 字節。(網絡鏈接為 100Mbps)
ethtool notify
2023-05-10 08:07:18
LWIP UDP數據包長度為什么不一樣?
服務端和開發板DUP客戶端 使用同樣的命令,互相發送,之后抓取UDP數據包)現象如下:1 - 計算機UDP服務端發送數據包2 - 開發板UDP客戶端發送數據包兩者命令碼是一樣,但是數據包長度為什么不一樣
2019-10-31 04:35:29
LabVIEW 與其他語言TCP通信,數據包解析求助
做為下位機與上位機進行TCP通信,上位機非labview編程語言設計,切已經定好包數據格式:幀頭EB90+兩個字節數據包長度+包數據,不能更改。以前做的TCP通信,還有LV自帶的例子,都是先發固定
2016-09-14 09:15:40
NUC505如果USB發送一個512Byte的數據包,發送不出去是為什么?
] = {0};其中的64應改為512,這是HOST向USB虛擬串口發送大與64字節數據包時發現的。
2. 如果USB發送一個512Byte 的數據包,是發送不出去的。
改正方法:
對于512Byte 的數據包,再補充發送一個0長度的數據包。
或者, 每次發包的最大長度定為511
2023-06-16 06:15:23
PC端就是接收不到數據包是為什么?
我現在有一塊定制的C6455的開發板,使用intel的LXT971 PHY芯片,使用MII模式,連接方法都是參考DSK6455的。現在的情況是,DSP能夠接收到pc發送過來的數據包,但是pc接收
2020-05-22 08:51:57
PIC32不能接收數據包
。就像板沒有收到任何數據包一樣,我把ICMP服務器/客戶端放在板上,這樣我就可以告訴PIC32可以成功發送數據包,但是不能接收。我用調試器檢查:從我的PC發送的包成功地生成了ISR。我發現在內存中修正了
2019-10-08 09:27:45
SI4432數據包較短,加長數據包以后尾部是亂碼
小弟最近在用STC11L08X+SI4432做通信,設置數據包長度為14個字節的時候可以正常通信也沒有錯碼,但是一旦我將數據包長度擴大超過了14個字節后,從FIFO中讀取出來的數據第14字節以后
2014-12-08 14:41:41
SL811HS和USB高速設備數據包丟失該怎么辦?
現了。主機可以成功地向設備發送請求命令,但無法獲取數據。在多包數據級中,主機只能接收第一個分組,所有的數據包都丟失。請把你的手給我。謝謝。最佳問候
2019-08-02 07:25:22
STM32H7 USB自定義類,當通過端點2發送IN數據包時不會觸發怎么處理?
......在數據輸出階段結束時調用DataOut回調是很好,因為所有接收到的數據都是可用的,但是對于 DataIn,我想在數據開始階段得到通知,即被通知收到一個 IN 數據包,然后通過它發送我自己的數據
2023-01-05 08:42:37
STM32H750如何提高數據包大小?
我使用STM32H750官方的VCP例程,FS模式。
程序默認CDC_DATA_FS_MAX_PACKET_SIZE是64位,我試著修改最大只能到256,如果再大會導致接收不到數據。芯片資料MPSIZ設置范圍可以到2047。
我想提高數據包大小應該怎么修改
2024-03-07 06:12:31
STM32H7接收數據包異常,一包接收的數據出現兩包發送的內容怎么解決?
);__HAL_UART_DISABLE_IT( huart1, DMA_IT_HT);
2、發送數據包1
2024-03-08 08:05:24
UART數據包設計與解析
上一節講到起止式SST(Start-Stop-Type)幀結構協議,該協議利用幀頭、長度、校驗構建幀結構,基于幀結構能實現對數據包的可靠、準確傳輸。應用層數據...
2021-12-16 06:15:13
blueNRG中的數據包計數器怎么發送
嗨,大家好, 我想計算我在廣告頻道發送的數據包。我該怎么做?也許我可以用任何功能手動發送每個數據包?然后我會在發送一個數據包后增加我的計數器。 BR 瑪麗W以上來自于谷歌翻譯以下為原文 Hi
2019-02-14 16:50:32
esp8266如何接收完整的數據包嗎?
Beacon 數據包,但數據包有問題。
只收到部分數據包。
使用回調:static void sniffer_callback(uint8_t *buffer , uint16_t length
2023-05-19 09:58:11
labview串口解析數據包思路是怎么樣的?
各位大神,小弟labview初學者,現有一個任務如下:串口設置:波特率:115200數據位:8bit校驗:無停止位:1 串口描述:上電后MCU以每秒200次的速率向串口發送數據包。數據內容為從0
2017-06-30 13:26:40
odbus實現主機對從設備讀取數據包和從設備寫入數據包
六.modbus實現主機對從設備讀取數據包和從設備寫入數據包1.準備好硬件上能精確到1ms的定時器2. 先完成一個MODBUS所需要的軟件上的定時器void Timer2_Init(void
2022-02-22 07:59:56
uart引導加載程序數據包長度無效
加載程序的例子。我修改的項目支持UART bootloader和它不工作。我收到以下錯誤:“引導程序報告錯誤的數據包長度無效:數據包的長度不符合要求的數據包格式”我ahvedouble和三倍檢查我的設置
2019-09-26 12:21:10
為什么ESP時不時會丟失UDP數據包?
完成后,我發現有些數據包時不時會丟失,所以我切換到 TCP 協議,這顯然帶來了自己的挑戰。我目前正在使用一些 TCP 套接字測試工具來建立與 ESP8266 的連接并向其發送命令。問題是,ESP 似乎有
2023-02-28 07:10:49
從機向主機發送數據時,數據包會出現丟包
我使用2541作為從機向2540主機發送數據,通過串口從2540接收數據,完全單向傳輸。每5ms發送一次數據包,一個數據包有7個字節。算下來速度也不算太快,每秒鐘7*200=1400個字節但是從串口
2020-03-18 09:46:01
低功耗藍牙(BLE)MTU交換數據包
在做數據傳輸時不超過這個最大數據單元 MTU交換通常發生在主從雙方建立連接關系后(參見"一分鐘讀懂低功耗藍牙連接數據包") 做個對比就可以知道BLE MTU 比較小(不過新的BLE
2018-11-09 09:33:19
低功耗藍牙(BLE)MTU交換數據包
每次在做數據傳輸時不超過這個最大數據單元 MTU交換通常發生在主從雙方建立連接關系后(參見"一分鐘讀懂低功耗藍牙連接數據包") 做個對比就可以知道BLE MTU 比較小(不過
2018-11-08 10:08:37
關于K2_STK_DSP里的GE例程接收數據包的MAC地址問題
:88:00:01:01時,DSP才能收到,下列幾張圖闡述上述情況:首先是xcap軟件建立數據包的圖:建立了兩種數據包,第一種數據包(第一行)源MAC地址為88:88:88:00:00:01,目的MAC
2018-08-03 09:18:46
在USB dongle中燒入了sniffer_fw_cc2540_u***.hex看不到相關的數據包?
端可以看到相應的數據包,但其后掃描、連接、讀寫等過程在sniffer中都看不到相關的數據包,請問是在哪里出了問題?在GAPRole_Init中固定gapRole_AdvChanMap = 0x27;在sniffer中如下圖選擇:還是不行,求指教。謝謝!
2020-08-28 13:18:21
如何使用FRDM-KW41Z devkit和Wireshark創建一個zigbee數據包嗅探器?
我很好奇使用 FRDM-KW41Z devkit 和 Wireshark 創建一個 zigbee 數據包嗅探器。 是否有捷徑可尋?我是否需要 USB 加密狗才能嗅探 zigbee 數據包?
2023-04-03 06:37:20
如何發送音頻/視頻ISOC數據包?
我想開發帶有音頻和/或視頻類的 USB 主機應用程序。是否有任何工作示例項目或代碼片段?我檢查了 STM32 HCD 驅動文件 - -ux_hcd_stam32_periodic_schedule.c,但它總是生成 EP_TYPE_INTR 數據包。如何發送音頻/視頻 ISOC 數據包?
2022-12-26 08:18:26
如何在沒有收到另一個udp數據包的情況下簡單地發送一個udp數據包?
大家好!
我正在嘗試發送一個簡單的 udp 數據包,如下所示:
sk = net.createUDPSocket()
sk:send(6000,\"255.255.255.255
2023-04-27 06:17:57
如何強制ESP32-S2向Station和SoftAP接口發送UDP廣播數據包?
我有一個特別的問題。我有兩個ESP32-S2設備,一個配置為 Station + SoftAP,另一個連接到第一個(作為站)。兩個設備都設置為在同一端口上相互發送和接收 UDP 廣播數據包。他們都
2023-03-02 08:09:16
如何檢測數據包丟失?
問題:我想做一個RFC2544速度測試。有人知道如何檢測數據包丟失嗎?包數據中是否有UNIQ標識符(什么是RF2544數據包結構?)……我找不到這個信息。謝謝。
2020-03-13 08:56:22
如何用虛擬數據填充數據包
如果主機要發送長度不為512倍的數據流,則最后一個包不會自動提交給USB,因為它小于512字節。為了提交最后一個數據包,主機可以做兩件事之一:它可以用虛擬數據來填充數據包,以便使它精確地長512字節
2018-12-28 15:24:15
如何獲得ESP32端接收到的數據包數量?
我們目前正在開發基于ESP32的新產品,我們想做一些認證。我們正在使用 ESP RF 工具在 Tx 數據包、Rx 等中設置產品。這部分按預期工作。我們使用 ESP RF 工具進行適應性測試
2023-04-13 07:25:08
如何設置LWIP的傳入數據包大小使其可以接受大于16字節的數據包呢?
錯誤并無限期掛起。如何設置傳入數據包大小,使其可以接受大于 16 字節的數據包?請查看我的一些以太網配置的附件圖片
2022-12-20 07:46:42
如何連接其他USB設備后的失敗數據包?
你好,我使用CYSUB3014,Stuuler-C,AUB3.0我有很好的速度和沒有失敗的數據包。但當我連接USB閃存時,拖纜打印所有故障包,并需要重置裝置。
2019-09-04 14:42:28
怎么從PIC32MZ直接發送UDP數據包?
嗨,我想把帶有命令數據的UDP數據包從PIC32MZ發送到終端控制設備。但是,我不知道如何更改UDP客戶端和UDP服務器項目示例的TCPIP示例。我需要知道如何設置UDP的信息,以便UDP
2019-10-16 12:30:34
怎么跟蹤每個連接間隔的數據包數
你好,我想知道是否有一種方法來跟蹤每個連接間隔發送的數據包的數量。實際使用一個延遲等于我的連接間隔的計時器來計算我使用BLE堆棧API推送數據的次數。但我正在尋找其他解決方案。我需要這個控制來確保我的移動設備不會丟失這樣的數據包。謝謝您,
2019-09-16 06:14:45
接收CAN公共汽車上數據包的代碼
應用程序: 這個樣本代碼接收 CAN 公共汽車上的數據包, 使用協議中斷的檢測來與 CAN 公共汽車通信的失敗率匹配, 并動態調整 M253 CANFD 的失敗率 。
BSP 版本:M253系列
2023-08-29 06:24:08
有關短數據包的slave fifo傳輸的問題
,所以我想我必須使用PKKATE來傳輸短數據包,然后問題就來了。我找不到正確的數據,有人能告訴我這個問題嗎?手冊上說,PKTAN是在最后一個字被轉移,當我傳送一個短的數據包,我可以繼續傳輸一個完整
2019-05-10 15:14:17
藍牙數據包的抓取與分析!
本帖最后由 bbsc 于 2017-5-7 17:10 編輯
各位大佬好,我想用電腦抓取藍牙數據包,然后用wireshark分析,需要哪些硬件協助?最好便宜點(學生dang)需要測試的設備支持
2017-05-07 16:55:28
請問51串口怎么發送數據包
想利用定時器每隔50ms發送一串數據包,數據包里最后兩位是變量,比如{0XAA 0XBB 0XCC 0XDD 0XEE 0XFF 0XAB 0XAC 0XAD 0XBB}最后0XAD和0XBB 是變量,利用串口方式1 請問這個怎么發送?求個思路
2019-02-18 23:23:13
請問DSP硬件定時器怎么實現不同優先級數據包的發送速度不同
在調度到一個數據包發送給物理層時,有算法能求出它要延時幾毫秒后發送。問題是一個數據包延時時,可能調度算法要發送另一個數據包,也可能另一個也要延時,怎么通過硬件定時器實現不同速率數據包之間互不影響的延時后發送
2019-01-24 11:27:22
請問SRIO每次出傳輸數據包的個數,數據包負載大小怎么設置?
本帖最后由 一只耳朵怪 于 2018-6-19 14:25 編輯
DSP一次發送16個數據包,每個數據包256字節,一次傳輸4096個字節。如果現在DSP向FPGA發送2048字節數據,后面2048個字節它自動為零,造成效率變低。請問如何配置每次發送數據包的個數讓它只發送有效的數據?
2018-06-19 05:22:46
請問使用CC2540EMK-USB Packet Sniffer怎么抓取數據包?
Hi,我手上有TI的CC2540 USB DONGLE, 并且安裝了TI packet sniffer。但是由于BLE是調頻的,我應該如何設置packet sniffer來隨著我的BLE應用來調頻,進而抓取空中的數據包?
2020-04-02 09:38:33
請問在串口通信中數據包的幀頭和幀尾怎樣加入到數據包?
,請問在串口通信中,數據包的幀頭和幀尾(比如0x55,0xaa)是怎樣加入到數據包的?是不是定義一個數組,將幀頭和幀尾設置成0x55,0xaa,再將整個數組發送?在發送包含幀頭幀尾的數據包時,是否需要
2020-03-30 05:55:39
請問如何在嗅探器應用程序中獲取wifi數據包速率?
我想構建一個應用程序來測量 WiFi 信道負載。這需要計算接收到的數據包的空中時間。我的做法是:1. 將ESP32配置為混雜模式,開啟接收各種數據包。2. 在rx回調中,獲取包速率和包長度。3.
2023-04-14 07:14:51
請問怎么通過藍牙發送具有數據頭和數據尾的數據包?
項目需要使用藍牙來發送內容不固定的數據包,并且數據頭和數據尾最好具有唯一性,不會與別的內容相重復。 以前使用藍牙都是用的模塊,藍牙模塊內部不是很清楚怎么給數據處理的。這里請教下各位能否用AT指令來做數據包的頭和尾?是否需要寫通信協議還是說已經有例程?
2019-04-25 22:45:32
請問藍牙USB Dongle是否可以抓藍牙2.0數據包?
各位社區朋友, 現在藍牙USB Dongle可以抓藍牙4.0數據包,是否可以抓2.0數據包呢? 有沒有只抓藍牙2.0,或者藍牙2.0/4.0數據包同時抓的USB Dongle? Honggui Li
2019-09-26 10:32:17
造成UDP數據包丟失的原因?
芯片時遇到了使用 TCP 的延遲問題,所以我想“我將使用 UDP”。這個想法是我們在網絡中,所以數據包丟失應該非常低,如果我在 X 時間內沒有收到響應作為備份,我可以處理重新發送數據。
無論如何,我寫了
2023-06-02 13:46:39
評論
查看更多