本章节为⼤家讲解USB基础知识点,学习USB前,⾮常有必要有个系统的认识。 8.1初学者重要提⽰ 8.2 USB历史 8.3 USB架构 8.4 USB硬件 8.5 USB电流 8.6 USB传输速度 8.7 USB通信(重要) 8.8 USB描述符 8.9 USB类 8.10 总结
8.1 初学者重要提⽰
USB1.1和USB2.0规格书以及Cypress做的中⽂版USB⽂档,⾮常推荐⼤家学习: USB初学 -- ⼊门篇 (USB基础知识速览) ⽂献参考:
8.2 USB历史
1994年,由七个公司组成的⼩组开始开发USB:Compaq,DEC,IBM,Intel,Microsoft,NEC和Nortel。⽬标是通过替换PC背⾯的众多连接器,解决现有接⼝的可⽤性问题以及简化所有连接到USB设备的软件配置,从根本上简化外部设备连接⾄PC,并且可以为外部设备提供更⾼的数据速率。 阿杰·巴特(Ajay Bhatt)和他的团队在英特尔制定该标准。第⼀批集成电路⽀持USB的产品由英特尔于1995年⽣产。最初的USB 1.0规范于1996年1⽉推出,它定义了1.5 Mbit / s 低速和12 Mbit / s全速的数据传输速率 。12 Mbit / s适⽤于打印机和软盘驱动器等⾼速设备,1.5 Mbit / s适⽤于键盘,⿏标和操纵杆等低数据速率设备。Microsoft Windows 95,OSR 2.1在1997年8⽉为设备提供了OEM⽀持。USB的第⼀个⼴泛使⽤的版本是1998年9⽉发布的1.1。苹果的iMac是第⼀个带有USB的主流产品,⽽iMac的成功推⼴了USB本⾝。在苹果公司决定从iMac上删除所有兼容端⼝之后,许多PC制造商开始构建兼容版PC,这导致使⽤USB成为PC市场标准。
USB 2.0规范于2000年4⽉发布,并在2001年底被USB-IF批准。惠普,英特尔,朗讯科技(现为诺基亚),NEC和飞利浦共同领导了该计划。开发更⾼的数据传输速率,从⽽使规范达到480 Mbit / s,是原始USB 1.1规范的40倍。
USB 3.0规范发布于2008年11⽉12⽇,其主要⽬标是提⾼数据传输速率(⾼达5 Gbit / s),减少电⼒消耗,提⾼输出功率,并且向后兼容USB 2.0。USB 3.0包括与USB 2.0总线类似的新型⾼速总线SuperSpeed。因此,新版本也称为SuperSpeed。⾸批配备USB 3.0的设备于2010年1⽉推出。截⽌到2008年,全球市场上⼤约有60亿个USB端⼝和接⼝,每年⼤约销售20亿个。
USB 3.1规范于2013年7⽉发布。2014年12⽉,USB-IF向IEC(TC100–⾳频,视频和多媒体系统和设备)提交了USB 3.1,USB PowerDelivery 2.0和USB-C规范,以纳⼊国际标准IEC 62680(通⽤串⾏总线接⼝,⽤于数据和电源),⽬前基于USB 2.0。USB 3.2规范于2017年9⽉发布。
USB4规范于2019年8⽉29⽇由USB-IF发布。
8.3 USB架构
系统中只能有⼀个主机,并且与设备进⾏的通信是从主机的⾓度进⾏的。主机是“上⾏” 组件,设备则是“下⾏” 组件,数据从主机转移到外设的操作是 OUT 传输。数据从外设转移到主机的操作是 IN 传输。主机(尤其是主控制器)控制着所有通信并向设备发出指令。共有三种常见的 USB 主控制器:
通⽤主控制器接⼝(UHCI): 由 Intel ⽣产,适⽤于 USB 1.0 和 USB 1.1。使⽤ UHCI 时需要得到 Intel 的许可。该控制器⽀持低速模式和全速模式。
开放主控制器接⼝(OHCI): 由 Compaq、 Microsoft 和 National Semiconductor ⽣产, 适⽤于 USB 1.0 和 1.1。该控制器⽀持低速模式和全速模式, 并且它的效率⽐ UHCI 更⾼, 因为可以执⾏更多硬件功能。
扩展型主控制器接⼝(EHCI): 在 USB-IF 要求发布单⼀主控制器规范后,已经⽣产了该控制器,它适⽤于 USB2.0。 EHCI 仅⽀持⾼速传输,并且将低速和全速传输委托给 OHCI 或 UHCI 控制器执⾏。
可以将⼀个或多个设备连接⾄⼀个主机。每个设备均有⼀个地址,并且会对寻址它的主机指令做出响应。设备预计具有某种形式的功能,并不简单作为⼀个被动组件。设备具有⼀个上⾏端⼝。端⼝是设备上的 USB 物理连接点。集线器是⼀个专⽤设备,允许主机同总线上的多个外设进⾏通信。与 USB 外设(例如⿏标)具有实际功能不同,集线器设备是透明的,并且作为直通连接使⽤。集线器也作为主机和设备间的通道。集线器具有多个连接点,从⽽可以将多个设备连接到⼀个主机上。⼀个集线器可以将与下⾏设备进⾏的通信,重复使⽤到⼀个上⾏端⼝和最多七个下⾏端⼝。但集线器并没有主机功能。
通过使⽤集线器最多能够将 127 个设备连接⾄主控制器上。连接设备的数⽬由 USB 协议决定,它设备地址为 7 位。另外,由于集线器的时间和电缆传播的延迟,因此最多只能将五个集线器链接在⼀起。下图显⽰的是 USB 层次系统的框图,它表⽰集线器和设备的链接。⼤家可以看到,随着集线器的链接,层次系统也为七层。
USB设备分为以下⼏个类别:
Hubs
Hubs集线器(USB扩展设备)提供了附加的连接点,并从⽤户⾓度简化了USB连接。每个集线器将单个连接点转换为多个连接点,称为端⼝。
Functions
Functions为系统提供了发送或接收数据和控制信息的功能。每个功能都包含描述设备功能和资源要求的配置信息。
Composite Devices
复合设备是实现多种功能并包括嵌⼊式集线器的物理程序包。复合设备在主机上看起来像是带有⼀个或多个不可移动USB设备的集线器。复合设备⽀持不⽌⼀种类别,因此为主机提供了不⽌⼀种功能。
对于以主机为中⼼的开发,USB连接看起来像是星形⽹络。集线器不会引起任何编程复杂性,并且对程序员⽽⾔是透明的。⽆论是直接连接到根集线器还是通过中间集线器连接,USB设备的⼯作⽅式都相同。在该主/从⽹络中,所有USB设备都可⽤作可寻址节点。只有主机可以在⽹络中启动数据传输。
注意:
任何USB系统中仅存在⼀个主机。 在第7层中,只能启⽤功能。 符合设备占据两层。
8.4 USB硬件
市场是上USB连机器种类⾮常多,常⽤的如下:
Type A,Type B是四个引脚,对于的引脚定义如下:
Mini 和 Micro 连接器具有五个(⽽不是 4 个)引脚。额外引脚是 ID 引脚,⽤于识别 OTG 应⽤中的主机和设备,此引脚接地表⽰主机,未连接表⽰设备。
更多的USB接⼝如下:
8.5 USB电流
USB2.0和USB3.0⽀持的电压范围和最⼤电流如下:
注:BC1.2是Battery Charging (BC) 1.2,PD是Power Delivery。
8.6 USB传输速度
不同USB版本的速度如下:
8.7 USB通信(重要)
USB是轮询总线,USB主机发起所有数据交换。数据往返于USB设备中的端点。USB主机中的客户端将数据存储在缓冲区中,但没有端点。USB主机和外围USB设备具有不同的层,如下图所⽰。层之间的连接是每个层之间的设备接⼝。在连接之间,使⽤Pipes传输数据。
USB数据是由⼆进制数字串构成的,⾸先数字串构成域,域再构成包Packet(令牌包、数据包、握⼿包),包再构成事务
Transaction(IN、OUT、SETUP),事务再构成传输Transfer(中断传输、同步传输、批量传输和控制传输),传输最后再构成管道Pipe。下图可以形象的展⽰它们之间的关系:
8.7.1 管道(Pipes)
管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交换数据的能⼒。管道包括数据流管道和消息管道。
Message Pipes:消息管道具有定义的USB格式,并且受主机控制。消息管道允许数据双向流动,并且仅⽀持控制传输。
Stream Pipes:流管道没有定义的USB格式,可以由主机或设备控制。数据流具有预定义的⽅向,即IN或OUT。流管道⽀持中断传输,同步传输和批量传输。
将USB设备连接到USB总线并由USB主机配置后,⼤多数管道就存在了。管道源⾃主机客户端中的数据缓冲区,并在USB设备端点的内部终⽌。
8.7.2 传输(Transfers)
传输(数据流类型管道)可以包含⼀个或多个事务,管道⽀持以下传输类型之⼀:
控制传输通常⽤于设置USB设备。它们始终使⽤IN / OUT端点0。 中断传输可⽤于定期发送数据的地⽅,例如⽤于状态更新。
同步传输传输实时数据,例如⾳频和视频。它们具有固定带宽,但没有错误检测。 批量传输可⽤于时间不重要的数据发送,例如打印机。
8.7.3 控制传输(Control Transfers)
控制传输是双向传输,供主机使⽤,以便主机使⽤IN和OUT端点0向设备发送和从设备请求配置信息。每个控制转移包括两个及其事务。控制端点数据的最⼤数据包⼤⼩:
低速USB是8个字节。
全速USB是8,16,32或者字节。 ⾼速USB是字节。
通常,应⽤程序软件不使⽤这种类型的传输。控制传输的三个阶段:
1、SETUP阶段携带8个字节被称为设置包,定义请求,以及指定多少数据应在数据阶段被转移。
2、该数据阶段是可选的。如果存在,它将始终从包含DATA1数据包的事务开始。然后,事务类型在DATA0和DATA1之间交替,直到所有必需的数据都已传输。
3、STATUS阶段是含有零长度分组DATA1事务。如果DATA阶段为IN,则STATUS阶段为OUT,反之亦然。
8.7.4 中断传输(Interrrupt Transfers)
中断传输与设备之间的延迟有限。在USB中,中断传输或中断管道具有以下定义的轮询速率:
全速和低速分别为1ms和255ms。 ⾼速端点为125µs⾄4096ms。中断端点数据的最⼤包⼤⼩为:
全速USB最⼤字节。 ⾼速USB最⼤1024字节。
开发⼈员可以定义主机多久请求设备进⾏数据传输。例如,对于⿏标,可以保证每10 ms的数据传输速率。但是,定义轮询速率并不能保证每10毫秒传输⼀次数据,⽽是保证交易将发⽣在第⼗帧内的某个位置。因此,USB事务有⼀定的抖动。通常,中断传输数据由事件通知,字符和来⾃设备的坐标组成。
8.7.5 同步传输(Isochronous Transfers)
同步传输⽤于传输实时信息,例如⾳频和视频数据,并且必须以恒定的速率发送。为USB等时数据流分配了USB带宽的专⽤部分,确保按所需的速率传送数据。同步管道在每个帧中发送⼀个新的数据包,⽽不管最后⼀个包的成功或失败。
等时端点数据的最⼤数据包⼤⼩为:
全速最⼤1023字节。 ⾼速最⼤1024字节。
同步传输没有错误检测。电⽓传输中的任何错误均⽆法纠正。同步传输也受定时抖动的影响。
8.7.6 批量传输(Bulk Transfers)
批量传输⽤于控制,中断和同步传输以外的数据。使⽤错误检测可以在硬件级别上确保可靠的数据交换。
数据的传输⽅式与中断传输的⽅式相同,但是没有定义轮询速率。批量传输占⽤了其他传输完成后的所有可⽤带宽。如果总线⾮常繁忙,则批量传输可能会延迟。
批量端点数据的最⼤数据包⼤⼩为:
全速USB⽀持8、16、32或字节。 ⾼速USB⽀持512字节。
对于低速和全速端点,以下内容有效:如果总线空闲,则可以在单个1ms帧中进⾏多个批量传输(中断和同步传输为每帧最多⼀个数据包)。
例如,批量传输将数据发送到打印机。只要在合理的时间范围内打印数据,确切的传输速率就不重要。
8.7.7 事务(Transaction)
事务:分别有IN事务、OUT事务和SETUP事务三⼤事务,每⼀种事务都由令牌包、数据包、握⼿包三个阶段构成:
令牌包(Token Packet)是定义事务类型,⽅向,设备地址和端点。 数据在数据包(Data Packet)中传输。
事务的最终状态在握⼿数据包(Handshake Packet)中确认。
在事务中,数据从USB主机传输到USB设备,反之亦然。传输⽅向在USB主机发送的令牌包中指定。然后,发送端发送⼀个数据包或指⽰它没有要传输的数据。通常,⽬的地以握⼿包作为响应,指⽰传输是否成功。
8.7.8 包(Packets)
每个数据包以当前传输速率传输整数个字节。数据包以同步模式开始,然后是数据包的数据字节,最后以数据包结束(EOP)信号结束。
所有USB数据包模式都⾸先发送最低有效位。在数据包之前和之后,总线处于空闲状态。
特殊的数据包是帧开始数据包(SOF),它将USB总线分为多个时间段。每个管道在每个帧中分配⼀个插槽。帧开始数据包在全速链路上每1ms发送⼀次。⾼速时,将1ms帧分为8个每帧125µs的微帧。在每个微帧的开头使⽤相同的帧号发送帧开始数据包。帧号每1ms增加⼀次。
8.7.9 域(field)
域是USB数据最⼩的单位,由若⼲位组成,域可分为七种类型:
同步域(SYNC),8位,值固定为0000 0001,⽤于本地时钟与输⼊同步,标志⼀个包的起始。
标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式,可以计算出USB的标识码有16种。
地址域(ADDR):七位地址,代表了设备在主机上的地址,地址000 0000被命名为零地址,是任何⼀个设备第⼀次连接到主机时,在被主机配置、枚举前的默认地址,因此⼀个USB主机只能接127个设备。 端点域(ENDP),4位,由此可知⼀个USB设备有的端点数量最⼤为16个。
帧号域(FRAM),11位,每⼀个帧都有⼀个特定的帧号,帧号域最⼤容量0x800,帧号连续增加,到0x7ff后从⾃动0开始,对于同步传输有重要意义。
数据域(DATA):长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度。
校验域(CRC):对令牌包(CRC5)和数据包(CRC16)中⾮PID域进⾏校验的⼀种⽅法,CRC校验在通讯中应⽤很泛,是⼀种很好的校验⽅法,⾄于具体的校验⽅法请查阅相关资料,只须注意CRC码的除法是模2运算,不同于10进制中的除法。
8.7.10 端点(Endpoints)
端点,实际上是设备硬件上具有⼀定⼤⼩的数据缓冲区。USB系统中,每⼀个端点都有唯⼀的地址,是有设备地址和端点号给出的。默认设置端点0⽤作控制传输端点,其他端点必须在设备被主机配置后才能使⽤。
端点可以描述为数据源或接收器,并且仅存在于USB设备中。可以从USB主机接收或等待将其存储在端点上的数据。可以将端点配置为USB规范中定义的四种传输类型(控制传输,中断传输,同步传输和批量传输)。在硬件内,可以使⽤USB协议栈配置端点(例如,将端点为某种传输类型)。
端点充当⼀种缓冲区。例如,USB主机的客户端可以将数据发送到端点1。来⾃USB主机的数据将发送到OUT端点1。准备就绪后,微控制器上的程序将⽴即读取数据。由于程序⽆法⾃由访问USB总线(USB总线由USB主机控制),因此必须将返回数据写⼊IN端点1。IN端点1中的数据将保留在那⾥,直到主机向端点1发送⼀个IN数据包以请求数据为⽌。这些规则适⽤于所有微控制器设备:
⼀个设备最多可以有16个OUT和16个IN端点。 每个端点只能有⼀个传输⽅向。
端点 0仅⽤于控制传输,不能分配任何其他功能。 OUT始终是指从主机指向设备的⽅向。 IN始终指指向主机的⽅向。注意:
端点的总数和每个端点⽀持的功能由硬件定义。
8.8 USB描述符
USB设备使⽤描述符报告其属性,描述符是具有定义格式的数据结构。每个描述符开头字节是此描述符的字节数,之后是描述符类型字段。将USB设备连接到USB总线时,主机通过枚举来识别和配置设备。设备插⼊USB主机后,USB主机⽴即发送设置请求。系统将指⽰该设备选择配置和接⼝,以匹配USB主机上运⾏的应⽤程序。选择配置和接⼝后,设备必须为活动的端点提供服务,以此与USB主机交换数据。常⽤的描述符如下:
设备描述符。 配置描述符。 接⼝描述符。
⼀个或多个端点描述符。
具体各种描述符的定义,在后⾯章节为⼤家说明。
8.9 USB类
常⽤的USB类如下:
其中HID,CDC,Audio,MSC等类,将在后续章节详细说明。
8.10 总结
本章就为⼤家介绍这么多,涉及到的知识点⽐较多,需要⼤家看本章开头提供的参考⽂档地址来进⼀步的熟悉。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务