USB通訊協議 && 數據傳輸


USB2.0通訊協議(spalish)

 
1.包(packet)
包是USB系統中信息傳輸的基本單元,所有數據都是經過打包后在總線上傳輸的。USB包由五部分組成,同步字段(sync)、包標識符(PID)、數據字段、CRC和包結尾字段(EOP)。
 
包類型(由PID區分):
令牌:OUT   IN  SOF  SETUP
數據:DATA0  DATA1
握手:ACK  NAK  STALL
特殊:PRE
 
2.事務(transaction)
USB系統上一次接收或發送的處理過程稱為事務。事務處理的類型有:輸入事務,輸出事務,設置事務,幀開始,幀結尾
還有一個特殊的事務類型:拆分事務(split transaction),用來支持高速hub上連接低速或全速設備。這種特殊事務類型只是和host和hub有關,但是對設備是透明的。
 
 
3.傳輸
控制傳輸、中斷傳輸、批量傳輸、等時傳輸
 
所有的四種傳輸方式都由上面的事務來處理,也就是說 傳輸由不同類型的 事務組成,事務由不同類型的 的收發組成
 
3.包傳送和frame的關系?幀(frame)和微幀(microframe)
USB總線上的傳輸由幀組成。
低速或全速設備通過幀來傳送,周期1ms
高速設備通過微幀,周期125us
 
host每1ms產生SOF包(相當於微幀的時候是每8個微幀產生一個SOF包)
一個幀可以包含多個事務。每N個幀總線會分配帶寬給中斷傳輸或是等時傳輸
 
可以這么理解:總線時隙分成一個個幀,每個幀里面由事務組成。host controller的作用就是根據傳輸類型合理分配這些事務在總線上的調度。
 
 
USB  最主要的的是要理解   USB主機發送命令給設備,設備要對主機的命令進行響應, USB通訊的基本單位為 “包”   理解好“包”這個概念是學習USB的關鍵所在。 
包有如下分類: 
分別是令牌包、數據包、握手包和特殊包(其實是由PID決定的) 
令牌包:可分為輸入包、輸出包、設置包和幀起始包(注意這里的輸入包是用於設置輸入命令的,輸出包是用來設置輸出命令的,而不是放據數的)其中輸入包、輸出包和設置包的格式都是一樣的: 
SYNC+PID+ADDR+ENDP+CRC5(五位的校驗碼) 
幀起始包: 
SYNC+PID+11位FRAM+CRC5(五位的校驗碼) 
數據包:分為DATA0包和DATA1包,當USB發送數據的時候,當一次發送的數據長度大於相應端點的容量時,就需要把數據包分為好幾個包,分批發送,DATA0包和DATA1包交替發送,即如果第一個數據包是DATA0,那第二個數據包就是DATA1。但也有例外情況,在同步傳輸中(四類傳輸類型中之一),所有的數據包都是為DATA0,格式如下: 
SYNC+PID+0~1023字節+CRC16 
握手包:結構最為簡單的包,格式如下 
SYNC+PID 
下面舉幾個例子來說明USB的通訊過程: 
1:主機想要向設備傳送一串數據。 過程如下: 
(1)   主機向從機發送 “令牌包”,令牌包的類型為輸出包,表示主機要向從機發送數據了。 
(2)   主機向從機發送完令牌以后,USB處理器件根據發送的令牌,會將中斷狀態寄存器標志置位,從機CPU通過查詢USB處理器件的中斷狀態寄存器,對主機的令牌包進行響應 
(3)   從機判別出中斷類型,於是,准備從主機接收數據。 
(4)   從機准備好了,於是主機開始發送“數據包” 這時,USB處理器件會自動將從主發送過來的數據放如它的內部緩沖區內,接收完這個數據包后,從機向主機發送“應答包”  
這就是一個完整的通訊過程。 
由以上可以看出,USB若是想要傳送數據,那么主機必須先發一個 IN 或OUT的令牌包,然后發送DATA0,或DATA1數據包。 
簡單的用現實生活中的事件進行描述:  老板想讓員工去做一件事情,老板 先會發出命令,告訴要做什么事情,員工准備好以后呢,老板再把做這件事情的經費發放給員工,當員工把發放的經費清點以后,發現數目正確,他會給老板一個回應信息,告訴老板,錢已經收到了,而且數目正確。 
老板想讓員工做的事:  對應USB通訊里的令牌包。 
老板想要發放的經費:  對應USB通訊里的數據包。 
員工給老板的回應:    對應USB通訊里的握手包。 
這里尤其需要注意一個問題就是: 
USB主機向設備發送令牌包的時候,接收令牌是有USB器件來完成的,而不是有從機CPU來完成的,如主機發送一個如下的令牌: 
SYNC+PID+ADDR+ENDP+CRC5 
USB器件回根據PID的類型來判斷是哪種類型的令牌 根據ADDR的值來判斷是否是和自己通訊,根據ENDP的值來判斷是和哪個端點進行通訊,根據校驗來判斷,數據傳送是否無誤。根據以上的令牌包信息,USB器件會將其內部的中斷狀態寄存器相應的位置位,從機CPU可以查詢這個中斷狀態寄存器來進行相應的操作。


免責聲明!

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



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