可通过命令
root@TinaLinux:/# cat sys/devices/platform/soc/usbc0/otg_role
usb_device
确认当前usb处于什么模式
手动切换成HOST模式:
cat /sys/devices/platform/soc/usbc0/usb_host
手动切换成Device模式:
cat /sys/devices/platform/soc/usbc0/usb_device
注意,手动切换模式后,OTG自动切换角色的功能就会失效。
开启角色切换模式:
echo 1 > /sys/devices/platform/soc/usbc0/hw_scan_debug
常用功能配置有ADB , MTP , Mass Storage, RNDIS,UAC1,HID,printer ,多功能复合设备
功能切换命令:
setusbconfig adb
setusbconfig mtp
下面介绍一下Audio相关UAC1的配置:
- 内核的配置要加上Audio Class 1.0 USB Audio/MIDI driver (USB声卡)
- configfs相关配置:
echo 0x1d61 > /sys/kernel/config/usb_gadget/g1/idVendor
echo 0x0101 > /sys/kernel/config/usb_gadget/g1/idProduct - 创建uac1功能:
mkdir /sys/kernel/config/usb_gadget/g1/functions/uac1.sub0 - 设置通道数掩码,例如支持两通道:
echo 0x3 > /sys/kernel/config/usb_gadget/g1/functions/uac1.sub0/c_chmask
echo 0x3 > /sys/kernel/config/usb_gadget/g1/functions/uac1.sub0/p_chmask
注意我们默认代码UDC的endpoint中仅有一个ISO端点,所以只支持单项的同步传输,默认会将p_chmask设置为0,也就是关闭playback通路 - 设置采样率:
echo 16000 > /sys/kernel/config/usb_gadget/g1/functions/uac1.sub0/p_srate
echo 48000 > /sys/kernel/config/usb_gadget/g1/functions/uac1.sub0/c_srate - 建立config软链接:
ln -s /sys/kernel/config/usb_gadget/g1/functions/uac1.sub0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/uac1.sub0 - 设置对应的UDC控制器名称:
udc_controller=‘ls /sys/class/udc’
echo $udc_controller > /sys/kernel/config/usb_gadget/g1/UDC
使用方法:
默认配置卞,仅使能了c_chnask,即PC端往小机端送音频数据,小机端播放出来
小机端执行setusbconfig uac1设置功能后,会在PC端枚举生成一个USB声卡,PC端选择使用该声卡进行播放
然后小机端执行下面命令:
arecord -Dhw:UAC1Gadget -f S16_LE -r 48000 -c 2 |aplay
表示从虚拟声卡(拿到PC端送来的数据)录音,然后直接播放出来
修改产品序列号:
通过adb devices可得到当前序列号为20080411,存在的路径为lichee/brandy-2.0/u-boot-2018/drivers/sunxi_usb/usb_fastboot.h中
测试USB速率:
写性能:
time dd if=/dev/zero of=/mnt/UDISK/test.bin bs=1MB count=1024
root@TinaLinux:/# time dd if=/dev/zero of=/mnt/UDISK/test.bin bs=1MB count=1024
1024+0 records in
1024+0 records out
real 0m 8.13s
user 0m 0.00s
sys 0m 8.10s
所以写性能为:1024/8.13=125.95Mb/s
读性能:
time dd if=/mnt/UDISK/test.bin of=/dev/null bs=1MB count=1024
root@TinaLinux:/# time dd if=/mnt/UDISK/test.bin of=/dev/null bs=1MB count=1024
1024+0 records in
1024+0 records out
real 0m 6.17s
user 0m 0.01s
sys 0m 1.89s
所以读性能为:1024/6.17=165.96Mb/s
USB1调试节点:
1.卸载主机驱动
echo 0 > /sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable
echo 0 > /sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable
2.加载主机驱动
echo 1 > /sys/devices/platform/soc/5200000.ehci1-controller/ehci_enable
echo 1 > /sys/devices/platform/soc/5200000.ohci1-controller/ohci_enable
USB眼图测试
1.USB0 OTG Device眼图测试
手动切换Device模式
cat /sys/devices/platform/soc/usbc0/usb_device
每个芯片平台的节点路径会有差异,可通过find命令确认
find /sys -name otg_ed_test
root@TinaLinux:/# find /sys -name otg_ed_test
/sys/devices/platform/soc/5100000.udc-controller/otg_ed_test
眼图测试命令:
echo test_pack > /sys/devices/platform/soc/5100000.udc-controller/otg_ed_test
2.USB0 OTG HOST眼图测试
手动切换Host模式
cat /sys/devices/platform/soc/usbc0/usb_host
每个芯片平台的节点路径会有差异,可通过find命令确认(注意选择带有ehci0的路径)
find /sys -name ed_test
眼图测试命令:
echo test_pack > /sys/devices/platform/soc/5101000.ehci0-controller/ed_test
3.USB1 Host眼图测试
每个芯片平台的节点路径会有差异,可通过find命令确认(注意选择带有ehci1的路径)
find /sys -name ed_test
眼图测试命令:
echo test_pack > /sys/devices/platform/soc/5200000.ehci1-controller/ed_test
开启网络adb
修改package/utils/adb/adbd-configfs.init
取消下面的注释
#ADB_TRANSPORT_PORT=5555 (网络adb默认是关闭的)
保证小机端和PC在同一个局域网,并且可以ping通
可通过adb connect ip命令连接设备
daniel@daniel-VirtualBox:~/MR813/v2.0/target/allwinner/mr813-evb2$ adb connect 192.168.43.17
connected to 192.168.43.17:5555
daniel@daniel-VirtualBox:~/MR813/v2.0/target/allwinner/mr813-evb2$ adb shell
BusyBox v1.27.2 () built-in shell (ash)
|_ ||| ___ _ _ | | || ___ _ _ _ _
| | _ | || | | |__ | || || | ||'|
| | | || | || _ | |_____|||||||||,|
|| |||||||_| Tina is Based on OpenWrt!
Tina Linux (Neptune, 5C1C9C53)
root@TinaLinux:/#
MtpTools
MtpDaemon作为responder处理并回应PC发送过来的MTP消息,因此在PC上可以对小机端的目录、文件进行操作。但是为了让小机端的修改能够
同步到PC上,Tina提供了MtpTools。
MtpTools主要通过fifo发送消息给MtpDaemon,然后MtpDaemon根据该消息去更新Mtp-DataBase,即更新用于描述目录文件信息的对象,此时
PC上只需要刷新下即可同步得到小机端的修改。
新增一个名为test的文件:
MtpTools -f add -t FILE -s /mnt/UDISK/test
实际上有一种比较简单的方法就是直接更新目录信息,例如:
MtpTools -f update -t DIR -s /mnt/UDISK
这样不管该目录下进行了任何修改,全都会更新一遍(他会遍历更新所有目录、文件信息,相对耗时多一些)。