USB通信协议深入理解( 三 )


USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器 。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务 。
一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成 。
翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转 PID,发送下一个数据包,否则会重试本次事务传输 。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传 。
它通过在硬件级执行“错误检测”和“重传”来确保host与device之间“准确无误”地传输数据,即可靠传输 。它由三种包组成(即IN事务或OUT事务):

  1. token
  2. data
  3. handshake

USB通信协议深入理解

文章插图
 
  1. For IN Token (即:IN Transaction)
  • ACK: 表示host正确无误地接收到数据
  • NAK: 指示设备暂时不能返回或接收数据 (如:设备忙)
  • STALL:指示设备永远停止,需要host软件的干预 (如:设备出错)
  1. For OUT Token (即:OUT Transaction)
如果接收到的数据包有误,如:CRC错误,Device不发送任何handshake包
  • ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包
  • NAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)
  • STALL: 指示Device endpoint已经停止,且通知Host不再重传
  1. Bulk读写序列

USB通信协议深入理解

文章插图
 
即由一系统IN事务或OUT事务组成 。
3.3 中断传输(Interrupt Transfer)
中断传输由IN或OUT事务组成 。
中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的 。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西 。
主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输 。中断传输有较高的优先级,仅次于同步传输 。
同样中断传输也采用PID翻转的机制来保证收发端数据同步 。下图为中断传输的流程图 。
中断传输方式总是用于对设备的查询,以确定是否有数据需要传输 。因此中断传输的方向总是从USB设备到主机 。
USB通信协议深入理解

文章插图
 
DATA0或DATA1中的包含的是中断信息,而不是中断数据 。
3.4 同步传输(Isochronous Transfer)
  1. 它由两种包组成:
  2. token
  3. data
同步传输不支持“handshake”和“重传能力”,所以它是不可靠传输 。
同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转 。主机在排定事务传输时,同步传输有最高的优先级 。
同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上 。实时传输一般用于麦 克风、喇叭、UVC Camera等设备 。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传 。
USB通信协议深入理解

文章插图
 
 
【USB通信协议深入理解】


推荐阅读