USB EHCI 数据传输处理:分裂传输与同步传输解析

需积分: 50 27 下载量 16 浏览量 更新于2024-08-08 收藏 2.8MB PDF 举报
"本文主要介绍了USB EHCI(Enhanced Host Controller Interface)控制器驱动中的数据结构和分裂传输过程,特别是针对IN和OUT型传输的处理方式,以及如何通过C-Split和S-Split机制来解决速度不匹配问题。" 在USB EHCI协议中,分裂传输过程(Split Transaction Process)是为了解决高速设备与全速设备之间速度不匹配的问题。这个过程主要包括了New、Pending、Ready和Old四种状态,确保数据的有效传输和主机的高效响应。 2.4 分裂传输过程详细说明: 1. **New** 状态:这是传输开始时的状态,持续时间不超过1个微帧,用于初始化传输。 2. **Pending** 状态:设备正在传输数据,主机等待数据完成,最长不超过4个微帧。 3. **Ready** 状态:传输已完成,等待主机接收结果,最长不超过2个微帧。 4. **Old** 状态:传输完全结束,TT(Transaction Translator)中的Buffer可以被复用。 对于**上行方向(IN型传输)**,当TT接收到超过2个字节的数据时,它会立即响应Host的C-Split,发送已接收的数据,并通过PID(Packet Identifier)的MDATA或DATA1/0标识是否有更多数据未传输。Host在接收到MDATA后,应在下一个微帧中再次发起C-Split请求,直到收到DATA0/1数据包,表明传输结束。 对于**下行方向(OUT型传输)**,Host会将大包拆分为最大188字节的小包,通过S-Split在连续的微帧中向TT发送数据。对于ISO(Isochronous)同步传输,数据包的发送顺序通常为B(开始)、M(中间数据)、E(最后数据)。 数据结构方面,EHCI驱动中使用了Queue Element Transfer Descriptor (QTD)来描述传输数据的相关信息,包括数据源、数据长度、传输状态、结果信息、是否产生中断(IOC)以及使用的令牌包类型(IN、OUT、SETUP)。QTD是与Queue Head (QH)结构关联的,用于控制、批量和中断传输。 此外,所有结构的首字节都是NextLinkPointer+Type+T,这种设计允许通过Type字段识别不同类型的结构(如QTD、ITD、QH、SITD),便于统一管理和操作。 总结来说,分裂传输过程是USB EHCI协议中解决速度不匹配问题的关键机制,通过C-Split和S-Split确保高效的数据传输。同时,QTD作为数据传输的核心描述符,包含了所有必要的传输参数和状态信息。理解这些概念对于深入掌握USB EHCI驱动的工作原理至关重要。