OTG中的ID脚风波释疑 .

本文深入探讨了OTG设备的连接机制,包括USB-OTG插槽类型、协议(如SRP、ADP、HNP)、设备框架、连接方式及案例分析。详细解释了如何通过HNP切换设备角色,以及不同类型的USB-OTG插槽如何影响设备的连接与功能。

原文:http://my.oschina.net/u/130864/blog/15322    Weike的博客

 

1. 概要
OTG设备使用插头中的ID引脚来区分A/B Device,ID接地被称作为A-Device,充当USB Host,A-Device始终为总线  提供电力,ID悬空被称作为B-Device,充当USB Device,设备的USB Host/USB Device角色可以通过HNP(主机交换  协议)切换。OTG设备连接时不能跨越USB Hub,如果跨越USB Hub则失去HNP功能。A-Device/B-Device与USB  Host/Device没有必然的关系,主机切换完毕后A-Device变成USB从设备,但是仍然为总线供电。

2.USB-OTG插槽类型

As Host Only :提供标准的A插座,普通的USB Host并带有TPL(支持设备列表)

As Device Only:仅能作为外设的B-Device(分为插头一体和插头线缆分离的)

OTG Dual      :使用Micro AB插座,可以在运行时切换Host/Device。

OTG Dual  在插头插入后会先打开VBus,如果没有设备连接则关闭VBus,并开启ADP侦测,而EAs Host Only 则  不会再次关闭VBus
3.协议
SRP(Session Request Protocol)对话请求协议: 
SRP协议允许Adevice在总线为使用时通过切断VBUS来节省电源消耗,任何一类Adevice都应该能够响应SRP请求,任何Bdevice也应该能够发起SRP请求,
ADP(Attach Detection Protocol): 
提供是否有对端设备插入的检测,支持任何OTG设备
HNP(Host Negotiation Protocol)主机交换协议: 
OTG设备通过HNP来切换Host/Device角色,Adevice通过查询Bdevice的OTG性能描述符来判断是否支持HNP协议,以判断Bdevice是否为两用的OTG设备,如果Bdevice支持HNP协议,Bdevice将会返回有效的OTG性能描述符,随后Adevice产生一个SetFeature命令告知Bdevice:你可以在总线挂起时以主机的方式工作,Adevice发送了这个SetFeature命令后挂起总线,  本次Session结束后Host回到Adevice手里。
4.设备框架
OTG描述符
在设备枚举时,A-Device通过GetDeor向B设备请求OTG描述符。OTG描述符也应当作为GetConfiguration()的一部分返回。其中的bmAttributes标示B-Device是否支持ADP/HNP/SRP
标准设备特性,通过SetFeature()设置。
b_hnp_enable 
设置此特性,显示B-Device被允许进行HNP,A设备必须在T(HOST_REQ_SUSP)时间内挂起总线,此特性在session结束时清除。
a_hnp_support
早期OTG版本的兼容特性,设置这个特性指示B-Device对端的A-Device支持HNP。
a_alt_hnp_support 
该标志已被废弃
5.连接方式(Host -> Device)
As Host Only 与 仅作为外设的B-device(带A插头型)
Host端检测到A插头插入,停止ADP,打开VBus,因为B-Device的A插头与设备作为一体,此时B-Device必定与A插头连接,Host检测到外设连接,开始枚举。 
As Host Only 与 仅作为外设的B-device(A插头为线缆连接)
Host段检测到A插头插入,停止ADP,打开VBus,如果B-Device是线缆连接完毕在将A插头插入则整个连接过程与上面无异,因为此 时B-Device可能还没有插入插头,则设备连接超时,VBus再次关闭,等待下一次ADP的改变(线缆连接完毕),再次打开VBus,此时开始正常总 线枚举。
OTG Device 与 OTG Device
Host端检测到插头插入,则打开VBus,如果没有外设检测到,则关闭VBus,打开ADP Probing,Device端检测到插头插入,则打开SRP,如果线缆没有插入,则SRP超时,Device端开始进行ADP Probing,当线缆连接完毕,Device端侦测到ADP变化,发送SRP请求Host打开VBus,Host回应SRP并且打开VBus,完成设备连接。
6.案例分析:
有客户反馈他们的样机OTG mrio AB插座不能识别U盘,最后查出的原因是客户样机的USB的ID脚没有接地,
样机没有切换到USB HOST模式。
<think>好的,我现在需要处理用户关于USB OTG ID定义和技术细节的问题。首先,我要回顾用户提供的引用内容,确保回答准确。 用户提到了三个引用,其中引用[1]解释了ID的电平状态如何决定设备角色,引用[2]涉及设备树中的GPIO配置,引用[3]则展示了GPIO测试的实际操作。需要将这些信息整合起来,形成清晰的回答。 首先,USB OTGID基本功能是确定主从模式。根据引用[1],ID低电平时作为主机,高电平作为外设。但实际的线缆中ID线可能被固定接地或悬空,非OTG设备的默认状态也不同。这部分是核心,需要详细说明。 接下来,硬件设计方面,引用[2]提到设备树中的id-gpio和vbus-out-gpio配置,强调不能盲目复制,避免硬件损坏。这里需要指出配置时需根据具体硬件设计,并注意GPIO的配置参数。 然后,测试方法部分,引用[3]中的例子展示了如何通过命令修改GPIO模式并检测状态变化。用户可能想知道如何进行实际测试,这部分要分步骤说明,比如配置输入模式、检测电平变化。 此外,用户可能对应用场景和注意事项感兴趣,需要补充OTG的应用场景,如手机作为主机连接外设,以及设计时需注意GPIO模式、防短路和兼容性等问题。 需要确保回答结构清晰,分点说明,并正确引用来源。同时,生成的相关问题要围绕OTG的检测机制、配置错误后果、测试方法等,帮助用户深入理解。</think>### USB OTG ID技术详解 #### 一、ID核心功能 1. **主从角色判定** - 检测到$USB\_ID$为低电平(<0.8V)时,设备作为Host(A设备)[^1] - 检测到$USB\_ID$为高电平(>2.0V)时,设备作为Slave(B设备)[^1] - 非OTG设备默认状态: $$Host: USB\_ID \leftrightarrow GND \quad (永久下拉)$$ $$Slave: USB\_ID \leftrightarrow 悬空 \quad (无连接)$$ 2. **物理连接特性** 实际线缆中ID通过接口固定连接状态: ```plaintext A型插头:USB_ID 接地 B型插头:USB_ID 悬空 ``` #### 二、硬件实现细节 1. **GPIO配置要点**(引用[2][3]) ```dts /* 典型设备树配置 */ usb_otg_extcon { compatible = "linux,extcon-usb-gpio"; id-gpio = <&tlmm 50 GPIO_ACTIVE_HIGH>; // IDGPIO映射 vbus-out-gpio = <&pmx75_gpios 16 GPIO_ACTIVE_HIGH>; // VBUS控制 }; ``` - 需特别注意: - `GPIO_ACTIVE_HIGH/LOW`需与硬件电路匹配 - 不同SoC平台的GPIO编号规则可能不同 2. **电气特性参数** | 参数 | 条件 | 典型值 | |---|---|---| | 输入阻抗 | 检测模式 | ≥100kΩ | | 检测电压阈值 | V_ID | 0.8V~2.0V | | 防抖时间 | 状态切换 | 1ms~10ms | #### 三、测试验证方法(引用[3]) 1. **GPIO状态检测流程**: ```bash # 查看GPIO50初始状态 cat /sys/kernel/debug/gpio | grep gpio50 # 配置上拉输入(SDX7X平台示例) echo -e "AT+QGPIOCFG=50,0,0,3,0\r\n" > /dev/smd7 # 插入设备后验证电平变化 ``` 2. **状态转换波形**: ```plaintext 设备插入时ID信号变化: High → 下降沿 → Low(Host模式激活) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值