USB通信原理讲义修正版
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USB主机控制器/根集线器
• 所有的USB系统上的联系都是在软件控制 下由USB主机进行的。USB主机是带有 USB主控器的PC机。主机控制器负责USB 系统的处理,是USB系统的大脑。 • USB根集线器提供USB接口给USB设备和 USB Hub使用。 • USB连接的127个设备并不需要控制器去寻 址,只需要对根集线器发出命令,根集线 器可以自动找到相应的设备。
• USB集线器。利用USB集线器来提供更多 的USB接口,以连接较多的USB设备。 • USB功能设备。USB功能设备能在总线上 发送和接受数据和控制信息,它是完成某 项具体功能的硬件设备。通过USB的硬件 和软件与计算机系统进行数据交换。它们 通常是一些高速设备、中速设备和低速设 备。如视频、硬盘、移动存储设备、网络 设备、音频设备以及鼠标键盘等。
• 端点:位于USB设备中与USB主机通信的基本单元。每个 设备允许有多个端点,主机只能通过端点与设备进行通信, 各个端点由设备地址和端点号确定在USB系统中的唯一地 址。每个端点都包括一些属性:传输方式、总线访问频率、 带宽、端点号、数据包的最大容量等。除控制端点0外的 其他端点必须在设备配置后才能生效,控制端点0通常用 于设备初始化参数。USB芯片中,每个端点实际上就是一 个一定大小的数据缓冲区。 • 管道:管道是USB设备与USB主机之间数据通信的逻辑通 道,这个USB管道对应一个设备端点,各端点通过自己的 管道与主机通信。所有设备都支持对应端点0的控制管道, 通过控制管道主机可以获取USB的设备信息,包括:设备 类型、电源管理、配置、端点描述符等。
设备检测
• 描述符:描述符是具有一定格式的数据结构,它 包含了设备所有的属性信息。 USB设备使用各种 描述符来向主机报告它的属性。在主机使用控制 传输请求描述符时,设备就会将这些信息以标准 描述符格式发送给主机,从而使主机控制器获得 诸如设备及供应商ID,设备通信能力等重要信息。 所有的USB外设都必须响应对标准USB描述符的 请求,并且要按一定的规范进行。 • 描述符的种类:标准USB描述符包括设备描述符、 配置描述符、接口描述符、端点描述符和字符串 描述符。它们分别从不同的层次来描述设备的属 性。
USB的物理接口
• USB总线电缆包括4根线,用以传输信号和提供电源。其 中D+和D-为信号线,传输信号,是一对双绞线(即采用差 动传输方式);Vbus和GND是电源线,提供电源。相应的 USB接口插头也比较简单,只有4芯。上游插头是4芯的长 方形插头,下游插头是4芯的方形插头。
USB的电器特性
端点描述符
偏移Байду номын сангаас字段
0 1 2 3 4 5 bLength bDescriptorType bEndpointAddress bmAttributes wMaxPacketSize bInterVal
大小 值
1 1 1 1 2 1 数字 常量 端点 位映射 数字 数字
描述
描述符的大小 描述符的类型(05) 端点地址 端点属性 支持的最大数据包的大小
USB的描述符及各种描述符之间的 依赖关系
一个USB设备有一个设备描述符,设备描述符里面决定了 该设备有多少种配置,每种配置描述符对应着配置描述符; 而在配置描述符中又定义 了该配置里面有多少个接口, 每个接口有对应的接口描述符;在接口描 述符里面又定 义了该接口有多少个端点,每个端点对应一个端点描述符; 端点描述符定义了端点的大小,类型等等 每种描述符都有自己独立的编号,如下: #define DEVICE_DESCRIPTOR 0x01 //设备描述符 #define CONFIGURATION_DESCRIPTOR 0x02 //配置 描述符 #define STRING_DESCRIPTOR 0x03 //字符串描述符 #define INTERFACE_DESCRIPTOR 0x04 //接口描述符 #define ENDPOINT_DESCRIPTOR 0x05 //端点描述符
USB系统的通信原理
• • • • • • • • • USB系统的简介 USB的物理接口 USB的电气特性 USB系统的组成 USB设备的检测 USB数据流的类型 USB的传输方式 信号的编码与传输 USB的优点
USB的简介
通用串行总线USB(Universal Serial Bus) 是Intel、Compaq、DEC、IBM、Microsoft 以及NEC等公司联手制定的一种通用串行总 线接口标准。USB接口规范从1995年的USB V1.0、 USB V1.1、 USB V1.2到现在的USB V2.0提出以后,很快得到了上百家公司的 支持,成为一种名副其实的通用标准。
(6)获取最大数据包长度 PC向address 0发送USB协议规定的Get_Device_Descriptor命 令,以取得却缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB 设备的响应,该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量 为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次只能列举一个 USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。以下操作雷同,不 同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发 送一次命令,重复三次。 (7)主机分配一个新的地址给设备主机通过发送一个Set_Address请求来分配一个唯一的 地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有 通信都使用这个新地址。 (8)主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部 字段,以了解该设备的总体信息,如VID,PID。 (9)主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全 部配置信息。 (10)主机发送Get_Device_String命令,获得字符集描述(unicode),比如产商、产品 描述、型号等等。 (11)此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。 (12)根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的 Driver,一般win2k能提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等, 操作就在后台运行。但是Win98却不可以,所以在此时将会弹出对话框,索要USB 的Driver。 (13)加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选 择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状 态,并可以和客户软件进行数据传输。 此时,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相 应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一 些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。
配置描述符
//定义标准的配置描述符结构 Typedef structCONFIGURATION_DESCRIPTOR_STRUCT { BYTE bLength; //配置描述符的字节数大小 BYTE bDescriptorType; //配置描述符类型编号 WORD wTotalLength; //此配置返回的所有数据大小 BYTE bNumInterfaces; //此配置所支持的接口数量 BYTE bConfigurationValue; //Set_Configuration命令所需 要的参数值 BYTE iConfiguration; //描述该配置的字符串的索引值 BYTE bmAttributes; //供电模式的选择 BYTE MaxPower; //设备从总线提取的最大电流 }
• USB主机或根集线器(Root Hub)对设备提供的对 地电压为4.75~5.25V,设备能吸入的最大电流为 500mA。因此,USB对设备提供的电源是有限的。 当USB设备第一次被USB主机检测到时,设备从 USB Hub吸入的电流值应该小于100mA。 • USB主机有一个独立的USB的电源管理系统。 USB系统软件通过与主机电源管理系统交互来处 理挂起、唤醒等电源事件。为了节省能源,对暂 时不起作用的USB设备、电源管理系统将其置为 挂起状态,等有数据传输时再唤醒设备。
接口描述符
//定义标准的接口描述符结构 typedef struct _INTERFACE_DESCRIPTOR_STRUCT { BYTE bLength; //接口描述符的字节数大小 BYTE bDescriptorType; //接口描述符的类型编号 BYTE bInterfaceNumber; //该接口的编号 BYTE bAlternateSetting; //备用的接口描述符编号 BYTE bNumEndpoints; //该接口使用的端点数,不包括端点0 BYTE bInterfaceClass; //接口类型 BYTE bInterfaceSubClass; //接口子类型 BYTE bInterfaceProtocol; //接口遵循的协议 BYTE iInterface; //描述该接口的字符串索引值 }
USB系统的组成
• USB系统在硬件上一般由USB主机控制器/ 根集线器、USB集线器和USB功能设备3个 部分组成。
USB设备的插入检测机制
• USB主机是如何检测到设备的插入的呢? 首先,在USB集线器的每个下游端口的D+和D-上, 分别接了一个15K 欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下 拉电阻拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧 姆上拉电阻。对于全速和高速设备, 上拉电阻是接在D+上;而低速 设备则是上拉电阻接在D-上。这样,当设备插入到集线器时, 由 1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的一 条拉高了。集线器检测到这个状态后,它就报告给USB主控制器(或 者通过它上一层的集线器报告给USB主控制器), 这样就检测到设 备的插入了。USB高速设备先是被识别为全速设备,然后通过HOST 和DEVICE 两者之间的确认,再切换到高速模式的。在高速模式下, 是电流传输模式,这时将D+上的上拉电阻断开。 • 一个简单的实验:只用一个上拉电阻接在USB的+5V和D+或者D-上, WINDOWS也会提示发现新硬件,但是无法找到驱动程序。这时去设 备管理器里面看,有显示未知USB设备, 并且其VID和PID为0。
设备描述符
//定义标准的设备描述符结构 typedef struct _DEVICE_DCESCRIPTOR_STRUCT { BYTE blength; //设备描述符的字节数大小 BYTE bDescriptorType; //设备描述符类型编号 WORD bcdUSB; //USB版本号 BYTE bDeviceClass; //USB分配的设备类代码 BYTE bDeviceSubClass; //USB分配的子类代码 BYTE bDeviceProtocol; //USB分配的设备协议代码 BYTE bMaxPacketSize0; //端点0的最大包大小 WORD idVendor; //厂商编号 WORD idProduct; //产品编号 WORD bcdDevice; //设备出厂编号 BYTE iManufacturer; //设备厂商字符串的索引 BYTE iProduct; //描述产品字符串的索引 BYTE iSerialNumber; //描述设备序列号字符串的索引 BYTE bNumConfigurations; //可能的配置数量 }
端点描述符
//定义标准的端点描述符结构 typedef struct _ENDPOINT_DESCRIPTOR_STRUCT { BYTE bLegth; //端点描述符字节数大小 BYTE bDescriptorType; //端点描述符类型编号 BYTE bEndpointAddress; //端点地址及输入输出属性 BYTE bmAttributes; //端点的传输类型属性 WORD wMaxPacketSize; //端点收、发的最大包大小 BYTE bInterval; //主机查询端点的时间间隔 }
中断扫描时间间隔
•
总线列举经历的步骤:
(1)集线器检测新设备主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉 察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在 D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使 信号线的电位升高,因此被主机集线器检测到。) (2)主机知道了新设备连接后每个集线器用中断传输来报告在集线器上的事件。当主机知 道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。返回的消 息告诉主机一个设备是什么时候连接的。 (3)集线器重新设置这个新设备当主机知道有一个新的设备时,主机给集线器发送一个 Set_Feature请求,请求集线器来重新设置端口。集线器使得设备的USB数据线处于 重启(RESET)状态至少10ms。 (4)集线器在设备和主机之间建立一个信号通路主机发送一Get_Status请求来验证设备是 否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了 重启状态,设备就处于默认状态了,即设备已经准备好通过Endpoint 0 的默认流程 响应控制传输。即设备现在使用默认地址0x0与主机通信。 (5)集线器检测设备速度 集线器通过测定那根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设 备还是全速设备。(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。 以下,需要USB的firmware进行干预