USB OTG 的进一步理解

时间:2021-08-17 09:45:14

一直以来在做安卓系统相关的嵌入式通讯(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 中使用的协议

ADP(Attach Detection Probing):连接检测协议。USB 设备会周期性检测 USB 端口是否有设备插入,如果发起检测的是 A 设备,那么打开电源供电。若是 B 设备,会发送 SNP 会话请求,等待 A 的响应;

SRP(Session Request Protocol):会话请求协议。为了省电,A 设备可以在总线不活动的时候选择关闭 VBus 供电,若 B 设备需要电源来完成通讯,那么可以通过 D+、D-上的信号线脉冲与 A 设备完成 SRP 请求与回应,成功后 A 设备打开 VBus供电。

HNP(Host Negotiation Protocol):主机协商协议。如前所述,开始连接时 A 作为 Host 会枚举 B 型设备,枚举中收到 OTG 描述符以指示 B 是否支持这几种协议。若支持,A 会发送 Set_Feature 使能 B 设备的该特性以允许 B 型设备根据 HNP 在总线挂起时请求作为主机运行。

有关 OTG 中的 SRP 与 HNP 详细的可以参见下方博客:

USB OTG规范的SRP和HNP协议 


有问题可随时给我评论或邮件,觉得有用就点赞吧~:-D