USB OTG插入检测识别

转载请标注原文地址:http://blog.youkuaiyun.com/uranus_wm/article/details/9838847

 

一 USB引脚一般四根线,定义如下:


为支持OTG功能,mini/micro usb接口扩展了一个ID引脚(第4脚)

A设备端ID脚接地,则初始状态为Host,例如PC和支持OTG设备做主设备时

B设备端ID脚悬空,默认上拉为高电平,则初始状态为Device,例如U盘和支持OTG设备做从设备时

1. 移动设备如需支持OTG,内部ID引脚需要默认上拉为高

2. VBUS是输入输出双向引脚。对于Device是power supply输入脚;对于Host需要串一个5V电源输出给device。


二 USB插入检测过程,看下面一个简单电路,Samsung Exynos4412平台:


电路描述:CON1为micro usb连接器,VBUS连接系统XuotgVBUS脚,同时提供一个中断输出脚到XEINT28

同时外部一个DC5V经过控制芯片也输出到XuotgVBUS,作为host时需要用到给外部供电

ID脚上拉1.8V作为Host/Slave检测,同时提供另一个中断输入脚到XEINT29

 

该设备支持OTG,下面说下设备的发现过程:

作为从设备插入PC端口时:

1.  系统检测到VBUS上的XEINT28上升沿触发中断,因为PC端会有一个5V从VBUS给过来,进入中断处理函数进一步确认ID脚状态,ID脚为低则状态错误,ID脚为高表示设备应该切换到从设备模式

2. 通知usb gadget使能vbus,按照device模式使能PHY。gadget在probe时注册了一个SPI软中断IRQ_USB_HSOTG,用于响应数据接收

3. 开启usb clk,使能PHY,此时外部5V电源供给系统XuotgVBUS,gadget收到IRQ_USB_HSOTG中断要求重启OTG core

4. USB DP(高速设备为DP,低速设备为DM)上产生一个高电平脉冲,此时PC识别到一个USB设备插入,windows会提示用户

5. 后续就是SETUP,GET DISCRIPTOR的过程

 

作为主设备发现设备插入时:

1. 系统检测到ID脚上XEINT29下降沿触发中断(实际是插入的usb公口第四脚直接连接到第五脚地上面),进入中断处理,切换到主设备模式

2. 关中断,使能DC5V给VBUS上电,唤醒ehci与ohci

3. usb core在内核初始化时注册了一个名为khubd的内核线程,由khubd监控port event。(实际过程我理解是从设别由VUBS供电后,会在DP或DM上产生一个高电平脉冲

ehci在接收到脉冲信号后识别到设备插入,仅仅是理解,这一点未验证)

3. khubd获取port,speed后交给ehci,接下来就是usb的SETUP,GET DISCRIPTOR过程


<think>好的,我现在需要回答用户关于USBVBUSDET功能的问题。首先,我需要理解VBUSDET是什么。根据用户提供的引用内容,引用[2]提到了vcc_vbus_typec0的GPIO配置,其中涉及VBUS供电控制。这可能与VBUSDET有关,但具体细节需要进一步分析。 VBUSDET通常指的是USB总线电压检测电路。在USB规范中,VBUS是提供电源的线路,设备需要检测VBUS电压以确保符合标准。例如,USB 2.0的VBUS电压是5V±5%。检测电路可能监控电压是否在正常范围内,防止过压或欠压损坏设备。 接下来,我需要确认VBUSDET的具体功能。根据USB Type-C规范,VBUS检测是连接过程的一部分。设备通过检测VBUS的存在和电压来确定连接状态和电源能力。例如,Type-C的电源供应能力协商需要准确的VBUS检测。这可能涉及到比较器电路或专用检测引脚,如CC(Configuration Channel)线,但VBUSDET可能直接监测VBUS电压。 用户提供的引用[2]中的GPIO配置可能用于控制VBUS电源的开启或关闭,而VBUSDET可能是用于监测该电源状态。例如,当检测到VBUS电压达到阈值时,控制器可以启用相关电路或进行电源协商。 此外,在USB PD(Power Delivery)协议中,VBUS电压可以变化(如5V、9V、15V、20V),因此VBUSDET需要支持宽电压范围的检测,并根据检测结果调整设备电源管理策略。这可能涉及ADC(模数转换器)来精确测量电压值。 还需要考虑VBUSDET在故障保护中的作用,比如检测过压、欠压或短路情况,及时切断电源以防止损坏设备。引用[2]中的GPIO配置可能与这种保护机制有关,通过控制电源开关来实现。 总结来说,VBUSDET的主要功能包括电压检测、连接状态确认、电源能力协商和故障保护。具体实现可能涉及硬件电路(如比较器、ADC)、GPIO控制以及相关的固件逻辑。需要结合USB规范和具体硬件设计来深入理解其技术细节。</think>### USB VBUSDET功能及作用详解 #### 1. **基础功能:电压检测** - **VBUS电压监测**:VBUSDET电路用于实时检测USB接口的VBUS(电源线)电压值。例如,在USB 2.0标准中,VBUS的标称电压为$5V \pm 5\%$,VBUSDET需确保电压在$4.75V$至$5.25V$范围内[^1]。 - **连接状态判断**:当设备插入时,VBUSDET通过检测VBUS电压是否达到阈值(如$4.4V$)来确认物理连接是否完成。这一过程是USB枚举(Enumeration)的前提条件[^2]。 #### 2. **高级功能:电源管理与协商** - **USB Type-C与PD支持**:在USB Type-C和Power Delivery(PD)协议中,VBUSDET需支持宽电压检测(如$5V$至$20V$),并通过ADC(模数转换器)将电压值传递给控制器,以进行动态电源调整[^1]。 - **供电角色切换**:例如,在双角色设备(DRP)中,VBUSDET帮助判断当前端口应作为供电端(Source)还是受电端(Sink)。若检测到外部VBUS存在,则可能切换为受电模式。 #### 3. **故障保护机制** - **过压/欠压保护**:当VBUSDET检测到电压超出安全范围(如$5.5V$或$3.0V$),控制器会触发保护机制,例如断开电源开关(如引用[2]中的GPIO控制逻辑)。 - **短路检测**:通过监测VBUS电压骤降,快速识别短路事件并切断供电,防止硬件损坏。 #### 4. **硬件实现示例** 引用[2]中提到的电路配置: ```dts &vcc_vbus_typec0 { enable-active-high; gpio = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&vcc_vbus_typec0_en>; }; ``` - **GPIO控制**:此处通过GPIO引脚(RK_PB5)控制VBUS电源开关,VBUSDET可能通过另一引脚或内部电路实现电压监测。 - **电源使能逻辑**:当检测到合法VBUS电压后,控制器可能通过该GPIO使能外部电源模块。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值