[USB波形分析] 全速USB波形數據分析(一)


在之前的文章一次CAN波形分析之旅里,根據示波器采集的波形數據,詳細地分析了CAN通信。今天來分析USB數據,還是同樣的流程,但是這次使用matplotlib來協助分析。

USB基本波形

USB通過一對差分信號進行數據傳輸,這對差分信號叫D+和D-,用示波器抓取一段D+和D-的信號,保存成CSV格式,用matplotlib繪制該信號:

 

分了方便分析,我們將D+和D-分別繪制:

 

標記數據包(Packet)的組成:

 

進一步細化數據包(Packet)的內容

 

USB數據分析

起始幀數據包(FRAMEPACKET)

全速USB會每隔1毫秒發送一包起始幀數據包(FRAME PACKET),由PID,FRAME_NUMBER和CRC三部分:

 

 

PID(Packet ID)為數據包標識符,為8位長度,低4位為標識符數值,高4位值為低4位數值按位取反。起始幀數據包對應的PID為1010 0101(最左側為最高位,下同)

這里需要注意,USB數據流先傳輸最低字節的最低位,同時按照NRZI方式編碼,即(值不變表示數據'1',值發生改變表示數據'0')。

 

令牌數據包(TOKEN PACKET)

令牌數據包由PID,ADDR,ENDP和CRC四個段組成。一共有三種令牌:

  • IN
  • OUT
  • SETUP

 

令牌IN對應的PID為0110 1001

 

令牌OUT對應的PID為1110 0001

 

令牌SETUP對應的PID為0010 1101

 

 

數據包(DATA PACKET)

數據包由PID,PAYLOAD,CRC三個段組成,

 

 

DATA1對應的PID為0100 1011

 

握手包(HANDSHAKE PACKET)

握手包只包含PID段,全速USB一共有3種握手狀態

        • ACK

報告數據已經被成功收到。

      • NAK

報告設備臨時無法發送或接收數據。也用於在中斷事務期間通知主機沒有要發送的數據。

      • STALL

設備發現自己處於需要主機干預的狀態(端點停止,或者不支持控制管道請求)

 

 

ACK狀態對應的PID為1101 0010

 

 

NACK狀態對應的PID為0101 1010

 

 -----------------------------------------------------------------------------------END

[參考資料]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM