USB --- device 怎么把数据发给 host

设备本身不具备主动发送的能力,完全由主机控制器的信号触发。

以一次 批量 IN 传输 为例,设备将数据放到 D+/D- 的完整时机链条:
  1. 主机控制器发送 IN 令牌包(包含设备地址 + IN 端点号)到 D+/D- 总线。
  2. 设备 PHY 监听并解析令牌包,校验 ADDR 和 ENDP 是否匹配自身,CRC5 校验通过。
  3. 设备 PHY 触发硬件中断,通知设备控制器:“主机要读取这个 IN 端点的数据”。
  4. 设备控制器检查软件层面的端点状态:是否 ENABLED?端点队列中是否有就绪的 URB?
  5. 若端点就绪且 URB 存在,设备控制器从 URB 缓冲区中读取数据,按 USB 规范编码后,驱动 D+/D- 发送数据数据包。
  6. 主机接收数据后,发送 ACK 握手包;设备收到 ACK 后,触发 URB 完成回调,清理已发送的 URB,准备下一次传输。
  7. 若端点无就绪 URB,设备驱动 D+/D- 发送 NAK 握手包,主机稍后重试。

 

posted @ 2025-12-17 18:20  流水灯  阅读(75)  评论(0)    收藏  举报