目录
[1. 切换到 Device (OTG) 模式](#1. 切换到 Device (OTG) 模式)
[2. 切换到 Host 模式](#2. 切换到 Host 模式)
[3. 调试中遇到的坑](#3. 调试中遇到的坑)
前言
在RK3568开发过程中,需要动态切换USB3.0接口的OTG(Device)与Host模式。直接修改PHY寄存器或sysfs节点往往无法生效,甚至导致系统USB功能异常。经过摸索,总结出一套可靠的切换流程,在此分享。
经验
1. 切换到 Device (OTG) 模式
关键点:必须先解除UDC绑定,清理软链接,再切PHY,最后触发Android USB配置。
bash
# 解除 UDC 绑定,释放控制器
echo "" > /config/usb_gadget/g1/UDC
# 删除之前创建的软链接(根据日志,adb 的链接在 f1)
rm -f /config/usb_gadget/g1/configs/b.1/f1
# 切换 PHY 到 Device 模式
echo peripheral > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
# 重新触发 Android 的 USB 配置
setprop sys.usb.config adb
注意 :f1 是示例,实际软链接名需根据 ls /config/usb_gadget/g1/configs/b.1/ 查看。
2. 切换到 Host 模式
关键点:先让Android彻底放弃gadget,再解除UDC,清理残留,最后切PHY。
bash
# 让 Android 彻底放弃 gadget
setprop sys.usb.config none
setprop sys.usb.state none
# 解除 UDC 绑定(此时 UDC 应该可写了)
echo "" > /config/usb_gadget/g1/UDC
# 删除残留软链接
rm -f /config/usb_gadget/g1/configs/b.1/f1
# 切 PHY 到 host
echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
3. 调试中遇到的坑
-
UDC 写不进去 :因为Android的USB服务仍持有gadget,必须先
setprop sys.usb.config none。 -
软链接删不掉 :权限不足或路径错误,建议先
ls确认。 -
PHY 切换无效:如果UDC仍绑定,PHY模式切换会被忽略或报错。
-
顺序反了:先切PHY再解绑UDC,可能导致控制器状态混乱,甚至需要重启。
总结
RK3568 Android 13下USB3.0 OTG/Host切换,本质是 "先软后硬":
-
软层面:让Android释放gadget(setprop none)、解绑UDC、清理configfs软链接。
-
硬层面 :再写
otg_mode节点切换PHY。 -
恢复 :切回Device时,重新
setprop sys.usb.config adb即可。
按此顺序操作,可稳定切换,避免USB功能异常。希望这份经验能帮到同样在RK3568上调试USB的同行。