完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前面写了一些SPI/I2C/RS-485之类的文章,有朋友留言希望能分享一些USB方面的梳理总结,今天就从系统标准层面先来梳理一下。看看有没有朋友喜欢。先从系统层面来梳理。个人学习,习惯于先从整体上摸个大概,然后再对感兴趣的细节逐渐深入。
USB是比较复杂的协议栈,如果发现文章中有错误,请帮忙指正。 注:本文主要参考USB2.0规范第4章,将标准中个人认为比较重要的一些点尽量条理清晰的总结出来。我感觉很多朋友可能对于阅读英文标准有点轻度抗拒,所以整理此文这也是一个起因,希望对朋友们有所帮助。 总线拓扑 说到总线拓扑,这张图大家一定都见过: USB标准上说USB总线拓扑是一种分层星形结构,这张拓扑图延申出来的一些要点:
这个最大7层星形结构,代表的是一条USB总线,一个USB分层星型结构有且仅有一个USB主机控制器,但并不是说一台计算机就只有一个USB总线,比如我的计算机内部就是2个USB主控制器+Root Hub,从Windows设备管理器可以看到: 7层拓扑图中的第2层只画了一个Hub,并不意味真正的第2层就只能有一个Hub,但这个图无法显示出更为详细的总线连接关系,用USBTrace软件来看看: 第1条总线有4个端口,第2条总线的根集线器具有18个端口,其中8、9、10为计算机内部的USB设备占用了。我这台笔记本对外有两个USB接口,通过分别将U盘插入这两个端口,再利用USBTrace探测可以推断出这两个端口都属于第2条总线的Port 3以及Port 4: 那么Hub长什么样呢?比如下面是一个7口的USB Hub示意图,来源于USB2.0标准: 物理接口 电气概览 USB 通过四线电缆传输信号和电源。信令发生在每个点对点网段上的两条线上。
具有三种数据速率:
至于数据编码模式,这里先不管它。 机械概览 机械部分主要定义USB采用什么尺寸的接插件,线缆的颜色定义、线号。线缆的抗拉强度等。主要从以下几个方面去标准化:
[tr]连接器脚号信号名线芯颜色[/tr]
协议概述 USB采用主从通讯模式,是一种轮询总线。所有数据传输都由主机控制器发起。这是USB标准中最难啃的部分,这里先不总结。 健壮设计 标准关于协议健壮性,又称鲁棒性,做了这几个方面的设计:
配置管理 USB支持热插拔,所谓热插拔就是,设备插入,系统需要正确识别设备加载驱动程序,断开后,系统需要从软件层面识别到设备已经从总线上移除了。这里所谓的系统,有可能是带操作系统的计算机,也有可能是不带操作系统的嵌入式设备。 比如下面这个U盘插入移除的过程: 连接检测 所有的USB设备都必须经过集线器上的USB端口连接到总线。从总线拓扑图可以看出,总线上有一个主控制器,位于金字塔的顶端。上面动图中也可以看出,即便是计算机内部USB设备也是经由Hub的端口连接到总线的,现在的计算机内部很多设备也会采用USB总线进行互联,比如内置的蓝牙设备。 主机控制器位于顶端,设备是经过集线器的端口连接到总线,那么主控制器怎么知道设备插入呢?这是由于集线器具有用于报告USB设备在其端口之一上的连接或移除的状态位。主控制器查询集线器检索这些状态位。在设备插入时,主控制器启用端口并通过设备的控制管道在默认地址对USB设备进行寻址。主机为设备分配一个唯一的USB地址,然后确定新连接的USB设备是集线器还是功能设备。主机使用分配的USB地址和端点编号0为USB设备建立其控制管道的端点。
断开检测 同样移除时,从标准设计角度来看,也需要考虑两种情况。 如果是设备从集线器移除,集线器会禁用该端口并向主机提供设备移除的指示。然后主机控制器从软件层面做相应的移除处理。 如果是集线器移除,需要从软件层面移除该集线器所有端口的USB设备或级联集线器,当然如果集线器又连集线器,则有点递归的意思。 总线枚举 总线枚举是主控制器识别连接到总线的设备并为该设备分配唯一地址的活动。由于USB允许USB设备随时连接到USB总线或从USB总线断开,因此总线枚举是 USB系统软件的持续进行的过程。USB总线枚举还包括移除的检测和处理。 传输模式 USB利用单向或双向管道在USB主机控制器和USB设备之间进行应用数据和功能数据传输。管道Pipe是一个底层软件及硬件逻辑概念,数据就像水一样从管道中的一侧流向另一侧,就对应着主机控制器与设备的两个端点endpoint。endpoint就像管道的两头,也是软件逻辑概念。将主机与设备侧的端点逻辑关联起来,就是所谓的管道了。当然这管道之所以能传输数据,是因为主端、设备端两侧相应的代码配合芯片内部硬件实现的。 数据流经由一侧的端点通过逻辑管道传输到另一侧端点,USB架构包含四种基本类型的数据传输:
下表是这四类传输在不同速度模式下支持的最大包长度,放在这里有一个整体概念: [tr]速度模式低速全速高速[/tr]
控制传输 控制传输,主要用于在设备首次连接时配置设备;并可用于其他设备自定义的传输目的,比如控制设备上的其他管道。 USB系统软件在设备首次连接时使用控制传输进行设备配置。其他驱动程序软件也可以选择以自定义方式使用控制传输。控制传输主要使用管道0,数据传输是无损的。 每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。此外,控制传输是双向传输。 批量传输 批量传输Bulk Transfer就像其名字一样,数据量相对较大,具有突发性。这种突发性可能来源于用户对USB设备的操作,比如对U盘的读写操作就会触发批量传输。批量传输这种突发性也就意味着是非周期性的,一般用于没有实时性要求、数据量比较大设备。比如用于打印机或扫描仪的数据。批量传输数据是连续的。通过在硬件中使用错误检测并采用前面所说的错误重传机制,可以在硬件级别确保可靠的数据交换。此外,大量数据占用的带宽可能会有所不同,具体取决于其他总线活动,这是由主机控制器动态仲裁管理的。 批量传输是单向的,使用单向大容量端点来实现。 中断传输 一般用于需要实时可靠的传输场景。此类数据可随时由设备传输,并以不低于设备指定的速率进行传输。中断数据通常由一个或多个字节的事件通知、字符或坐标组成。比如USB鼠标就是一个采用中断传输的实例。 同步传输 占用预先约定好的USB带宽以及传输延迟,也称为流式实时传输。所需要的带宽以及延迟要求,与特定设备的相关数据吞吐率以及端点的缓冲管理有关,比如用于音频会议USB耳麦,对于音频的采样率是有参数要求的。 带宽分配 USB标准定义了如何允许每种传输类型访问总线的规则。带宽分配主要在从两个方面进行规定:
|
|||
|
|||
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
2998 浏览 16 评论
3496 浏览 1 评论
9066 浏览 16 评论
4089 浏览 18 评论
1186浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 06:07 , Processed in 1.087675 second(s), Total 47, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号