OTG详解
2013-12-19 14:24
513 查看
故事背景:OTG,USB技术范畴,实现在没有Host(如PC机)的情况下,从设备间的数据传送。说白了,就是如果你的平板或手机支持OTG功能的话,就可以直接把u盘插如其usb口子,使其可以像电脑一样读写u盘里的数据。 高通MSM7x27平台就支持这个功能。作为具有otg功能的设备,当你插入像u盘这样的从设备的时候,就存在一个给从设备供电的问题。你要给人家供电。 本帖就讨论学习一下msm7x27平台OTG这部分的供电问题。要转帖请注明出处(booklin@163.com) 有图有真相,我们看图说话。 dcdc升压的典型接法。vsw_5v就是个switch 开关,不断打开关闭打开关闭,使得vph_pwr 输入的vbatt电压 通过电感电容二极管震荡升压,5v的电压一部分输出出来 vreg_5v ,一部分流到芯片里面的vreg_5v(作用是:1.作为dcdc升压的反馈,2.是供给vbus使用)。 在代码中: pm_vote_vreg_switch(PM_ON_CMD,PM_VREG_BOOST_ID,PM_VOTE_VREG_BOOST_APP__OTG); 这句话 就是用来使能vsw_5v,dcdc的让他升压。如果不加这句话的话,则vbus就是由vbatt供电,大小比vbatt电压小一些。就不是5v了。 加了这句话 就升压到5v 就通过这个来给otg外部设备供电。最多100ma.如果要提供更多的电流就要加下面的电路了。直接从升过压的5V接出来,通过三极管和mos管直接对外提供。 结合代码看看 void hsu_api_vbus_powerup(void) { #ifndef FEATURE_HS_USB_BASIC #ifndef T_GOBI2000 pm_err_flag_type pm_result; #endif /*T_GOBI2000*/ if(vbus_is_on == FALSE) { #ifndef T_GOBI2000 pm_result = pm_mpp_config_digital_output(HSU_MPP_FOR_VBUS, PM_MPP__DLOGIC__LVL_VDD, PM_MPP__DLOGIC_OUT__CTRL_HIGH); 这个就是参考设计中 HS_VBUS_BOOST 这个脚拉高。 HSU_ASSERT(pm_result == PM_ERR_FLAG__SUCCESS); /* Vote to turn on VREG_5V in the PMIC */ pm_vote_vreg_switch(PM_ON_CMD, PM_VREG_BOOST_ID, PM_VOTE_VREG_BOOST_APP__OTG); #endif /*FEATURE_HS_USB_OTG*/ vbus_is_on = TRUE; } #endif /* FEATURE_HS_USB_BASIC */ } /* hsu_api_vbus_powerup */ void hsu_api_vbus_powerup(void) { pm_err_flag_type pm_result; if(vbus_is_on == FALSE) { #ifndef T_GOBI2000 #if 0 pm_result = pm_mpp_config_digital_output(HSU_MPP_FOR_VBUS, PM_MPP__DLOGIC__LVL_VDD, PM_MPP__DLOGIC_OUT__CTRL_HIGH); 如果没有boost这部分外部提升电路,就把他mask掉了 #else pm_result = PM_ERR_FLAG__SUCCESS; #endif HSU_ASSERT(pm_result == PM_ERR_FLAG__SUCCESS); /* Vote to turn on VREG_5V in the PMIC */ pm_vote_vreg_switch(PM_ON_CMD,PM_VREG_BOOST_ID,PM_VOTE_VREG_BOOST_APP__OTG);//提供5v升压dcdc #if 1 //enable USB OTG pm_result = pm_otg_config_interface( PM_OTG_VBUS_CONFIG_CMD__DRV, PM_OTG_DP_CONFIG_CMD__NONE, PM_OTG_DM_CONFIG_CMD__NONE, PM_OTG_ID_CONFIG_CMD__NONE); //用了这个函数来单独控制 vbus口子 HSU_ASSERT(pm_result == PM_ERR_FLAG__SUCCESS); #endif #endif /*FEATURE_HS_USB_OTG*/ vbus_is_on = TRUE; } #endif /* FEATURE_HS_USB_BASIC */ } |
相关文章推荐
- Android6.0 MountService和vold详解(三) vold SD卡、otg
- 【转】锋狂百科:手机也能接外设 OTG技术详解
- FreeBSD-musb_otg文件详解
- Session详解
- 在Solaris 10 X86上安装Oracle 10g RAC详解 (2)
- Linux面试题之shell编程详解(三)
- 网络命令之netstat详解
- windows mobile系统 手机上网设置详解
- linux 设备驱动开发详解 code (5)
- 组策略启用流程详解
- Windows下面部署nginx用法详解
- UML类图详解(5)
- contentsize、contentoffset 和contentInset 详解
- strust2将jsp页面属性值封装传值给action详解以及问题处理
- 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
- javascript中call方法详解
- linux的hostname(主机名)修改详解
- 深入PHP运行环境配置的详解
- Android 动画框架详解,第 1 部分
- struts2中的ognl详解