uboot之usbtty (二)

1.1.2.2                   Endpoint Transfer Descriptor(dtd)

Dtd描述需要接收或發送的數據格式,結構如下,

  Next link pointer存放下一個dtd所在的物理地址,其中T表示是否是DTD

鏈表的最後一個DTD.ioc用於設置該DTD傳輸完之後是否產生xfer complete interrupt,total bytes表示該dtd中待傳輸或者接收的數據長度,其中page0爲數據存放的起始頁,每4096一頁。Statusdtd的狀態,current offset用於保證4k對齊。Frame Number只對等時傳輸有效。

 

1.1.3   Device operational model

 

根據上面的QHdtd數據結構,實際上已經瞭解傳輸的包以及一些傳輸方式。

如果熟悉了usb的枚舉過程,特別是USBtty的枚舉過程,操作模型這塊是很容易理解的,初始化usb device controller之後,等待枚舉過程結束之後 就是bulk傳輸的過程。這裏講講兩個部分,一個是狀態機,這個在枚舉過程中佔有很重要的位置。

 

講過很多的枚舉過程,對這個狀態轉換還是比較清晰的,reset有兩部分,當host發送reset命令時,一次是得到device address,另一次reset用於決定是否是HS(因爲上電枚舉初始化爲FS,這個在上電過程中說到)。之後就是以device address爲地址的枚舉過程。說到枚舉過程,這裏注意USB device是不主動發送數據的,其實bulk傳輸有點類似等時傳輸,枚舉過程中,有個設置interval time對於bulk HS而言,就是查詢的時間的間隔,在主機端發送接收數據請求給device,而device又沒數據發送時,超過3ms之後,就被掛起。

dtd的管理,上面說到在QH中掛載DTD鏈表時,在傳輸完一個個DTD之後,需要一個鏈表的管理,從而保證DTD的重複使用。實際上管理方式也很簡單,多添加兩個指針head pointer tail pointer即可,如下圖所示

1.1    文件組成

1.1.1   源代碼結構

相關源代碼位於CVS的“mx25/boot/ u-boot-mx25/”目錄下,包含下面子目錄:

(1)   common:系統通用代碼

(2)   drivers/serial/usbtty相關通用代碼

(3)   drivers/usb/gadget/usb設備相關代碼

1.1.2   組成文件

該部分組成文件包括下面文件:

1/common/stdio.c:系統通用標準輸入輸出接口代碼

2/drivers/usbtty.c 系統通用USBtty設備接口代碼

3/drivers/usb/gadget/mx25_udc.cUSB設備相關代碼

4/drivers/usb/gadget/core.c:設備枚舉和urb傳輸接口代碼

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章