在主机控制器里,介绍几个重要的结构:
一:ED(endpoint descriptor)
总共16字节对齐。
先看第一字主要描述了硬件配置信息。
[6:0]为设备地址(function address)
[10:7]是端点地址(endpoint number)
[12:11]是数据方向,00:方向定义在TD
[13]置位时是低速否则全速
[14] 当此位被设置,HC继续在链表中的下一个端点描述符,而不试图访问的TD队列或发出任何端点的USB令牌
[15]置位表示同步格式的TD,否则表示通用的TD
[26:16]端点最大数据包MaximumPacketSize
第二字
[31:4] TDQueueTailPointer
第三字
[0] 此位设置是由主机控制器表明,处理的端点上的TD队列中暂停时,通常是由于错误处理TD。
[1] toggleCarry
[31:4] TDQueueHeadPointer
第四字
[31:4]指向下一个端点描述符
端点描述符被链接成一个链表被主机控制器处理,当一个端点描述符的nextED不为零时,该端点描述符会被链接入
当主控制器访问端点,它会检查跳过和暂停位,以确定是否允许任何endpointis进一步处理。如果任何位被设置,那么主机控制器的进步到下一个endpointon列表。如果既没有跳过也不暂停位被设置,那么主机控制器比较HeadP来TailP。如果他们是不一样的,那么endpointpointed由HeadP定义主机控制器的将传输一个数据包到/从其中一个缓冲区
这种链接公约假定主机控制器驱动程序的“尾巴”的端点描述符队列的队列。它通过链接一个新的端点描述符到端点描述符指针TailP然后更新TailP指向刚才添加的端点描述符。
当一个TD完成后,将其从队列上取消链接,加到完成队列上。把该TD的下一个TD连接到headP
跳过位是由主控制器驱动程序设置和清除,当它想跳过处理端点的主机控制器。这可能是必要的,主机控制器驱动程序时,必须修改HeadP的值和端点描述符链表删除的overhead prohibitive。
由主控制器,当它遇到一个错误,在处理TD暂停位。
当在错误的TD移动到完成队列,主机控制器的更新HeadP和设置暂停位,造成主控制器跳过端点描述符已停止,直到被清除。主机控制器驱动程序,清除错误条件时已得到纠正,并转移到/从端点应恢复暂停位。主机控制器驱动程序不应该写HeadP/ toggleCarry/暂停的除非已停止设置,跳过,或教育署已经从名单中剔除。
当端点描述符的D字段是10B(IN)的,主控制器可以发出一个IN令牌到指定的的端点点后,在检测到HeadP和TailP是不一样的后。