【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
对于现在的soc来说,基本上usb是标配的。它一般需要支持usb host、device和otg三种模式。简单解释下,host模式,就是v3s把自己当成了主机,其他设备都是从设备;device模式,相当于别人是主机,v3s是从设备,别人来访问它;otg模式,则可以把usb看成是一种传输媒介,比如可以把usb看成是一条虚拟网线,用usb模拟出网线的效果,实现相应的开发模式。v3s的开发板上面,usb口被做成了micro usb,优点是口变小了,缺点是不太好用,容易被搞坏。此外,对于v3s来说,usb也是spi nandflash镜像烧入最主要的方法。
1、准备一个micro usb转母usb的插口
micro usb虽然比较小,但是特别容易插坏。所以建议大家在开始今天的实验之前,先准备一个转接器。这样,接口不容易坏,也方便进行后面的实验。
2、原理图
整个原理图的部分还是很简单,USB_P、USB_N都是直接链接v3 soc的。这里的USB_ID其实是一个gpio口,主要用USB口检测的,后面的设备树会看到这部分。
3、设备树
在sun8i-v3s-licheepi-zero.dts文件当中,usb的配置部分都已经写好了,比如
&ehci0 {
status = "okay";
};
&ohci0 {
status = "okay";
};
&usb_otg {
dr_mode = "host";
status = "okay";
};
&usbphy {
usb0_id_det-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
status = "okay";
};
需要修改的就是usb_otg中的drv_mode,之前是otg,这里需要修改成host。另外一个地方usb0_id_det-gpios就是之前说的USB_ID,从5和6两个配置看,说明对应的gpio连线是PF6。而原理图上PF6连接的是sd卡上面,这算是蛮有趣的一点。而原理图上面,gpio被连接到42引脚,即PB3。
实际测试的时候,我们发现USB_ID配置成5和6,一点都不影响最终的测试。驱动代码中,主要也是usbphy用到这个gpio信息。
4、修改驱动配置
和内核4.2.y配置项比较,升级后5.2.y中,配置的内容多了很多。大部分和usb、u盘相关的配置都已经被设置好,我们唯一需要做的,就能就是打开usb设备插入的打印通知,这样方便我们调试和测试,
5、编译烧入版本和zImage
因为设备树、内核配置都发生了变化,所以这部分需要重新进行编译,即
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
生成新的dtb文件和zImage文件后,就可以准备相应的烧入工作。
6、开始测试
因为我们主要是测试usb的host特性,那么使用u盘来测试无疑是最简单的一个方法。测试的标准很简单,首先看u盘插进去的时候有没有打印提示;然后查看u盘的内容有没有办法mount到开发板;最后看有没有办法正常读写。
当我们插入u盘的时候,可以看到这样的打印,
# [ 21.667407] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 21.868861] usb 1-1: New USB device found, idVendor=14cd, idProduct=1212, bcdDevice= 1.00
[ 21.877061] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[ 21.884244] usb 1-1: Product: Mass Storage Device
[ 21.888984] usb 1-1: Manufacturer: Generic
[ 21.893084] usb 1-1: SerialNumber: 121220160204
[ 21.899255] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 21.906033] scsi host0: usb-storage 1-1:1.0
[ 22.968591] scsi 0:0:0:0: Direct-Access Mass Storage Device 1.00 PQ: 0 ANSI: 0 CCS
[ 23.064178] sd 0:0:0:0: [sda] 61454336 512-byte logical blocks: (31.5 GB/29.3 GiB)
[ 23.072773] sd 0:0:0:0: [sda] Write Protect is off
[ 23.078959] sd 0:0:0:0: [sda] No Caching mode page found
[ 23.084289] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 23.095959] sda: sda1
[ 23.102516] sd 0:0:0:0: [sda] Attached SCSI removable disk
lsusb的时候,也可以查看到当前确实多了一个usb,
# lsusb
Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 14cd:1212
Bus 002 Device 001: ID 1d6b:0001
除此之外,我们还看到设备还多了sda、sda1这样的设备节点。有了这些节点,就可以把u盘mount到目录上面了,
# mount /dev/sda1 /mnt
这个时候ls -l /mnt就可以看到全部的u盘内容,
# ls -l /mnt
total 584048
-rwxr-xr-x 1 root root 27081744 Jan 9 2023 3-3-01???2022?FPGA???????.pdf
-rwxr-xr-x 1 root root 145642597 Apr 10 2023 ???.zip
-rwxr-xr-x 1 root root 13024 Mar 10 2023 ?????????.docx
drwxr-xr-x 2 root root 16384 Jun 7 2023 ARM????
-rwxr-xr-x 1 root root 32690417 Dec 31 2022 CH32V307EVT.ZIP
-rwxr-xr-x 1 root root 391262 Mar 3 2018 KH_Navikit??SDK??????.pdf
-rwxr-xr-x 1 root root 390483857 Dec 2 2022 MounRiver_Studio_Setup_V183.exe
drwxr-xr-x 2 root root 16384 Oct 30 2022 System Volume Information
-rwxr-xr-x 1 root root 1570645 Jul 12 2022 TCP&UDP????.rar
drwxr-xr-x 2 root root 16384 May 16 2023 boost_arm
drwxr-xr-x 2 root root 16384 Dec 10 2022 keil5
drwxr-xr-x 2 root root 16384 Dec 10 2022 quartus
-rwxr-xr-x 1 root root 1390 May 31 2023 tcp_mess.txt
drwxr-xr-x 2 root root 16384 Mar 28 2023 zynq
如果我们有数据拷贝的需要,只需要对/mnt进行操作即可。所有操作完毕之后,umount这个目录,
# umount /mnt
上面就是v3s进行usb host模式测试的全部过程,大家可以根据自己的需要进行测试,同时加深一下对usb的相关认知。usb非常重要,很多v3s没有的驱动,都可以通过usb驱动来解决的。这或许就是usb最大的优点。