| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【STM32H7】第4章 ThreadX USBX协议栈基础知识 -> 正文阅读 |
|
[嵌入式]【STM32H7】第4章 ThreadX USBX协议栈基础知识 |
教程更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=108546 第4章?? ThreadX USBX协议栈基础知识本章节为大家讲解USB基础知识点,学习USB前,非常有必要有个系统的认识。 目录 4.7.3????? 控制传输(Control Transfers) 4.7.4????? 中断传输(Interrrupt Transfers) 4.7.5????? 同步传输(Isochronous Transfers) 4.7.6????? 批量传输(Bulk Transfers) 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 总结本章就为大家介绍这么多,涉及到的知识点比较多,需要大家看本章开头提供的参考文档地址来进一步的熟悉。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:35:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |