其他分享
首页 > 其他分享> > 【STM32F429】第4章 ThreadX USBX协议栈基础知识

【STM32F429】第4章 ThreadX USBX协议栈基础知识

作者:互联网

教程更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=108546

第4章   ThreadX USBX协议栈基础知识

本章节为大家讲解USB基础知识点,学习USB前,非常有必要有个系统的认识。

  4.1初学者重要提示

  4.2 USB历史

  4.3 USB架构

  4.4 USB硬件

  4.5 USB电流

  4.6 USB传输速度

  4.7 USB通信(重要)

  4.8 USB描述符

  4.9 USB类

  4.10 总结

 

 

4.1   初学者重要提示

1、  USB1.1和USB2.0规格书以及Cypress做的中文版USB文档,非常推荐大家学习:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=100698

2、  USB初学 -- 入门篇 (USB基础知识速览)

http://www.armbbs.cn/forum.php?mod=viewthread&tid=100687

3、  文献参考:

https://en.wikipedia.org/wiki/USB

https://zh.wikipedia.org/wiki/USB

https://en.wikipedia.org/wiki/USB_hardware

4.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 Power Delivery 2.0和USB-C规范,以纳入国际标准IEC 62680(通用串行总线接口,用于数据和电源),目前基于USB 2.0。

USB 3.2规范于2017年9月发布。

USB4规范于2019年8月29日由USB-IF发布。

 

 

4.3   USB架构

系统中只能有一个主机,并且与设备进行的通信是从主机的角度进行的。主机是“上行” 组件,设备则是“下行” 组件,数据从主机转移到外设的操作是 OUT 传输。数据从外设转移到主机的操作是 IN 传输。主机(尤其是主控制器)控制着所有通信并向设备发出指令。共有三种常见的 USB 主控制器:

可以将一个或多个设备连接至一个主机。每个设备均有一个地址,并且会对寻址它的主机指令做出响应。设备预计具有某种形式的功能,并不简单作为一个被动组件。设备具有一个上行端口。端口是设备上的 USB 物理连接点。集线器是一个专用设备,允许主机同总线上的多个外设进行通信。与 USB 外设(例如鼠标)具有实际功能不同,集线器设备是透明的,并且作为直通连接使用。集线器也作为主机和设备间的通道。集线器具有多个连接点,从而可以将多个设备连接到一个主机上。一个集线器可以将与下行设备进行的通信,重复使用到一个上行端口和最多七个下行端口。但集线器并没有主机功能。

通过使用集线器最多能够将 127 个设备连接至主控制器上。连接设备的数目限制由 USB 协议决定,它限制设备地址为 7 位。另外,由于集线器的时间限制和电缆传播的延迟,因此最多只能将五个集线器链接在一起。下图显示的是 USB 层次系统的框图,它表示集线器和设备的链接限制。大家可以看到,随着集线器的链接限制,层次系统也限制为七层。

 

USB设备分为以下几个类别:

Hubs集线器(USB扩展设备)提供了附加的连接点,并从用户角度简化了USB连接。每个集线器将单个连接点转换为多个连接点,称为端口。

Functions为系统提供了发送或接收数据和控制信息的功能。每个功能都包含描述设备功能和资源要求的配置信息。

复合设备是实现多种功能并包括嵌入式集线器的物理程序包。复合设备在主机上看起来像是带有一个或多个不可移动USB设备的集线器。复合设备支持不止一种类别,因此为主机提供了不止一种功能。

 

对于以主机为中心的开发,USB连接看起来像是星形网络。集线器不会引起任何编程复杂性,并且对程序员而言是透明的。无论是直接连接到根集线器还是通过中间集线器连接,USB设备的工作方式都相同。在该主/从网络中,所有USB设备都可用作可寻址节点。只有主机可以在网络中启动数据传输。

 

注意:

4.4   USB硬件

市场是上USB连机器种类非常多,常用的如下:

 

Type A,Type B是四个引脚,对于的引脚定义如下:

 

Mini 和 Micro 连接器具有五个(而不是 4 个)引脚。额外引脚是 ID 引脚,用于识别 OTG 应用中的主机和设备,此引脚接地表示主机,未连接表示设备。

 

更多的USB接口如下:

 

 

4.5   USB电流

USB2.0和USB3.0支持的电压范围和最大电流如下:

 

注:BC1.2是Battery Charging (BC) 1.2,PD是Power Delivery。

4.6   USB传输速度

不同USB版本的速度如下:

 

 

4.7   USB通信(重要)

USB是轮询总线,USB主机发起所有数据交换。数据往返于USB设备中的端点。USB主机中的客户端将数据存储在缓冲区中,但没有端点。USB主机和外围USB设备具有不同的层,如下图所示。层之间的连接是每个层之间的设备接口。在连接之间,使用Pipes传输数据。

 

USB数据是由二进制数字串构成的,首先数字串构成域,域再构成包Packet(令牌包、数据包、握手包),包再构成事务Transaction(IN、OUT、SETUP),事务再构成传输Transfer(中断传输、同步传输、批量传输和控制传输),传输最后再构成管道Pipe。下图可以形象的展示它们之间的关系:

 

 

4.7.1      管道(Pipes)

管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交换数据的能力。管道包括数据流管道和消息管道。

将USB设备连接到USB总线并由USB主机配置后,大多数管道就存在了。管道源自主机客户端中的数据缓冲区,并在USB设备端点的内部终止。

4.7.2      传输(Transfers)

传输(数据流类型管道)可以包含一个或多个事务,管道支持以下传输类型之一:

4.7.3      控制传输(Control Transfers)

控制传输是双向传输,供主机使用,以便主机使用IN和OUT端点0向设备发送和从设备请求配置信息。每个控制转移包括两个及其事务。控制端点数据的最大数据包大小:

通常,应用程序软件不使用这种类型的传输。控制传输的三个阶段:

1、SETUP阶段携带8个字节被称为设置包,定义请求,以及指定多少数据应在数据阶段被转移。

 

2、该数据阶段是可选的。如果存在,它将始终从包含DATA1数据包的事务开始。然后,事务类型在DATA0和DATA1之间交替,直到所有必需的数据都已传输。

3、STATUS阶段是含有零长度分组DATA1事务。如果DATA阶段为IN,则STATUS阶段为OUT,反之亦然。

 

 

4.7.4      中断传输(Interrrupt Transfers)

中断传输与设备之间的延迟有限。在USB中,中断传输或中断管道具有以下定义的轮询速率:

中断端点数据的最大包大小为:

开发人员可以定义主机多久请求设备进行数据传输。例如,对于鼠标,可以保证每10 ms的数据传输速率。但是,定义轮询速率并不能保证每10毫秒传输一次数据,而是保证交易将发生在第十帧内的某个位置。因此,USB事务有一定的抖动。

通常,中断传输数据由事件通知,字符和来自设备的坐标组成。

 

 

4.7.5      同步传输(Isochronous Transfers)

同步传输用于传输实时信息,例如音频和视频数据,并且必须以恒定的速率发送。为USB等时数据流分配了USB带宽的专用部分,确保按所需的速率传送数据。同步管道在每个帧中发送一个新的数据包,而不管最后一个包的成功或失败。

 

等时端点数据的最大数据包大小为:

同步传输没有错误检测。电气传输中的任何错误均无法纠正。同步传输也受定时抖动的影响。

 

 

4.7.6      批量传输(Bulk Transfers)

批量传输用于控制,中断和同步传输以外的数据。使用错误检测可以在硬件级别上确保可靠的数据交换。

数据的传输方式与中断传输的方式相同,但是没有定义轮询速率。批量传输占用了其他传输完成后的所有可用带宽。如果总线非常繁忙,则批量传输可能会延迟。

批量端点数据的最大数据包大小为:

对于低速和全速端点,以下内容有效:如果总线空闲,则可以在单个1ms帧中进行多个批量传输(中断和同步传输限制为每帧最多一个数据包)。

例如,批量传输将数据发送到打印机。只要在合理的时间范围内打印数据,确切的传输速率就不重要。

 

 

4.7.7      事务(Transaction)

事务:分别有IN事务、OUT事务和SETUP事务三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成:

 

 

在事务中,数据从USB主机传输到USB设备,反之亦然。传输方向在USB主机发送的令牌包中指定。然后,发送端发送一个数据包或指示它没有要传输的数据。通常,目的地以握手包作为响应,指示传输是否成功。

4.7.8      包(Packets)

每个数据包以当前传输速率传输整数个字节。数据包以同步模式开始,然后是数据包的数据字节,最后以数据包结束(EOP)信号结束。

 

所有USB数据包模式都首先发送最低有效位。在数据包之前和之后,总线处于空闲状态。

 

特殊的数据包是帧开始数据包(SOF),它将USB总线分为多个时间段。每个管道在每个帧中分配一个插槽。帧开始数据包在全速链路上每1ms发送一次。高速时,将1ms帧分为8个每帧125μs的微帧。在每个微帧的开头使用相同的帧号发送帧开始数据包。帧号每1ms增加一次。

 

 

4.7.9  域(field)

域是USB数据最小的单位,由若干位组成,域可分为七种类型:

 

 

4.7.10 端点(Endpoints)

端点,实际上是设备硬件上具有一定大小的数据缓冲区。USB系统中,每一个端点都有唯一的地址,是有设备地址和端点号给出的。默认设置端点0用作控制传输端点,其他端点必须在设备被主机配置后才能使用。

端点可以描述为数据源或接收器,并且仅存在于USB设备中。可以从USB主机接收或等待将其存储在端点上的数据。可以将端点配置为USB规范中定义的四种传输类型(控制传输,中断传输,同步传输和批量传输)。在硬件限制内,可以使用USB协议栈配置端点(例如,将端点限制为某种传输类型)。

端点充当一种缓冲区。例如,USB主机的客户端可以将数据发送到端点1。来自USB主机的数据将发送到OUT端点1。准备就绪后,微控制器上的程序将立即读取数据。由于程序无法自由访问USB总线(USB总线由USB主机控制),因此必须将返回数据写入IN端点1。IN端点1中的数据将保留在那里,直到主机向端点1发送一个IN数据包以请求数据为止。

这些规则适用于所有微控制器设备:

注意:

4.8   USB描述符

USB设备使用描述符报告其属性,描述符是具有定义格式的数据结构。每个描述符开头字节是此描述符的字节数,之后是描述符类型字段。

将USB设备连接到USB总线时,主机通过枚举来识别和配置设备。设备插入USB主机后,USB主机立即发送设置请求。系统将指示该设备选择配置和接口,以匹配USB主机上运行的应用程序。选择配置和接口后,设备必须为活动的端点提供服务,以此与USB主机交换数据。

常用的描述符如下:

 

具体各种描述符的定义,在后面章节为大家说明。

4.9   USB类

常用的USB类如下:

 

其中HID,CDC,Audio,MSC等类,将在后续章节详细说明。

4.10 总结

本章就为大家介绍这么多,涉及到的知识点比较多,需要大家看本章开头提供的参考文档地址来进一步的熟悉。

 

标签:USB,主机,USBX,传输,端点,设备,数据包,STM32F429,ThreadX
来源: https://www.cnblogs.com/armfly/p/15428554.html