故事背景: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 */ } |
OTG详解
最新推荐文章于 2024-04-16 15:19:27 发布