目录
3.数据包类型的pid切换机制( data pid toggle )
一、拓扑结构
在一个USB通信系统中,只能有一个主机存在,USB通信只存在于主机和设备之间 ,每次通信都必须由主机发起 ,而设备和设备之间无法通信 。如图1,USB系统是一个分层的星型拓扑结构,可以使用hub来扩展设备。
图1
二、逻辑部件
如图2, 在设备端的通信传输最终呈现在端点上, 端点在物理上就是一块特殊的内存区域 ,它特殊就特殊在:既可以被CPU访问(也就是通过写程序用地址访问),也 可以被USB硬件引擎访问( 因此称之为 硬件缓冲区)。 最底层通信管道就是在设备的端点和主机应用程序的缓存之间进行。
图2
三、电气特性
使用差分线传输, 差分线上的信号不是原始数据,是经过了NRZI编码的 (关于NRZI编码此处不展开了,很简单的编码,网上也有非常多的资料) ,并且还加了位填充 (防止长时间电平不变化不利于信号接收的同步)
四、插入检测机制
主机端,差分线D+、D-都做了弱下拉处理。设备端,会在D+或D-上进行上拉处理,具体的,全速和高速设备对D+上拉,低速设备对D-上拉。因此 主机通过判断差分线的电平来进行插入检测,任意一根线的电平被拉高说明有设备插入 。
五、描述符
描述符就是设备记录自己的信息, 在程序中以结构体作为容器进行存储 。对USB1.1来说,有 设备描述符、配置描述符 、接口描述符、端点描述符、字符串描述符。具体细节不展开
六、枚举过程
枚举使用控制传输,这里只罗列一下大概的内容:
1.设备插入后,主机对设备复位。 设备复位后地址变为0,主机使用地址0与其通信 ,获取设备描述符的前8个字节,主机就此得知端点0的最大包长度
2.主机再次对设备复位,给设备分配一个地址。此后访问该设备使用分配的地址而不是地址0
3.主机再次获取设备描述符,需要获取设备描述符的全部字节
4.主机获取配置描述符,然后根据配置描述符中描述的配置集合总长度,获取配置集合
以上过程参考图3
图3
七、传输数据的层次结构
参考图4,
1.结构从上到下为Transfer(传输) Transaction(事务) Packet(包)
2.一次传输可以包含一个或多个事务 ( 控制传输包含三个过程,建立过程和状态过程分别是一个事务,中间的数据过程可能包含多个事务 ;其他三种传输,批量传输、同步传输、中断传输,一次传输只包含一个事务), 一个事务一般包含两个或三个包 (令牌包、数据包、握手包, 同步传输中的事务没有握手包 )
图4
八、包
包是传输的最基本单元
1.包的类型:
分为令牌包、数据包、握手包,SOF包(表示帧首)属于令牌包
2.包的组成:
参考图5,
(1)由四个部分组成:SOP, SYNC, Packet Content, EOP;其中SOP SYNC EOP为总线信号
**注意这里的SOP是包起始信号(start of packet),和SOF包是两回事(start of frame) **
图5
(2)包的内容即以上Packet Content的展开
一个包可能总共包含五个域,其中 PID域指示了当前包的类型 ,如图6, 不同类型的包其包内容包含1到5个域之间 ,此处具体不展开
图6
3.数据包类型的pid切换机制( data pid toggle )
数据包有4种pid:DATA0、DATA1、DATA2、DATAM。在传输数据包的过程中,如果发送或者接收成功,发生数据包类型的pid切换,这是一个传输检错机制 ,此处不展开
九、事务
1.事务由两个或三个包组成:
令牌包、数据包、握手包
2.同步传输中的事务没有握手包
3.批量传输、同步传输、中断传输的一次传输就是一个事务组成;控制传输由三个过程(stage)组成:建立过程和状态过程各自为一个事务,数据过程则可能包含多个事务
十、传输
四种类型的传输:控制传输、批量传输、同步传输、中断传输
1.控制传输:
每个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将通过控制传输与USB设备的控制端点通信,完成USB设备的枚举和配置
2.批量传输:
适合大数据量传输但对实时性没有严格要求的应用,如U盘
3.同步传输:
不做握手,速度快,数据易丢失。适合对实时性要求高但可以容忍少量数据错误的应用,如音频、视频
4.中断传输:
适合数据量小、需要周期性通信的应用,如鼠标、键盘