您的位置:首页 > 其它

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 */

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: