OTG详解

故事背景:OTG,USB技术范畴,实现在没有Host(如PC机)情况下,从设备间的数据传送。说白了,就如果你的平板或手机支持OTG功能的话,就可以直接把u盘插如其usb口子,使其可以像电脑一样读写u盘里的数据。

高通MSM7x27平台就支持这个功能。作为具有otg功能的设备,当你插入像u盘这样的从设备的时候,就存在一个给从设备供电的问题。你要给人家供电。

本帖就讨论学习一下msm7x27平台OTG这部分的供电问题。要转帖请注明出处booklin@163.com

有图有真相,我们看图说话。
1.jpg 

2.jpg 
3.jpg 
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了。
4.jpg 
加了这句话 就升压到5v
5.jpg 
就通过这个来给otg外部设备供电。最多100ma.如果要提供更多的电流就要加下面的电路了。直接从升过压的5V接出来,通过三极管和mos管直接对外提供。
6.jpg 


7.jpg 
结合代码看看
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 */
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值