USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器 。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务 。
一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成 。
翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转 PID,发送下一个数据包,否则会重试本次事务传输 。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传 。
它通过在硬件级执行“错误检测”和“重传”来确保host与device之间“准确无误”地传输数据,即可靠传输 。它由三种包组成(即IN事务或OUT事务):
- token
- data
- handshake
文章插图
- For IN Token (即:IN Transaction)
- ACK: 表示host正确无误地接收到数据
- NAK: 指示设备暂时不能返回或接收数据 (如:设备忙)
- STALL:指示设备永远停止,需要host软件的干预 (如:设备出错)
- For OUT Token (即:OUT Transaction)
- ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包
- NAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)
- STALL: 指示Device endpoint已经停止,且通知Host不再重传
- Bulk读写序列
文章插图
即由一系统IN事务或OUT事务组成 。
3.3 中断传输(Interrupt Transfer)
中断传输由IN或OUT事务组成 。
中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的 。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西 。
主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输 。中断传输有较高的优先级,仅次于同步传输 。
同样中断传输也采用PID翻转的机制来保证收发端数据同步 。下图为中断传输的流程图 。
中断传输方式总是用于对设备的查询,以确定是否有数据需要传输 。因此中断传输的方向总是从USB设备到主机 。
文章插图
DATA0或DATA1中的包含的是中断信息,而不是中断数据 。
3.4 同步传输(Isochronous Transfer)
- 它由两种包组成:
- token
- data
同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转 。主机在排定事务传输时,同步传输有最高的优先级 。
同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上 。实时传输一般用于麦 克风、喇叭、UVC Camera等设备 。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传 。
文章插图
【USB通信协议深入理解】
推荐阅读
- 手机2G 3G 4G 5G 通信基站架构演进
- 5G时代,光纤容量接近极限
- 一篇文章讲述清楚SSL握手协议详细流程
- 三层交换机如何配置?如何实现不同vlan间的通信?
- 离婚协议里常见的陷阱和无效约定
- 使用手机离不开充电器,那充电器及USB接口你了解多少呢?
- 质量保证协议书模板 产品质量保证书
- 利用DNS反射绕过防火墙进行通信
- 小米推出新款22.5W充电器,支持10V私有协议,仅售39元
- 华为交换机MSTP公有生成树协议