编译和烧录SPI-NOR-Flash的V3s核心板(4):USB扩展

现在已经创建了基于全志V3S的 SPI-NOR Flash 的 image 的编译和烧录。项目中需要用到多种接口,包括 I2C,UART 和 SPI等,但是 V3S 最多只能提供3个 UART 口,1个 I2C 口和1个 SPI 总线,如果需要接入多个不同种类的设备的话,接口数量是不够的。我这里采用的解决方案是采用 USB 扩展提供这些接口,通过 USB 扩展,获得多个 USB 口,然后使用 USB-UART/I2C/SPI 转换芯片获得这些接口。因此,如何扩展 USB 接口就是现在需要解决的问题。

以下操作实测可用。

u-boot配置

为了使将来在应用中使用 USB 扩展的功能,需要在 u-boot 中做一些配置,直接上图吧。

然后,编辑 sun8i-v3s-licheepi-zero.dts,将 &usb_otg 的 dr_mode 设置为 "host",如下图

 注意图中的第90行原文是 otg,这里要改为 host。然后使用
 

cd .../v3s/u-boot
makd ARCH=arm menuconfig

进入到 u-boot 的配置项中。在此之前,使用

make LicheePi_Zero_800x480LCD_defconfig

进行了其它默认配置,有关 dts 的修改请参考这个合集的第1篇,这里只关注对 USB 的支持配置。

通过 Device Didrivers-->USB Support 进入到配置页面。

请注意以下的选中项:

  • 选中 [*] EHCI HCD (USB 2.0) support,当前几乎没有不支持 USB 2.0 的EHCI了
  • 选中 [*] Support for generic EHCI USB controller,获得兼容性
  • 选中 [*] OHCI HCD (USB 1.1) support 和其 下属属性 Support for generic OHCI USB controller
  • 选中 [*] Enable sunxi OTG / DRC USB Controller
  • 选中 [*] USB Mass Storage USB support,用于支持 U盘读写
  • 是否选中 USB Gadget Support,看您乐意,如果需要将 V3S 的存储虚拟成一个U盘的话,可以选中它,然后进行它的相关配置。这里我没选中。

使用

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

编译 u-boot,生成 u-boot-sunxi-with-spl.bin,用于将来制作 flashimg.bin。

配置 kernel

进入到 Linux kernel 的源代码目录,使用 make ARCH=arm menuconfig 进行配置,进入到 Deivce Drivers---> USB support,选中以下配置(截图很长,这里就不占用屏幕空间了)

  1. <*>   Support for Host-side USB,请注意要直接编译到内核,<*>而不是<M>
  2. [*]   USB announce new devices,这样可以通过 Console 口看到新设备接入和拔除时的信息
  3. [*]   Enable USB persist by default
  4. [*]   OTG support
  5. <M>   USB 2.0 OTG FSM implementation,这里作为 module 编译,这是因为在我的应用环境中没有用到 OTG,如果需要 OTG,则需要配置成 <*>
  6. <*>  EHCI HCD (USB 2.0) support
  7. [*]     Improved Transaction Translator scheduling
  8. <*>     Generic EHCI driver for a platform device
  9. <*>   OHCI HCD (USB 1.1) support
  10. <*>     Generic OHCI driver for a platform device
  11. <*>   USB Mass Storage support,这是挺关键的一步
  12. <*>     Allwinner (sunxi)
  13. <*>   USB Serial Converter support,配置 USB-TTL 转换芯片的支持

在 USB Serial Converter 选项中,我选中了

  • <*>   USB Winchiphead CH341 Single Port Serial Driver
  • <*>   USB CP210x family of UART Bridge Controllers

因为这两种芯片组最常用了。

编辑 kernel 中的 .../arch/arm/boot/dts/sun8i-v3s-licheepi-zero.dts,在 &usb_otg 一段中将 dr_mode 改为 "host",如下图

 设置好以后,就可以使用 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 编译出 zImage。

原有的 dtb 和 rootfs 不需要修改,可以使用新编译出来的 u-boot-sunxi-with-spl.bin 和 zImage 制作 flashimg.bin,然后烧写到核心板中。

启动后,我做了如下测试,验证编译结果的正确性。

通过 USB 接口连接 U盘(Massive Storage)

我手头有一个非常古老的U盘,但是还好用,在上位机中进行了分区和格式化,格式化采用 FAT32,这个在4.13.16中是支持的。核心板上电前,没有插入U盘,等待核心板启动完毕,再从USB口插入U盘,得到如下的显示。

从上图可以看出,usb 1-1 无法识别这个 U盘,但是usb2-1正确地连接了,品牌和型号都没有对应,只是采用了 “Generic STORAGE DEVICE” 这个驱动,也能正确驱动起来。显示的容量是7.78 GB,和实际标称容量(8GB)是相符的。

紧接着运行 lsusb,可以看到其 ID是相符的 (0x05e3/0x0727)。接着验证一下读写是否正确,如下图:

可以看到其显示的内容是正确的。这里我事先配置了 U盘插入后的运行脚本,因此它就被自动挂载到了 /mnt/sda1 目录下了。关于如何在检测到U盘插入后自动挂载U盘,我将在后续的文章中说明。

通过 USB 连接 USB HUB

下图是我插入一个 10 端口的 USB HUB 后的显示,这个 USB HUB实际上是 3个 USB HUB 的串联组成的,从图中可以看出这三个芯片都被正确地识别了。

通过 USB 连接 USB-TTL 转换板

干脆,既然识别出了 USB HUB,那就直接在这个 USB HUB上接上一个CH340芯片组的 USB-TTL转换板子看?哈哈,真的可以接上的啦!

之后又将 USB HUB 拔掉,单独插上 USB-TTL 转换模块,也是可以正常识别的,在/dev中多了一个 ttyUSB0接口。只不过我使用的是 CH340 芯片的,识别成了 CH341 芯片。后来又用这个接口进行了双向传输测试,测试是OK的,最大可支持的波特率是 115200,高于这个波特率的通信似乎还是有毛病,这可能是 V3s 的局限吧。

 

总结

经过这些天的填坑,做成了基于 V3s 的 USB 扩展功能,可以接U盘,可以接USB HUB,可以接 USB-TTL(基于CH340芯片) 转换模块。主要的操作是通过 make menuconfig 配置 u-boot 和 linux kernel,修改 u-boot 和 kernel 对应的 dts 文件,最终的操作还是比较简便的,毕竟 u-boot 和linux-4.13.16中已经集成了较多的常用芯片组,可以直接使用。

但是基于 linux-4.13.16 的参考资料还是比较少的,我这里整理出来,供大家参考,不足之处,欢迎指正。

通过上面的验证,需要用到的童鞋可以设计出基于 V3s 的USB扩展坞了,对扩展 V3s 的端口将是非常有用的方案。

参考文献

全志V3S嵌入式驱动开发(u盘写读)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于现在的soc来说,基本上usb是标配的。它一般需要支持usb host、device和otg三种模式。简单解释下,host模式,就…icon-default.png?t=N6B9http://www.rply.cn/news/118022.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核老骆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值