An Endpoint Descriptor (ED) is a 16-byte, memory resident structure that must be aligned to a 16-byte boundary. The Host Controller traverses lists of EDs and if there are TDs linked to an ED, the Host Controller performs the indicated transfer.
上文:
端点描述符(ED)是一个16字节的内存驻留结构体,必须按16字节边界对齐。主机控制器(HC)会遍历ED链表,若存在与ED关联的传输描述符(TD),则执行指定的数据传输操作。
4.2.1 Endpoint Descriptor Format
注:
- 标有”——“的字段不被主机控制器(HC)解析或修改,可由主机控制器驱动程序(HCD)自由使用
- 标有”0”的字段必须由HCD在加入主机控制器处理队列前写入0。若主机控制器对该字段有写入权限,将始终将其写入0
4.2.2 Endpoint Descriptor Field Definitions
表4-1:端点描述符字段定义
字段名 | HC访问权限 | 说明 |
---|---|---|
FA | R | 功能地址:该ED控制的端点所在的USB设备地址 |
EN | R | 端点编号:该端点在USB设备内的端点地址 |
D | R | 方向:2位字段指示数据流方向(IN或OUT)。若未指定方向,则从TD的PID字段获取方向。 编码定义: • 00b:从TD获取方向 • 01b:OUT(输出) • 10b:IN(输入) • 11b:从TD获取方向 |
S | R | 速度:指示端点速度:全速(S=0)或低速(S=1) |
K | R | 跳过:该位置位时,主机控制器继续处理链表中的下一个ED,不尝试访问TD队列或为此端点发出任何USB令牌 |
F | R | 格式:指示与此ED链接的TD格式。如果是控制、批量或中断端点,则F=0(使用通用TD格式);如果是等时端点,则F=1(使用等时TD格式) |
MPS | R | 最大包大小:指示在单个数据包中可发送到或从端点接收的最大字节数 |
TailP | R | TD队列尾指针: 如果TailP和HeadP相同,则队列中没有可供HC处理的TD; 如果不同,则队列中有待处理的TD |
H | R/W | 暂停:由HC置位,表示端点上的TD队列处理已暂停(通常因处理TD时发生错误) |
C | R/W | 数据翻转进位:数据翻转进位位。当TD完成时,该位被写入来自已完成TD的最后一个数据翻转值(数据翻转字段的最低有效位)。等时端点不使用此字段 |
HeadP | R/W | TD队列头指针: 指向此端点要处理的下一个TD |
NextED | R | 下一个ED:如果非零,则此条目指向链表中的下一个ED |
访问权限说明:
- R:只读(主机控制器仅读取)
- R/W:读写(主机控制器可读取和写入)
技术要点:
- 端点描述符是16字节内存结构,必须16字节对齐
- 主机控制器通过遍历ED链表来调度USB数据传输
- 方向字段支持动态获取(从TD)或固定方向设置
- 跳过位(K)允许主机控制器绕过特定端点的处理
- 头尾指针比较(HeadP vs TailP)决定是否存在待处理TD