OTG = On The Go,是USB的一种工做模式spa
USB协议中规定了两类设备,一类是Host、一类是Device.debug
Host为主控设备,如PC,Device为从设备,如鼠标、U盘等,Device只能链接到Host上并由Host控制。code
OTG是一种特殊的USB设备,它自己是Device,能够链接Host,并被Host所控制。但它同时也能做为Host链接Device。orm
OTG 在硬件上由 ID 引脚决定作 Host 仍是 Device,上拉为 Device,下拉为 Host。blog
目前大部分手机都支持 OTG,根据原理本身能够动手制做一根 OTG 线。ip
RK3288 的 OTG 转换为 Host 模式有 3 中方法。io
一、修改硬件event
RK3288 的 ID 引脚默认上拉,做为 Device 设备,如要转换为 Host 模式,只需将 ID 引脚下拉到地便可。form
简单点就是接一根 OTG 线便可。class
二、修改 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>; };
三、使用指令修改 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 的模式。