一直以来在做安卓系统相关的嵌入式通讯(USB、BLE、网络、串口等),最近在讨论 OTG 问题的时候,对该规范又重新理解了一次,这里仅做一些概要和核心点说明,下方会给出具体 OTG 包含协议的参考链接,大同小异就不多赘述了。
1. 硬件接口
与传统的 4 线USB接口不同,OTG接口除了 VCC、GND、D+、D-之外还多了一根 ID 线,对支持 OTG 规范的设备来说,按照连接时的 ID 线状态分为 A 设备与 B 设备,这在传统 USB 中是不区分的。OTG 设备连接时 ID 线被拉低(低电平)代表通讯中的 A 设备,ID 线悬空(高电平)代表通讯中的 B 设备,其中 A 设备始终为总线活动提供 VBus,这点要尤其注意,在连接时就已经确定供电与被供电的设备。
2. USB 主从关系
与传统 USB 通讯不同,OTG 规范规定了符合其规范的设备可以使用 HNP (主机协商协议)来协商 A 设备和 B 设备的主从关系,也即 A 或者 B 都可以作为 USB 主机主动发起通信,相应另一方作为 USB 设备接受主机请求。如 B 通过协商后作主机时仍由 A 设备为总线供电。但是连接时 A 设备会默认作为 USB Host,B 设备作为 USB Slave。
3. OTG 中使用