3.2 基于OHCI的USB主机 —— OHCI(传输描述符)

转载 2012年03月22日 09:55:55
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/237835
传输描述符(TD
传输描述符(TD)是系统内存的数据结构,被HC用于定义从端点收发数据的缓冲区。TD分为2个类型:通用TD和同步TD。通用TD用于中断、控制和批量端点,同步TD用于同步传输。使用两种不同的TD类型是因为缓冲区类型的不同。对于U盘主机控制器来说,不使用同步传输。
 
若干个传输描述符组成队列链接到ED上。ED提供传输TD数据所需要的端点地址。HCD把TD增加到队列中,而HC把TD从队列中删除。HC把TD从队列删除后,将其链接到已完成队列,这个过程叫做“释放”。TD的释放原因包括正常释放和错误释放。当TD释放后,释放情况代码被写到TD中,以便HCD确定释放原因。
 
TD是按照顺序进行处理的。它们被链接到ED上。TD队列的第一个TD指针放在ED的NextTransferDescriptor字段,HC从该TD开始处理队列。当TD被释放,就会从队列中删除,该TD的NextTransferDescriptor字段所指向的下一个TD被转移到队列头。当HC处理ED的时候,只会产生一个事务。HC只有在当前ED的所有TD都处理完毕后才会产生下一个事务。
 
在每一个事务完成以后就会更新通用TD。有4个字段会被更新:CompletionCodeDataToggleControlCurrentBufferPointerErrorCount
 
DataToggleControl字段反映了下一次传输所需要的数据分组PID。如果当前包成功传输,HC就会设置DataToggleControl字段最高位,并切换最低位以反映下一次传输所需要的新的数据分组PID。如果当前包没有收到ACK或NAK,则该字段不会被修改。
 
CurrentBufferPointer表示当前包传输后是否收到ACK或者是否有错误。如果HC收到ACK或带有不正确切换标记的NAK,CurrentBufferPointer字段就不会更新,因为HC需要重试当前包。如果CurrentBufferPointer字段需要更新,包内传输的字节数将会加到当前的CurrentBufferPointer字段。如果当前包跨越了页边界,则CurrentBufferPointer字段的高20比特位将会更新为BufferEnd字段的高20比特位,以反映页基地址的变化。CurrentBufferPointer的低12位将会滚动到正确的值以代表新的包地址。
 
如果包传输发生错误,ErrorCount字段会加1。如果ErrorCount的值为2,同时有其它的错误发生,TD就会被释放,并且在CompletionCode字段设置错误代码。
 
CompletionCode字段表示通用TD是否传输成功。如果事务成功,则该字段被设置为“无错误”,否则设置为相应的错误代码。对于通用TD,ConditionCode字段的值只有在TD在已完成队列中的时候才有意义。对于CRC、位填充错和设备没响应错误,TD在错误发生3次以后才会被释放到已完成队列。对于拖延、数据溢出、数据不足等错误,TD在第一次发生错误的时候就会被释放到已完成队列。通用TD没有用到缓冲区溢出和缓冲区不足的错误。
 
当通用TD带着错误被转移到已完成队列时,ED的Halted字段被设置为1,以暂停处理TD队列,直到软件清除了错误状态。

USB主机控制器驱动——OHCI分析

首先,整个驱动框架的开始,是基于 platform 平台总线的。 struct platform_device s3c_device_usb = { .name = "s3c2410-ohci...

3.16 基于OHCI的USB主机 —— 中断向量处理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/261143 ...

1.3 基于OHCI的USB主机 —— 总体构架

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/228153 ...

基于OHCI的USB主机 —— 目录

我的《基于OHCI的USB主机》系列文章已经完毕了,我觉得需要建立一个目录,以便需要的人可以迅速找到所需要的文章。本文档的目标就是建立一个该系列文章的目录,可能还会对每个部分进行简单介绍。 第一...

1.1基于OHCI的USB主机 —— 前言

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/328233 ...

3.17 基于OHCI的USB主机 —— 中断处理程序

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/261181 ...

1.2基于OHCI的USB主机 —— 背景介绍

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/226133 ...

基于OHCI的USB主机 —— 总体构架

在我们的系统中,USB主机就是用来对U盘进行读写操作,因此在设计和构架上就完全围绕这个目的而进行。整个系统所涉及到的内容比较多,按照嵌入式系统开发的一般原则,采用层次化的体系结构,将系统按照功能划分为...
  • zzobin
  • zzobin
  • 2013年02月01日 11:08
  • 375

USB驱动程序(一)————USB主机控制器驱动——OHCI分析

本文以 2440-ohci 驱动为例,简单分析 USB 主机控制器驱动 根 Hub 的注册过程,以及 USB设备的枚举过程,并不涉及USB协议,单纯分析驱动框架流程。无论是hub还是普通的usb设备,...

4.3 基于OHCI的USB主机 —— USB标准请求

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/269441 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3.2 基于OHCI的USB主机 —— OHCI(传输描述符)
举报原因:
原因补充:

(最多只允许输入30个字)