文档组
USB 的控制传输详解
1 USB 插入检测与枚举
当一个 USB 设备插入到接口上时,主机首先进行插入检测,检测完毕之后,设备采用 0 号端点,以缺省地址与
主机进行控制传输。进行传输的这条通道叫做控制通道。
主机完成插入检测之后,对设备进行枚举,以了解设备,并加载其驱动。这时,主机希望了解 USB 设备的情况,
需要知道它是一个什么设备,是一个大容量存储设备,如优盘,还是一个 USB 鼠标,它的数据传输能力怎么,这些
要通过获得一系列的描述符来得到。这些描述符包括设备描述符、配置描述符、接口描述符等。想要获得一个设备
描述符,就要进行一次控制传输。注意,上面这句话里所提到的“一次控制传输”是有特殊含义的。“传输”是的
一个专用的名词,一个传输通常由多个“阶段”组成,根据传输类型的不同,包含的阶段也不同。一个“阶段”通
包 含 一 个 或 多 个 “ 事 务 ”, 以 这 段 话 中 加 引 号 的 都 是 专 用 词 汇 , 更 多 及 详 情 请 参 :
http://www.usr.cc/thread-51674-1-1.html
1.1 控制传输的分类:
控制传输的用途是获得设备信息、对设备进行配置。其基本的操作就是①控制读传输和②控制写传输,此外还
有一些情况不涉及数据的传输,即称为③无数据控制传输。以上三个词汇对应的英文表述是“Control Write”、“Control
Read”和“No-data Control”。
1.2 控制传输的总体格式
控制读传输包含三个阶段:建立阶段、数据阶段和状态阶段。
建立阶段只有一个建立事务。建立事务参:http://www.usr.cc/thread-51675-1-1.html
数据阶段有一个或多个 IN 或 OUT 事务。这里之所以会有多个数据事务,是因为一个事务可能传不完所有的数
据,这时才需要多个事务。从而也决定了,这多个事务是同类型的,一个是 IN,其它的就都是 IN.反之亦然。比如建
立事务表明要获得设备描述符,那么这个数据阶段就都是 IN 事务,从设备得到描述符。
状态阶段有一个与数据阶段相反的事务。如果数据阶段是 IN,从设备读取了数据,那么这个阶段就是一个 OUT
事务,从主机发给设备数据,告诉设备读取数据是否收到了。相反,如果数据阶段是 OUT 事务,主机向设备传数据
了,那么状态阶段就是一个 IN 事务,设备告诉主机数据是否收到。
评论3