瑞芯微Rockchip开发者社区
直播中

陈厚合

16年用户 1708经验值
擅长:可编程逻辑
私信 关注
[问答]

请问RK3288 OTG如何切换为Host模式?

请问RK3288 OTG如何切换为Host模式?

回帖(1)

张帆

2022-3-10 11:01:18
OTG = On The Go,是USB的一种工作模式

USB协议中规定了两类设备,一类是Host、一类是Device.

Host为主控设备,如PC,Device为从设备,如鼠标、U盘等,Device只能连接到Host上并由Host控制。

OTG是一种特殊的USB设备,它本身是Device,可以连接Host,并被Host所控制。但它同时也能作为Host连接Device。

OTG 在硬件上由 ID 引脚决定做 Host 还是 Device,上拉为 Device,下拉为 Host。



目前大部分手机都支持 OTG,根据原理自己可以动手制作一根 OTG 线。





RK3288 的 OTG 转换为 Host 模式有 3 中方法。

1、修改硬件

RK3288 的 ID 引脚默认上拉,作为 Device 设备,如要转换为 Host 模式,只需将 ID 引脚下拉到地即可。

简单点就是接一根 OTG 线即可。

2、修改 dts 文件

文件路径:/kernel/arch/arm/boot/dts/rk3288.dtsi

  
  u***0: u***@ff580000 {
    compatible = "rockchip,rk3288_u***20_otg";
    reg = <0xff580000 0x40000>;
    interrupts = ;
    clocks = <&clk_gates13 4>, <&clk_gates7 4>;
    clock-names = "clk_u***phy0", "hclk_u***0";
    resets = <&reset RK3288_SOFT_RST_USBOTG_H>, <&reset RK3288_SOFT_RST_USBOTGPHY>,
            <&reset RK3288_SOFT_RST_USBOTGC>;
    reset-names = "otg_ahb", "otg_phy", "otg_controller";
    /*0 - Normal, 1 - Force Host, 2 - Force Device*/
//    rockchip,u***-mode = <0>;
    /* 0-正常模式,ID决定,1-Host模式,2-Device模式*/
    rockchip,u***-mode = <1>;
};


3、使用指令修改 force_u***_mode 的值

     0 - 正常模式,ID 决定

     1 - Host 模式

     2 - Device 模式

  
  root@rk3288:/ # cd /sys/bus/platform/drivers/u***20_otg
cd /sys/bus/platform/drivers/u***20_otg
root@rk3288:/sys/bus/platform/drivers/u***20_otg # ls
ls
bind
debuglevel
dwc_otg_conn_en
ff580000.u***
force_u***_mode
op_state
uevent
unbind
vbus_status
version
// 默认是正常模式,ID决定
root@rk3288:/sys/bus/platform/drivers/u***20_otg # cat force_u***_mode
cat force_u***_mode
0
// 修改为 Host 模式,会自动退出 adb
root@rk3288:/sys/bus/platform/drivers/u***20_otg # echo 1 > force_u***_mode


通过指令可以修改,即可在上层的设置菜单中增加一个 USB 模式切换开关,即用户可以通过界面修改 OTG 的模式。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分