一:常用术语和缩写
ACK:表示肯定应答的握手包 CRC:循环冗余校验
EOF:帧结束 EOP:包结束
SOF:帧开始 SOP:包开始
TRP:I/O请求包 IRQ :中断请求
LOA:丢失总线活动 LSB:最低字节
MSB:最高字节 NAK:握手包
PID:包ID POR:上电复位
二:USB2.0理论速度
高速:480Mb/s
全速:12Mb/s
低速:1.2Mb/s
三:检测设备连接
当D+、D-上出现(VCC*15/(15+1.5))的电压时主机就会知道有设备连接了。
四:通讯协议
1:包(Packet),包是USB系统传输的基本单元,包的组成部分如下
SYNC:由八位组成,用来产生同步作用,固定为0000 0001。
PID:包的类型,前四字节表示PID编码,后四字节表示对前四字节的每位取反,就是校验码。
数据字段:用来传输主机与设备之间的信息,其长度内容非固定不变。在总线传输中首先传输字节的最低位。
(1)ADDR数据域:由七位组成,可寻址最多127个外围设备
(2)ENDP端点数据域:由四位组成最多可寻址32个端点,此端点数据域紧用在IN,OUT和 SETUP令牌信息包中。
(3)帧***:当USB令牌包的PID为SOF时,其数据字段必须为11位的帧***,帧***由主机产生,且每个数据 帧自动加一,最大数值为0x7fff,当溢出时将自动从零开始计算循环。
(4)数据:存于DATA包内,不同传输类型拥有不同的字节大小,0到1023字节(实时传输)
CRC字段: 判断数据在传输过程中是否产生错误,不同包类型的CRC字段是不一样长的,数据信息采用CRC16,其余的包 采用CRC5.
EOP包结束:每个包的结束标志
1.1:令牌包
主机才能发出令牌包,令牌包定义了数据的传输类型,他是事务处理的第一阶段,令牌包中较为重要的是SETUP,IN和OUT这三个令牌包。令牌包格式如下。
1.2:数据包
数据封包含有4个域:SYNC,PID,DATA,CRC16。DATA数据域的位值是根据USB设备的传输速度及传输类型而定,且许以8字节为基本单位,
1.3:握手包
握手信息包是最简单信息包类型。在这个包中仅包含一个PID数据域而已,
五:事务
USB的数据的一次接收或发送的处理过程称为事务处理。事务处理包括IN,OUT,SETUP,帧开始,帧结尾等事务类型。
1:IN事务处理
表示主机从设备接收一个数据包的过程。
1.1:正常IN事务处理
1.2:繁忙IN事务处理
1.3:出错IN事务处理
2:OUT事务处理过程,SETUP事务处理与OUT事务处理是一样的方式
2.1:正常OUT事务处理
2.2:繁忙OUT事务处理
2.3:出错OUT事务处理
六:传输类型
在USB传输中有四种传输类型:控制传输,中断传输,批量传输,同步传输。
1:控制传输
控制传输类型分为3个阶段:设置阶段,数据阶段,和状态阶段。根据数据阶段的数据传输方向又可分为三种类型:控制读取“读取USB描述符”,控制写入“配置USB设备”,及无数据操作。
1.1:设置阶段
主机从USB设备中获取配置信息,并设置设备的配置值。设置阶段的数据交互包含了SETUP令牌封包,其后的DATA0封包以及ACK握手封包。
1.2:数据传输阶段
1.3:状态阶段
状态阶段用来表示整个传输过程的结束,状态阶段传输的方向必须与数据阶段的方向相反。
2:同步传输
实时传输适用于必须以固定速率抵达或在指定时刻抵达,一般用于麦克风,喇叭等设备。实时传输只需要令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。
3:批量传输
用于传输大量数据,要求传输不能出错,对时间没有要求,常用于打印机,存储设备等。
4:中断传输
中断传输方式总是用于对设备的查询,以确定是否有数据要传输。因此中断传输的方向总是从USB设备到主机。
七:设备列举
USB描述符详细记录外围USB设备相关的一切信息。为了描述不同数据,就需要不同的USB描述符。
1:设备描述符
设备描述符具有18个字节,并且是主机向设备请求的第一个描述符。
2:配置描述符
3:接口描述符
4:端点描述符
八:设备请求
几个主要的设备请求有:清除请求(ClearFeature),获得描述符(GetDescriptor),设置地址(SetAddress),设置状态(SetConfiguration)。
设备请求
1:ClearFeature
该请求格式如上图所示,wValue表示特性选择器,他对应的值位:0=端点,1=设备。当某个特性不允许取消,或该特性不存在,或指向一个不存在的接口或端点时,该请求会导致设备请求失败。如果端点被固件设置为停止状态。主机可发送一个值为0的clear_feature命令清除该端点的停止状态。
2:GetDescriptor
该请求可以取得USB设备中存在的特定描述符,wValue的高字节表示要取得描述符类型,低字节表示描述符的索引值。
3:SetAddress
请求给USB设备设置地址,从而可以对USB设备进行进一步访问,该请求下,USB设备一直不改变他的地址,直到该请求的状态阶段成功的完成,而其他请求操作都是在状态阶段之前完成的,若设备地址大于127,或者wIndex或wLength为非0值,该请求不执行。
4:SetConfiguration
该请求对设备进行设置,该请求中wValue的低字节表示设置的值,该值必须为0或者与配置描述符中的配置值相匹配。
5:设备列举
主机通过USB设备请求来取得设备描述符并对该设备进行配置。可以简化为5步:
(1)使用预设地址0取得设备描述符。
(2)设置设备新地址
(3)使用新地址取得设备描述符。
(4)取得配置描述符
(5)设置配置描述符
设备列举使用的是控制传输,1,3,4步使用的控制读取。2,5步使用的无数据控制。
USB 2.0中文手册:https://download.csdn.net/download/qq_36573222/12391778