RK3288 OTG切換為Host模式


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

usb0: usb@ff580000 {
    compatible = "rockchip,rk3288_usb20_otg";
    reg = <0xff580000 0x40000>;
    interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&clk_gates13 4>, <&clk_gates7 4>;
    clock-names = "clk_usbphy0", "hclk_usb0";
    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,usb-mode = <0>;
    /* 0-正常模式,ID決定,1-Host模式,2-Device模式*/
    rockchip,usb-mode = <1>;
};

3、使用指令修改 force_usb_mode 的值

     0 - 正常模式,ID 決定

     1 - Host 模式

     2 - Device 模式

root@rk3288:/ # cd /sys/bus/platform/drivers/usb20_otg
cd /sys/bus/platform/drivers/usb20_otg
root@rk3288:/sys/bus/platform/drivers/usb20_otg # ls
ls
bind
debuglevel
dwc_otg_conn_en
ff580000.usb
force_usb_mode
op_state
uevent
unbind
vbus_status
version
// 默認是正常模式,ID決定
root@rk3288:/sys/bus/platform/drivers/usb20_otg # cat force_usb_mode
cat force_usb_mode
0
// 修改為 Host 模式,會自動退出 adb
root@rk3288:/sys/bus/platform/drivers/usb20_otg # echo 1 > force_usb_mode

通過指令可以修改,即可在上層的設置菜單中增加一個 USB 模式切換開關,即用戶可以通過界面修改 OTG 的模式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM