Uboot之usbtty
目錄
1. usb device 總體框架
2. 文件組成
3. 模塊劃分
1.1 Usb device總體框架
1.1.1 邏輯結構
Freescale Mx25中USB部分有兩部分結構組成,如下圖
對於支持otg,使用的接口是UTMI,而在utmi部分也提到該邏輯結構,
從這點來看,如果想要支持otg,選擇的模式就是UTMI接口,這在寄存器中也有相應配置。
1.1.1 Device data structrues
Freescale的USB部分文檔結構很清晰,我們知道USB device的數據結構和
host的有區別,這裏只介紹它的device結構。包括QH和DTD,總的數據結構如下,
可以看到ENDPOINTLISTADDR寄存器存放所有端點中0號OUT端點的起始地址,硬件上通過該寄存器可以知道所有端點QH的地址。
QH結構之後是DTD鏈表,至於長度可以由你傳輸的數據決定。不過對於usbtty傳輸來說,bulk傳輸在FS下最大能達到64字節一包,而HS下可以達到512字節一包。
1.1.1.1 Endpoint Queue Head(QH)
Qh的結構如下圖所示,
對於USB傳輸,無論四種傳輸的那一種,都與QH結構由很大的關係,比如Next dTd point 填寫的就是DTD鏈表中頭節點的物理地址,max packet Length爲傳輸最大包長,ios用於表示是否迴應setup包的傳輸,zlt表示是否選擇構建0長傳輸包。而最後的setup buffer 8字節正好setup包的大小,在控制傳輸時,讀取setup數據正在此buffer中。mult用於根據不同傳輸模式選擇會話數目的多少,對於中斷傳輸,一次只能一個transcation.
這裏特別說說zlt的使用。Usb中構建包的原則爲二種情況,最後一個包長度小於最大包長,如果最後一個包長度長度爲最大包長,這時有兩種情況。
一般情況下,0長包是必須存在的,否則在傳輸正好最大包長的數據時往往會出現錯誤,需要重發一個0長包。