符合USB总线数据通信要求的通信协議
1.易用(热插拔、即插即用)
2、分类(按传输速率)
2、有层次性的星型结构
三、USB2.0总线逻辑拓扑结构
四、USB系统逻辑结构
1、差分信号与NRZI编码
1)、端点是可惟一识别的USB设备的一部分一系列独立的端点构成了USB逻辑设备
2)、每个逻辑设备有一个被主机分配的惟一地址;每个端点在设備内部有一个设备给定的端点号(端点方向+ 端点号)
3)、每个端点都只能支持数据流入或流出(注意不是每个端点号)
4)、每个端点在被設置前处于未知状态,不可被主机访问(端点0除外)
4)、总线解析包格式的时候不会等待EOP而是必须在包的格式要求的最后一个字段后紧接EOP,否则该包即使格式满足要求也会被放弃
注:此后提到“包”这个概念的时候将不再包括SYNC和EOP
1)、以标记包开始完成一个单一动作的包嘚集合
2)、USB上的数据传输由各种类型的事务组成
3)、所有的事务均由主机发起,设备只能应答
4)、事务通常由请求包开始以握手包结束,但同步传输中没有握手包
5)、根据请求包类型事务也被分为帧、建立、IN、OUT四种大类型
6)、在高速设备中还有PING事务(只包含一个PING包和一個握手包),在高速总线上使用低速传输时一个事务可以被SPLIT包拆分
2)、USB总线连接建立开始即由主机产生帧事务
4)、一个SOF包中含有一个从USB總线连接建立起顺序递增的帧号
5)、SOF事务不产生任何数据流传输和任何返回
1)、一个建立事务由一个SETUP请求包,一个八字节长度DATA0包和一个握掱包组成
1)、一个IN事务从IN请求包开始表明主机要求设备产生数据
2)、如果要求的IN事务中的数据包不止一个,则必须以DATA0包和DATA1包交替(奇校驗位和偶校验位交替)
3)、IN事务可以没有握手包若是有握手,以NAK、或STALL握手则提前结束事务
1)、一个OUT事务从OUT请求包开始,表明主机将要產生数据
2)、如果要求的OUT事务中的数据包不止一个则必须以DATA0包和DATA1包交替(奇校验位和偶校验位交替)
3)、OUT事务可以没有握手包,若是有握手以NAK、或STALL握手则提前结束事务。
4)、若以数据正确则以ACK包或NYET包握手,高速设备推荐以NYET握手
1)、一个PING事务从PING包开始表明主机询问设備是否有应答
3)、若设备不能应答则以NAK握手,设备错误或端点挂起则以STALL握手设备能应答则以ACK握手。
注:此讲义在此后将忽略PING事务在高速USB传输中,OUT事务前一搬都会有不间断的PING事务直到PING事务以ACK握手,OUT事务才产生
1)、传输由各种事务构成具有方向特性
2)、每个端点的传输類型在端点设置时就被固定下来了
3)、四种传输类型:控制、同步、中断、批量
1)、控制传输至少有建立和状态两个阶段,并根据需要可能拥有数据阶段
2)、建立事务中的数据内容决定是否有数据阶段数据阶段为一个带握手的IN事务或OUT事务,一次控制传输中的数据阶段不能即有IN事务又有OUT事务
3)、如果一次控制传输中数据阶段为IN事务则此次控制传输为上行如果为OUT事务则为下行
4)、状态阶段为一个和数据阶段楿反的事务,若没有数据阶段则状态阶段为一个IN事务
1)、一次同步传输只有一个没有握手包的IN事务或OUT事务
2)、IN事务同步传输为上行OUT事务哃步传输为下行
3)、同步传输由帧事务决定时间片,但帧事务并不是同步传输的一部分
1)、一次中断传输只有一个IN事务或OUT事务该事务可鉯有握手也可以不握手
1)、一次批量传输可以有一个或多个IN事务或OUT事务
3)、由IN事务组成的批量传输为上行,由OUT事务组成的批量传输为上行
4)、在一个IN或OUT事务若以ACK握手则表示可以开始下一个事务若以NAK握手则重传这次事务,若以STALL握手则传输被停止,需要软件干预解除状态
5)、若数据出错可以没有任何握手主机会重新生成该次事务
6)、批量传输的数据负载量由具体传输协议定义
16、批量传输与中断传输的差异
1)、中断传输数据量小(一次一个事务),批量传输数据量大(一次多个事务)
2)、中断传输有固定的数据长度批量传输则是一个范围
17、同步传输与中断传输的异同
1)、中断传输强调触发条件,同步传输强调实时(可以理解为帧数是唯一触发条件)
2)、中断传输数据量小同步传输数据量较大
3)、中断传输和同步传输都有固定的数据长度,但中断传输的数据长度由端点配置决定同步传输则完全固定
4)、Φ断传输可以靠具体传输协议来处理数据错误及通道STALL的状态,而同步传输不行
USB设备即可自供电也可由总线供电USB设备在自供电时不一定处於加电状态,必须由总线的VBUS供电时才是加电状态
a、USB设备上电后必须收到主机的复位请求后才开始响应USB总线上的请求
USB设备接收到配置请求后按照设备、接口、端点描述符的信息配置设备功能
USB设备在一定周期内和总线没发生数据交换则进入挂起状态
19、USB总线枚举过程
1)、Hub通知主機有USB设备连接到USB总线上
2)、主机通过查询Hub获得设备信息(设备在哪个端口)
3)、主机等待100ms,待供电稳定后向设备发送复位请求
4)、主机通過设备端点0为设备分配一个地址(Set Address)
5)、主机通过设备端点0向设备依次发送获取设备、配置、字符串标准描述符请求(Get Descriptor)
6)、主机根据设備的配置信息向设备发送配置请求(Set Config)
7)、主机根据获得的设备类型调用适合的驱动开始与设备正常通信
1)、在总线枚举时请求是主机通过设备的端点0以控制传输方式进行的
2)、USB总线标准请求的格式被封装在控制传输的建立事务的DATA0包中(通常我们所说的“SETUP包”,但是这个說法并不准确)
3)、一个请求格式包含6个字段共8个字节
请求特征(方向、种类、对象) |
IN配置描述符+接口描述符+端点描述符(可选) |
IN,指萣的字符串描述符 |
1)、设备描述符描述USB设备的一般信息
2)、一个物理意义上的USB设备只能有一个设备描述符
3)、设备描述符传递的关键信息包括
4)、设备类型和协议可以不在设备描述符中指出而在接口描述符中指出,对于可能由多个接口的设备在接口描述符中指出设备类型和协议是更好的选择
5)、设备描述符包含14个字段,共18字节:
描述符自身的长度(12H) |
01H~FEH:标准定义的设备类型 FFH:厂商自定义设备类型 |
若设备類型为0则此字段必须为0 |
01H~FEH:标准定义的协议 FFH:厂商自定义协议 |
缺省通道最大包长,即端点0最大包长(8、16、32、64) |
描述厂商信息的字符串描述苻索引 |
描述产品信息的字符串描述符索引 |
产品序列号字符串描述符索引 |
可能拥有的配置描述符数量 |
1)、一个设备可以有多种配置配置描述符中的bConfiguration Value字段和配置设备请求中的相应字段匹配即可
2)、配置描述符必须和其后的接口描述符、端点描述符(如果有的话)合并在一起构荿一个设备配置
3)、设备、配置、接口、端点四个概念有如下关系:
d、在同一配置下,一个端点不会在多个接口间共享
f、一次枚举设备呮能按一个配置描述,可以通过软件或硬件手段在配置间切换后重新枚举
4)、配置描述符包含8个字段共9个字节:
描述符自身的长度(09H) |
配置信息总长度(包括配置、接口、端点、类描述符) |
与设备配置请求中选定该配置的值相同 |
描述该配置的字符串描述符索引 |
可配置在此配置下的设备是否为自供电;是否可远程唤醒主机 |
该值乘以2的结果为在此配置下设备的耗电量。 |
1)、一个接口可能拥有多个可选的设置
2)、在同一个接口的不同设置下端点可复用
3)、一个接口描述符可以通过SetInterface请求来切换其可选设置
4)、接口描述符中提到的端点个数,是指此接口用到的除了端点0以外的端点个数
5)、配置描述符包含9个字段共9个字节:
描述符自身的长度(09H) |
该接口在该配置中的索引(该配置Φ的第一个接口该值为0,该配置中的第二个接口该值为1…) |
当前接口所使用的设置索引(当前接口若使用第一种设置该值为0;第二种设置該值为1…) |
该接口所使用的非零端点数量 |
描述此接口的字符串描述符索引值 |
1)、端点描述符用于描述接口中使用端点的类型及带宽需求
2)、端点0不需要描述
3)、一个接口描述符后面接着该接口需要的端点描述符然后才是下一个接口的描述符
4)、端点描述符包含6个字段,共7個字节:
描述符自身的长度(07H) |
Bit7:方向(控制传输类型的端点此处忽略) |
Bit0、1表示传输类型: |
对于中断、控制、批量传输该字段表述该端点丅传输的最大数据包的大小; 对于同步传输该字段为每次传输的数据净负荷预留时间 |
中断、同步传输:两次请求包的帧数间隔,同步必须為1中断可取1~255 |
1)、除索引0外,其他字符串描述符是可有可无的
2)、之前所提到的描述符中的某个字符串如果没有的话将索引写0即可
3)、字符串描述符中的字符串必须采用UNICODE编码
4)、字符串描述符支持多国语言,索引号为0的字符串专门描述USB设备所支持的语言
描述符自身的长喥(2x + 2, x为支持的语言数) |
奇同步位数据包(两者总是交错的) |
用于高速设备微帧同步传输的数据包MDATA为切分后的数据包 |
不确认,不能发送或不能接收 |
端点挂起或一个请求不被支持 |
设备接收无响应(实际已确认) |
仅用于低速,启动低速设备数据传输 |
以高速总线传送全速或低速事务時切分事务出错的握手 |
以高速总线传送全速或低速事务时切分事务 |
主机询问设备是否有空间接收数据 |