好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

USB的HID通信协议技术学习.doc

10页
  • 卖家[上传人]:m****
  • 文档编号:548205237
  • 上传时间:2024-02-25
  • 文档格式:DOC
  • 文档大小:64KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • USB事务处理是主机和设备之间数据传输的基本单位,由一系列具有特定格式的信息包组成因此,要了解完整的USB通信协议,必须从USB的信息传输单元包及其数据域谈起通过由下而上,从简单至复杂的通信协议单位组成各种复杂的通信协议,进而构建出完整的通信协议 16.4.1 包 包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的首先了解一下包的组成 USB包由五部分组成,即同步(SYNC)字段、包标识符(PID)字段、数据字段、循环冗余校验(CRC)字段和包结尾(EOP)字段,包的基本格式如下: 同步字段(SYNC) PID字段 数据字段 CRC字段 包结尾字段(EOP) 在USB的数据传输中,所有的传输包都起始于SYNC,接着是PID,后面是包中所包含的数据信息,接下来是用来检测包中数据错误的循环冗余校验信息,最后以包结尾作为结束标志下面我们将一一介绍每个字段 1.同步(SYNC)字段 SYNC字段由8位组成,作为每个数据信息包的前导顾名思义,它是用来产生同步作用的,目的是使USB设备与总线的包传输率同步,它的数值固定为00000001 2.包标识符(PID)字段 PID字段是紧随在SYNC字段后面,用来表示数据信息包的类型。

      在USB协议中,根据PID的不同,USB包有着不同的类型,分别表示具有特定的意义如下所示: PID0 PID1 PID2 PID3 包标识符长度为一个字节(8个数据位),由4个位的包类型字段和4个位的校验字段构成PID是USB包类型的唯一标志,USB主机和USB设备在接收到包后,必须首先对包标识符解码得到包的类型,并判断其意义从而做出下一个反应包标识符中的校验字段是通过对类型字段的每个位求反码产生的,它是用来对包类型字段进行错误检测用的,旨在保证对包的标识符译码的可靠性,如果4个检验位不是它们各自的类型位的反码,则说明标识符中的信息有错误 表16-2中列出了信息包的类型,包括令牌、数据、握手或特殊四种信息包类型为简化对USB的认识,有关高速传输的部分没有在表中列出  3.数据字段 在USB包中,数据字段是用来携带主机与设备之间要传递的信息,其内容和长度根据包标识符、传输类型的不同而各不相同并非所有的USB包都必须有数据字段,例如握手包、专用包和SOF令牌包就没有数据字段在USB包中,数据字段可以包含设备地址、端点号、帧序列号以及数据等内容在总线传输中,总是首先传输字节的最低位,最后传输字节的最高位。

      (1) 设备地址(ADDR)数据域 ADDR数据域由7位组成,可用来寻址多达127个外围设备 (2) 端点(ENDP)数据域 ENDP数据域由4位组成通过这4个位最多可寻址出32个端点这个ENDP数据域仅用在IN、OUT与SETUP令牌信息包中对于慢速设备可支持端点0以及端点1作为中断传输模式,而全速设备则可以拥有16个输入端点(IN)与16个输出端点(OUT)共32个端点 (3) 帧序列号 当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号帧序列号由主机产生,且每个数据帧自动加一,最大数值为0x7FF当帧序列号达到最大数时将自动从0开始循环 (4) 数据 它仅存于DATA信息包内,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(实时传输) 4.循环冗余校验(CRC)字段 根据不同的信息包类型,CRC数据域由不同数目的位所组成其中重要的数据信息包采用CRC16的数据域(16个位),而其余的信息包类型则采用CRC5的数据域(5个位)其中的循环冗余码校验CRC,是一种错误检测技术由于数据在传输时,有时候会发生错误,因此CRC可根据数据算出一个校验值,然后依此判断数据的正确性。

      5.包结尾(EOP)字段 包的发送方在包的结尾发出包结尾信号它表现为差分线路的两根数据线保持2比特低位时间和1比特空闲位时间USB主机根据EOP判断数据包的结束 16.4.2 信息包格式 根据信息包所实现的功能,其可以分为3种类型:令牌包、数据包和握手包其中,令牌包定义了数据传输的类型,数据包中含有需要传输的数据,握手包指明了数据接收是否成功 1.令牌(token)包 在USB系统中,只有主机才能发出令牌包令牌包定义了数据传输的类型,它是事务处理的第一阶段令牌包格式如下: 8位 8位 7位 4位 5位 SYNC PID ADDR ENDP CRC5 令牌包中较为重要的是SETUP、IN和OUT这三个令牌包它们用来在根集线器和设备端点之间建立数据传输一个IN包用来建立一个从设备到根集线器的数据传送,一个OUT包用来建立从根集线器到设备的数据传输IN包和OUT包可以对任何设备上的任何端点编址一个SETUP包是一个OUT包的特殊情形,它是“高优先级的”,也就是说设备必须接受它,即使设备正在进行数据传输操作的过程中也要对其进行响应SETUP包总是指向端点0的 2.数据(data)包 一个数据信息包包含了4个数据域:SYNC、PID、DATA与CRC16。

      在这里要注意的是DATA数据域内所放置的位值,需根据USB设备的传输速度(慢速、高速与全速)以及传输类型(中断传输、批量传输、等时传输)而定,且须以8字节为基本单位也就是,若传输的数据不足8字节,或传输到最后所剩余的也不足8字节,仍须传输8字节的数据域格式如下: 8位 8位 0~1023字节 16位 SYNC PID DATA CRC16 3.握手(Handshake)包 握手信息包是最简单的信息包类型在这个握手信息包中仅包含一个PID数据域而已,它的格式如下所列: 8位 8位 SYNC PID 其中仅包含SYNC与PID两个数据域 16.4.3 事务 在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)事务处理的类型包括输入(IN)事务处理、输出(OUT)事务处理、设置(SETUP)事务处理和帧开始、帧结尾等类型在输出(OUT)事务处理和设置(SETUP)事务处理中,紧接着SETUP和OUT包后的是DATA包,DATA0和DATA1包是交替地发送的,在DATA包后面,设备将回应一个握手信号,如果设备可以接收数据,就回应ACK包,如果设备忙,就回应NAK包,如果设备出错,则回应STALL包;在IN事务中,IN包后面是设备发来的DATA包或NAK包或STALL包,若设备忙或出错,就发NAK包或STALL包给主机,若设备数据准备好发送,则发DATA包,DATA0和DATA1包也是交替地发送的,紧接着DATA包后面是主机发给设备的握手包,ACK表示主机可以接收数据,NAK包代表主机忙,STALL包代表主机出错。

      下面我们再分别介绍这些事务 1.输入(IN)事务处理 输入事务处理表示USB主机从总线上的某个USB设备接收一个数据包的过程,接下来分析输入事务处理的各种典型情况: (1) 正常的输入事务处理 1.主机->设备(令牌信息包) SYNC IN ADDR ENDP CRC5 2.设备->主机(数据信息包) SYNC DATA0 DATA CRC16 3.主机->设备(握手信息包) SYNC ACK (2) 设备忙时的输入事务处理 1.主机->设备(令牌信息包) SYNC IN ADDR ENDP CRC5 2.设备->主机(握手信息包) SYNC NAK (3) 设备出错时的输入事务处理 1.主机->设备(令牌信息包) SYNC IN ADDR ENDP CRC5 2.设备->主机(握手信息包) SYNC STALL 2.输出(OUT)事务处理 (1) 正常的输出事务处理 1.主机->设备(令牌信息包) SYNC OUT ADDR ENDP CRC5 2.主机->设备(数据信息包) SYNC DATA0 DATA CRC16 3.设备->主机(握手信息包) SYNC ACK (2) 设备忙时的输出事务处理 1.主机->设备(令牌信息包) SYNC OUT ADDR ENDP CRC5 2.主机->设备(数据信息包) SYNC DATA0 DATA CRC16 3.设备->主机(握手信息包) SYNC NAK (3) 设备出错时的输出事务处理 1.主机->设备(令牌信息包) SYNC OUT ADDR ENDP CRC5 2.主机->设备(数据信息包) SYNC DATA0 DATA CRC16 3.设备->主机(握手信息包) SYNC STALL 3.设置(SETUP)事务处理 (1) 正常的设置事务处理 1.主机->设备(令牌信息包) SYNC SETUP ADDR ENDP CRC5 2.主机->设备(数据信息包) SYNC DATA0 DATA CRC16 3.设备->主机(握手信息包) SYNC ACK (2) 设备忙时的设置事务处理 1.主机->设备(令牌信息包) SYNC SETUP ADDR ENDP CRC5 2.主机->设备(数据信息包) SYNC DATA0 DATA CRC16 3.设备->主机(握手信息包) SYNC NAK (3) 设备出错时的设置事务处理 1.主机->设备(令牌信息包) SYNC SETUP ADDR ENDP CRC5 2.主机->设备(数据信息包) SYNC DATA0 DATA CRC16 3.设备->主机(握手信息包) SYNC STALL 16.4.4 USB传输类型 在USB的传输中,制定了4种传输类型:控制传输、中断传输、批量传输以及实时传输。

      这里只详细介绍控制传输,其他传输类型只作简要说明 1.控制传输 控制传输是USB传输中最重要的传输,唯有正确地执行完控制传输,才能进一步正确地执行其他传输模式 由于每个USB设备可能速度、传输的包的大小等信息有可能不同,因此每个USB设备内部都记录着该设备的一些信息(也就是接下来将要介绍的设备描述符),当在主机上检测到USB设备时,系统软件必须读取设备描述符,以确定该设备的类型和操作特性,以及对该设备进行相应的配置,这些工作都是通过控制传输来完成每个USB设备都必须实现一个缺省的控制端点,该端点总是0号端点 控制传输类型分为2~3个阶段:设置阶段、数据阶段(无数据控制没有此阶段)以及状态阶段根据数据阶段的数据传输的方向,控制传输又可分为3种类型:控制读取(读取USB描述符)、控制写入(配置USB设备)以及无数据控制以下介绍各阶段的工作 阶段一:设置阶段 USB设备在正常使用之前,必须先配置,本阶段由主机将信息传送给USB设备,定义对USB设备的请求信息(如:读设备描述符)主机一般会从USB设备获取配置信息后再确定此设备有哪些功能作为配置的一部分,主机会设置设备的配置值我们统称这一阶段为设置阶段。

      设置阶段由设置事务完成,也就是该阶段包含了SETUP令牌信息包、紧随其后的DATA0数据信息包(该信息包里的数据即为设备请求,本章将后续介绍)以及ACK握手信息包它的作用是执行一个设置的数据交换,并定义此控制传输的内容 阶段二:数据传输阶段 数据传输阶段是用来传输主机与设备之间的数据  控制读取是将数据从设备读到主机上,读取的数据USB设备描述符该过程如图16-8所示对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来然后,设备将数据通过DATA1数据信息包回传给主机。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.