




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
端点状态USB设备与主机的通信可以通过对USB端点状态的控制来完成。USB设备端点可以定义3个不同状态:空闲(Idle)状态、停止(Halt)状态和读写(WR)状态。USB硬件抽象层提供USB_ConfigureEndpoint、USB_Write、USB_Read、USB_EndOfTransfer、USB_Stall、USB_HaIt和USB_ClearHalt七个功能函数对设备的状态进行管理,端点的状态转换过程如图4所示。1、USB_ConfiguIreEndpoint负责配置端点的最大包长度和传输方向,并将端点状态设置为空闲状态。2、端点进入空闲状态,如果上层调用USB_Write进行数据发送,将发送缓冲区指向要发送的数据,设置端点状态为写状态,等待USB主机接收数据(真正的数据传输在中断服务程序中进行)。写完成后,端点回到空闲状态。3、数据接收与发送类似。4、如果设备出现某种错误,主机会向设备发送Set_Feature命令,设备接收到Set_Feature命令,执行USB_Halt进入停止状态。5、端点处于停止状态时,如果接收到Clear_Feature,则执行USBClearHalt清除Halt标志,进入Idle状态。6、如果USB设备由于某种原因无法对当前命令进行处理(如不能识别命令,或者没有准备好进行数据传输),则执行USB_Stall通知主机发生错误,但端点的状态不变。USB设备状态1、连接状态(Attached)USB设备已经连接注主机或集线器的下行端口上,但USB总线的还没有提供,这时其处于连接状态。2、上电状态(Powered)当USB设备已连接至某集线器的下行端口,且已得到USB总线电源,但它还没有被复位时,其将处于上电状态,这时还不能对任何USB事物处理做出响应。尽管自供电设备至连接至某集线器的下行端口前就可能已经上电了,但这时对USB来说,其仍处于连接状态,且只有至该集线器的电源建立时间过后(不管USB设备是否使用这个,其建立时间总是有的),USB才会认为其处于上电状态。3、缺省状态(Default)USB设备会响应集线器下行端口发出的复位信号,并进行复位操作。在复位结束后,USB设备将进入缺省状态,这时其可从USB总线上获取小于100mA的电流,并可使用缺省设备地址来对某些USB事物处理做出响应。在USB设备复位操作完毕后,它将采用正确的传输速率(低速/全速)和主机进行通信。低速/全速传输速率的检测是通过USB设备连接在D-/D+线上的上拉电阻实现的。4、地址状态(Address)在USB设备复位结束后,主机会为其分配一个唯一的设备地址,当它还没有被配置时,其将处于地址状态。在这之后,USB设备将不再使用缺省设备地址,而是使用这个新的地址来响应主机发出的事务处理。即使当USB设备处于挂起状态,它仍会保持该唯一的设备地址不变。5、配置状态(Configured)USB设备在使用前必须被配置,即正确处理主机发出的SetConfiguration(x)请求(x代表非0的配置)。在配置操作完成后,USB设备将处于配置状态,这时客户软件可以和其功能单元进行数据传输,并为主机提供额外的功能。配置操作将使USB设备中与该配置有关的所有寄存器都返回至缺省状态,如块端点的数据触发位被置为0值。6、挂起状态(Suspended)为节省USB系统的功率消耗,当USB设备值3ms内没有检测到总线活动时,它将自动进入挂起状态,这时其仍会保持原有的设备地址和配置值。USB设备在连接后的任何时刻、任何状态都可能被挂起。为使USB脱离挂起状态,必须对其进行恢复。USB总线上的任何非空闲信号都将使挂起的USB设备得到恢复。另外,具有远程唤醒功能的USB设备,自己也可以启动系统的恢复操作,但当USB设备复位时,其远程唤醒功能必须被禁止。标准USB描述符的类型1、设备描述符(Device Descriptor)typedef code struct BYTE bLength; BYTE bDescriptorType; WORD bcdUSB; BYTE bDeviceClass; BYTE bDeviceSubClass; BYTE bDeviceProtocol; BYTE bMaxPacketSize0; WORD idVendor; WORD idProduct; WORD bcdDevice; BYTE iManufacturer; BYTE iProduct; BYTE iSerialNumber; BYTE bNumConfigurations; device_descriptor; 2、设备限定描述符(Device_Qualifier Descriptor)3、配置描述符(Configuration Descriptor)typedef code struct BYTE bLength; BYTE bDescriptorType; WORD wTotalLength; BYTE bNumInterfaces; BYTE bConfigurationValue; BYTE iConfiguration; BYTE bmAttributes; BYTE bMaxPower; configuration_descriptor; 4、其它速率配置描述符(Other_Speed_Configuration Descriptor)5、接口描述符(Interface Descriptor)typedef code struct BYTE bLength; BYTE bDescriptorType; BYTE bInterfaceNumber; BYTE bAlternateSetting; BYTE bNumEndpoints; BYTE bInterfaceClass; BYTE bInterfaceSubClass; BYTE bInterfaceProtocol; BYTE iInterface; interface_descriptor; 6、端点描述符(Endpoint Descriptor)typedef code struct BYTE bLength; BYTE bDescriptorType; BYTE bEndpointAddress; BYTE bmAttributes; WORD wMaxPacketSize; BYTE bInterval; endpoint_descriptor; 7、字符串描述符(String Descriptor)typedef code structBYTE bLength;BYTE bDescriptorType;BYTE SomeDesriptor36; string 这些描述符之间具有一定的关系,设备描述符上最高级的描述符,而端点描述符上最低级的描述符。每一个设备只有一个设备描述符,但设备描述符可以包含多个配置描述符:而一个配置描述符又可包含多个接口描述符;一个接口使用了几个端点,就有几个端点描述符。字符串描述符上可选的。每一个描述符都是一系列的字符所组成的,每个字段都是一连串的二进制数。其中设备描述符的bNumConfigurations字段可设定配置描述符的个数;配置描述符的bNumInterface字段用于设定接口描述符的个数:而接口描述符的bNumEndpoints则表示了该接口所用到的端点数量,也就是端点描述符的数量。标准的USB设备请求命令这些命令是由主机发出来的,然后USB设备根据具体指令进行回复,建立连接。1、获取状态请求 GET_STARUS2、清除特性请求 CLEAR_FEATURE3、设备特性请求 SET_FEATURE4、设置地址请求 SET_ADDRESS5、获取描述符请求 GET_DESCRIPTOR6、设置描述符请求 SET_DESCRIPTOR7、获取配置请求 GET_CONFIGURATION8、设置配置请求 SET_CONFIGURATION 9、获取接口请求 GET_INTERFACE10、同步帧请求 SYNCH_FRAME设备请求的统一格式:typedef struct BYTE bmRequestType; / Request recipient, type, and direction BYTE bRequest; / Specific standard request number WORD wValue; / varies according to request WORD wIndex; / varies according to request WORD wLength; / Number of bytes to transfer setup_buffer; USB设备的连接1、把USB设备连接至某集线器的下行端口后,集线器马上为该端口提供电源,其建立时间为。如果所连接的USB端口不需要建立时间或其已经能够提供电源,则值为0。在过后,USB设备将进入上电状态。2、集线器监视其D-/D+线上的电压,当达到时,它将认为下行端口上有USB设备连接。对于总线供电的USB设备,这段时间必须小于100ms。3、集线器使用其中断IN管道向主机报告其下行端口上有USB设备的连接。主机在接收到该通知后,会向集线器发出GetPortStatus请求以了解更多的信息,该请求是集线器设备类请求。4、为确保本次连接的机械特性和电气特性都趋于稳定,主机会至少等待100ms 。这样USB设备在接收到任何请求前,其电源已经稳定工作来最少100ms 。如果在这段时间内,该设备检测不到USB总线活动,它将进入挂起状态,其最小时间为3ms ,最长时间为10ms 。5、主机向该设备发出SetPortStatus请求(集线器设备类请求),以复位这个USB设备。其复位时间至少为10ms ,但不会超过20ms 。在这期间,集线器会确定USB设备的传输速率:低速或全速,并向主机报告。低速/全速传输速率的检测是通过USB设备连接在D-/D+线上的上拉电阻来实现的。6、为确保USB设备复位操作的完成,主机应提供至少10ms的复位恢复时间。一旦该恢复时间结束,USB设备会马上进入缺省状态,这时其可从USB总线上获取小于100mA的电流,并可使用缺省设备地址对管道0的控制事务做出响应。7、主机向USB设备发出GetDescriptor(Device)请求【GetDescriptor请求用于主机读取指定的描述符,GetDescriptor请求仅支持三种类型的描述符:设备(包含设备限定)描述符、配置(包含其它速率配置)描述符和字符串描述符。】,以取得其缺省控制管道所支持的最大数据包长度。该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节(一共有18个字节)。注意,主机一次只能列举一个USB设备,所以在同一时刻只能有一个USB设备使用缺省地址0。8、主机向USB设备发出SetAddress请求,为其分配一个唯一的设备地址。USB设备必须在50ms内完成对该请求的处理,并结束其控制传输的状态阶段。之后再经过2ms的恢复时间,USB设备将进入地址状态,这时它不再使用缺省设备地址,而将使用这个新地址和主机进行通信,且该地址只有在USB设备断开或系统断电时才会丢失。9、主机使用新地址向USB设备发出GetDescriptor(Device)请求(步骤7没有全部读出),并读取其设备描述符的全部字段,以了解该设备的总体信息,如供应商ID、产品ID等。10、主机向USB设备循环发出GetDescriptor(Configuration)请求,以读取其全部配置信息(其个数由设备描述符的bNumConfigurations字段指出),该过程需要花费几毫秒。在读取某一配置信息时,主机首先请求其配置描述符(9字节),并得出该配置信息的总长度(包含在配置描述符的wTotalLength字段中);然后主机再次发出该GetDescriptor(Configuration)【接口描述符、端点描述符、设备类定义描述符和供应商自定义描述符都将作为配置信息,由GetDescriptor(Configuration)请求随配置描述符一起返回,且返回顺序一般为配置描述符、第1接口的接口描述符和端点描述符、第2接口的描述符和端点描述符、设备类定义描述符、供应商自定义描述符】请求,并得到完整的配置信息,包括配置描述符、接口描述符、端点描述符以及各种设备类定义描述符和供应商自定义描述符。11、主机根据USB设备的配置信息,如供应商ID、产品ID等,为其选择一个合适的USB设备驱动程序,它通常需要由开发人员自己编写,有时也可使用设备类或供应商提供的通用驱动程序。12、在加载来USB设备驱动程序后,主机将发出SetConfiguration(x)请求为该设备选择一个合适的配置(x代表非0的配置值)。在配置过程中,主机将为USB设备选择一个配置值、一个接口号和一个可替换设置值,并确定相应端点的特性,如所支持的传输类型、最大数据包长度等。USB系统软件会判断当前USB是否有足够的帧/小帧时间来满足该配置的总线带宽需求,如果能够满足,则USB设备就可以使用该配置值;如果不能满足,则USB设备将不能使用该配置值,这时主机应尝试使用企图配置值,如果全部不能配置成功,那么该USB设备将暂时不能被配置。如果配置操作成功,USB设备将进入配置状态,这时它可从USB总线上获取器配置描述符(bMaxPower字段)中所指出的最大总线电流,并可以和客户软件进行数据传输,为主机提供额外的功能。配置操作将使USB设备中与该配置有关的所有寄存器都返回至缺省状态,如块端点的数据触发位被置为0值。IN 事务处理IN 事务处理用于完成USB设备到主机的数据传输。如果传输成功,它将包括令牌、数据和握手3个阶段,其过程如下:(1) 令牌阶段:主机准备好接收数据,并向指定的USB设备发出IN令牌包。(2) 数据阶段:USB设备接收到该令牌包后,向主机发送含有专用数据的数据包。(3) 握手阶段:主机接收到这些数据后,向USB设备返回ACK握手包。在IN事务处理中,USB设备并不是每次都能成功地响应主机发出的IN令牌包。如果USB设备在接收到IN令牌包后发现其已经损坏,则不会作任何应答。如果USB设备暂时不能向主机发送数据,则会返回NAK握手包。如果USB设备的这个IN端点已经被停止来,则会向主机返回STALL握手包。如果上述错误情况都未发生,则USB设备将向主机发出数据包。OUT事务处理OUT事务处理用于完成主机到USB设备的数据传输。如果传输成功,它将包括令牌、数据和握手3个阶段,其实现过程如下:(1) 令牌阶段:主机向指定的USB设备发出OUT令牌包。(2) 数据阶段:主机发送含有专用数据的数据包。(3) 握手阶段:USB设备接收到该令牌包和数据包后,向主机返回ACK握手包。在OUT事务处理中,USB设备并不是每次都能成功地响应主机发出的OUT令牌包和数据包。如果USB设备在接收到OUT令牌包和数据包后发现其已经损坏,则不会作任何应答。如果USB设备暂时不能接收主机发来的数据,则它会返回NAK握手包。如果USB设备的这个OUT端点已经被停止,则它会向主机返回STALL握手包。如果USB设备和该数据包的数据触发位不匹配,则USB设备会丢弃数据,并返回ACK握手包。如果上述错误情况都未发生,则USB设备将接收数,并返回ACK握手包。USB存储空间分配通用串行总线控制器(USB0)符合USB2.0规范,可以全速或低速工作,集成了收发器和1K 的FIFO 存储器。共有8个端点管道。控制端点(端点0)总是作为双向IN/OUT端点。其它端点被作为3对IN/OUT端点管道。1024字节的片内XRAM被用作USB0的FIFO空间。FIFO空间在端点0 3之间的分配如图所示。分配给端点1 3的FIFO空间可以被配置为输入(IN)、输出(OUT)或两者兼有(分割方式:高字节给输入,低字节给输出)。USB设备收到IN指令(请求USB设备发送数据给主机)时,先将主机要的数据写到In_Packet 中,再将In_Packet中的数据传给设定好的输入端点FIFO中,然后将 EINCSR的“INPRDY”位置“1”,表示准备好发送数据包,最后发送给主机。USB设备收到OUT指令(请求USB设备接收主机发送的数据)时,EOUTCSR指令的“OPRDY”位置“1”,表示准备好接收数据包,主机会将数据包发送到设定好的输出端点FIFO中,最后再将FIFO中的数据传到Out_Packet 中。In_Packet 是专门用来存储要上传的数据包的一个数组,而Out_Packet 是专门用来存储从主机发送过来的数据包的数组。这些数据包通过相关的一些指令就可以执行某些动作了。这两个数组名并不是专有的,但为了便于辨认,一般都是这样命名。USB中的那些IN或OUT指令都是以主机为参考基准的,IN代表有数据进入主机,OUT代表主机输出数据。C8051F320的内部振荡器的基频为12 MHz 。FADDR寄存器中保存有当前的USB0功能地址。USB0接收到的SET_ADDRESS命令中有7位功能地址,软件应在接收到该命令时将主机分配的7位功能地址写入FADDR寄存器。只有在当前传输结束后(一般是在SET_ADDRESS命令传输的状态段),写入FADDR的新地址才生效(生效之前USB0不响应新地址)。当软件向FADDR寄存器写入新地址时,UPDATE位(FADDR.7)被硬件置1。当新地址生效后,硬件将UPDATE位清0。USB通信需要由端点(endpoint)和管道(pipe)来完成,端点相当于传输的地址,管道相当于传输的路径。具体定义见USB2.0协议。USB设备一旦连接到主机,首先就要与主机进行通信,把设备信息传给Host,同时Host根据USB设备特性进行适当配置之后才可以正常使用,而这些工作都是由端点0(USB设备唯一的一个双向端点)通过默认信息通道(有格式的信息通道)完成的,这个过程主要是通过控制传输的11种标准请求进行。/*USB设备请求数据结构*/typedef struct _USB_device_request USB_U8 bmRequestType; /请求类型 USB_U8 bRequest; /USB具体请求 USB_U16 wValue; /USB数据,根据不同的请求含义改变 USB_U16 wIndex; /USB请求索引,根据不同的请求含义改变 USB_U16 wLength; /数据字节数USB_DEVICE_REQUEST;/ Definitions of the bit fields in the bmRequestType field of a setup packet./ 定义设置包中USB请求类型(bmRequestType)中各位字段./ RT=RequestType/#define USB_RT_DEVICE_TO_HOST 0x80 /D7:传输方向(设备到主机)#define USB_RT_TYPE_MASK 0x60 /D6.D5:保留#define USB_RT_TYPE_STANDARD 0x00 /D6.D5:标准#define USB_RT_TYPE_CLASS 0x20 /D6.D5:类#define USB_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高墩施工防坠器速差技术专题
- 生态混凝土桥坡绿化工艺
- 2024年“巴渝工匠”杯竞赛负荷控制理论考试题库大全-上(单选题)
- 高三年级下册二模考试语文试题(含答案)
- 防汛安全培训
- 中班走廊与楼梯健康安全
- 学校中层领导工作总结
- 实验小学教学常规培训
- 招聘面试培训
- 正畸口腔溃疡护理常规
- 2024年石家庄市市属国有企业招聘考试真题
- 2025年山东省烟台市中考真题数学试题【含答案解析】
- 种猪养殖场建设项目初步设计方案
- 中位数与箱线图-第2课时箱线图复习巩固课件北师大版(2025)数学八年级上册
- 2025河南省豫地科技集团社会招聘169人笔试参考题库附带答案详解
- 2025年山东将军烟草新材料科技有限公司招聘笔试冲刺题(带答案解析)
- 2025年外研版(2024)初中英语七年级下册期末考试测试卷及答案
- 人教版(2024)七年级下册英语期末模拟测试卷(含答案)
- 兵团开放大学2025年春季《公共关系学》终结考试答案
- 2024年贵州贵州贵安发展集团有限公司招聘笔试真题
- 2025年中考语文押题作文范文10篇
评论
0/150
提交评论