4.2 Endpoint Descriptor
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.
4.2.1 Endpoint Descriptor Format

Notes:
1. Fields containing '—' are not interpreted or modified by the Host Controller and are available
for use by the Host Controller Driver for any purpose.
2. Fields containing '0' must be written to 0 by the Host Controller Driver before queued for
Host Controller processing. If Host Controller has write access to the field, it will always
write the field to 0.
4.2.2 Endpoint Descriptor Field Definitions

Field Definitions for Endpoint Descriptor
Name HC
Access
Description
FA R FunctionAddress(7Bits,USB地址)
This is the USB address of the function containing the endpoint that this
ED controls.
EN R EndpointNumber(4Bits,端点号)
This is the USB address of the endpoint within the function.
D R Direction(方向:IN/OUT)
This 2-bit field indicates the direction of data flow (IN or OUT.) If
neither IN nor OUT is specified, then the direction is determined from the
PID field of the TD.
The encoding of the bits of this field are:
00 :Get direction From TD
01 :OUT
10 :IN
11 :Get direction From TD
S R Speed(速率:全速/低速)
Indicates the speed of the endpoint: full-speed (S = 0) or low-speed (S =
1.)
K R sKip
When this bit is set, the HC continues on to the next ED on the list
without attempting access to the TD queue or issuing any USB token for the
endpoint.
F R

Format(链到ED中的TD格式)
This bit indicates the format of the TDs linked to this ED. If this is a
Control, Bulk, or Interrupt Endpoint, then F = 0, indicating that the General
TD format is used.

If this is an Isochronous Endpoint, then F = 1, indicating that the Isochronous
TD format is used.

MPS R MaximumPacketSize(最大Packet的大小)
This field indicates the maximum number of bytes that can be sent to or
received from the endpoint in a single data packet.
TailP R TDQueueTailPointer
If TailP and HeadP are the same, then the list contains no TD that the HC
can process.
If TailP and HeadP are different, then the list contains a TD to be
processed.
H R/W Halted
This bit is set by the HC to indicate that processing of the TD queue on
the endpoint is halted, usually due to an error in processing a TD.
C R/W toggleCarry
This bit is the data toggle carry bit. Whenever a TD is retired, this bit
is written to contain the last data toggle value (LSb of data Toggle field)
from the retired TD.
This field is not used for Isochronous Endpoints.
HeadP R/W TDQueueHeadPointer
Points to the next TD to be processed for this endpoint.
NextED R NextED
If nonzero, then this entry points to the next ED on the list.

4.2.3 Endpoint Descriptor Description
Endpoint Descriptors (ED) are linked in lists that are processed by the HC. An ED is linked to a next ED when the NextED field is nonzero.

When the Host Controller accesses an ED, it checks the sKip and the Halted bits to determine if any further processing of the ED is allowed. If either bit is set, then the Host Controller advances to the next ED on the list. If neither the sKip nor the Halted bit is set, then the Host Controller compares HeadP to TailP. If they are not the same, then the TD pointed to by HeadP defines a buffer to/from which the Host Controller will transfer a data packet.

This linking convention assumes that the Host Controller Driver queues to the 'tail' of the TD queue. It does this by linking a new TD to the TD pointed to by TailP and then updating TailP to point to the TD just added.
When processing of a TD is complete, the Host Controller 'retires' the TD by unlinking it from the ED and linking it to the Done Queue. When a TD is unlinked, NextTD of the TD is copied to HeadP of the ED.

The sKip bit is set and cleared by the Host Controller Driver when it wants the Host Controller to skip processing of the endpoint. This may be necessary when the Host Controller Driver must modify the value of HeadP and the overhead of removing the ED from its list is prohibitive.

The Halted bit is set by the Host Controller when it encounters an error in processing a TD. When the TD in error is moved to the Done Queue, the Host Controller updates HeadP and sets the Halted bit, causing the Host Controller to skip the ED until Halted is cleared. The Host Controller Driver clears the Halted bit when the error condition has been corrected and transfers to/from the endpoint should resume. The Host Controller Driver should not write to HeadP/toggleCarry/Halted unless Halted is set, sKip is set, or the ED has been removed from the list.

When TDs are queued to an ED, the Host Controller processes the TDs asynchronously with respect to processing by the host processor. Therefore, if the Host Controller Driver needs to alter the TD queue other than appending to the queue, it must stop the Host Controller from processing the TD queue for the endpoint so that changes can be made. The nominal mechanisms for stopping TD processing are for the Host Controller Driver to remove the ED from the list or to set the sKip bit in the ED.

When the D field of an ED is 10b (IN), the Host Controller may issue an IN token to the specified endpoint after it determines that HeadP and TailP are not the same. This indicates that a buffer exists for the data and that input of the endpoint data may occur in parallel with the HC's access of the TD which defines the memory buffer.

Since an ED must be aligned to a 16-byte boundary, the Host Controller only uses the upper 28 bits of Dword3 as a pointer to the next ED. TailP and HeadP point to TDs which may be either 16- or 32-byte aligned. The Host Controller uses only the upper 28 bits of Dword1 and Dword2 to point to a 16-byte aligned TD (F = 0). If HeadP and TailP point to a TD that must be 32-byte aligned (F = 1), then bit 4 of these Dwords must be 0.

OpenHCI - 4.2 Endpoint Descriptor的更多相关文章

  1. OpenHCI - Open Host Controller Operational Registers

    The Host Controller (HC) contains a set of on-chip operational registers which are mapped into a non ...

  2. USB组合设备 Interface Association Descriptor (IAD)

    Communication Device Class,简称CDCUSB Compound Device,USB复合设备USB Composite Device,USB组合设备 摘要USB复合设备 Co ...

  3. (USB HID) Configuration Descriptor

    最近完成了HID的基本收發,使用的配置用了2個Endpoint,把一些特別重要要的地方紀錄下來 整個Configuration 分成4大部分 : 1. Configuration 2. Interfa ...

  4. STM32 复合设备编写

    目的 完成一个CDC + MSC的复合USB设备 可以方便在CDC,MSC,复合设备三者间切换 可移植性强 预备知识 cube中USB只有两个入口. main函数中的MX_USB_DEVICE_Ini ...

  5. stm32 hid 键盘描述

    /* USB Standard Device Descriptor */ const uint8_t Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DES ...

  6. USB

    [一].USB(Universal Serial Bus):是通用串行总线的缩写,具有方便易用,动态分配带宽,容错性优越和高性价比等特点. USB接口设备结构分:USB Host(主机)和USB De ...

  7. C#:USB设备枚举 --转自CSDN作者:Splash

    (一)DeviceIoControl的PInvoke /* ---------------------------------------------------------- 文件名称:Device ...

  8. usb驱动开发18之设备生命线

    现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都挤在一起,所以得想办法将 ...

  9. usb驱动开发13之设备生命线

    上一节勉勉强强把struct urb这个中心给说完,接着看那三个基本点. 第一个基本点,usb_alloc_urb函数,创建urb的专用函数,为一个urb申请内存并做初始化,在drviers/usb/ ...

随机推荐

  1. Qt 制作安装包

    Qt 制作在线.离线 安装包 见如下文档

  2. [Js]基础知识

    一.JavaScript组成 1.ECMAScript 解释器.翻译(提供功能有限,如加减乘除,定义变量.函数等)   几乎没有兼容性问题 2.DOM    有一些兼容性问题 3.BOM(用的少,交互 ...

  3. 转: HTML的电子邮件链接标签mailto用法详解

    mailto是网页设计制作中的一个非常实用的html标签,许多拥有个人网页的朋友都喜欢在网站的醒目位置处写上自己的电子邮件地址,这样网页浏览者一旦用鼠标单击一下由mailto组成的超级连接后,就能自动 ...

  4. NSString asscii格式(2进制) 转 utf8格式——解决iOS自己处理http socket数据,遇到Transfer-Encoding: chunked时

    因为需要实现自己的http客户端,就要自己模拟http 的socket通讯: 上行不难,自己处理好http即可. 但下行时,服务器端的动态语言返回数据有可能会是这种格式: http头 16进制表示的数 ...

  5. jmeter之json数据参数化 断言等

    在 http Load Testing 中,json 数据的提交是个让人头疼的问题.本文详细介绍如何进行 JMeter 的 json 测试提交,以及如何将其参数化.Step 1 http json 请 ...

  6. C++string的操作

    #include <iostream> using namespace std; int main() { //initilization string str("abc.ddd ...

  7. java中利用JFrame创建窗体 【转】

    1. 一个简单的swing public class Test(){ public static void main(String[] args){ JFrame frame = new JFrame ...

  8. poj1141 区间dp+路径

    //Accepted 176 KB 47 ms //感谢大神们为我们这群渣渣铺平前进的道路!! //用scanf("%s",s)!=EOF WA到死 #include <cs ...

  9. objectARX 获取ucs的X方向

    struct resbuf var; acedGetVar(_T("UCSXDIR"), &var);//获取用户坐标系下X方向量 ver = asVec3d(var.re ...

  10. malloc,vmalloc与kmalloc,kfree与vfree的区别和联系

    kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续kmalloc能分配的大小有 ...