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传输接口代码

 

 

 

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