一、 前言
Hi3559AV100 包含了丰富的硬件计算资源,包括单核的 A53、双核 A73 和双核 A53 组成的 big.LITTLE 系统以及一个 M7、一个 GPU、两个 DSP 和 NNIE 加速引擎。Hi3559AV100 平台针对 USB 接口的功能提供了非常丰富的支持,因此本文主要讲解在 Hi3559AV100 平台下的 USB 接口的各项功能的实际操作。
二、 操作准备与说明
- 说明
Hi3559AV100 的 USB 只能 Host 模式或 Device 模式二选一使用。
- 准备
U-boot 和 Linux 内核使用 SDK 发布的 U-boot 和 kernel
文件系统可以使用本地文件系统 yaffs2、jffs2、ext4 或 cramfs,也可以使用 NFS,建议使用 jffs2。
三、 操作过程
- Uboot下USB Host操作过程
- 编译 u-boot 下 USB 相关的驱动,默认相关驱动已全部选上,主要驱动选项如下
|
- 编译相关命令:
|
说明:当前 u-boot 下仅支持纯存储类设备,如:U 盘,硬盘等
2. 内核下USB Host操作过程
- 启动单板,加载yaffs2、jffs2、ext4或cramfs文件系统,也可以使用NFS。
- 默认USB Host相关模块已经全部编入内核,不需要再执行加载命令,就可以对U盘、鼠标或者键盘进行相关操作。下面列出所有USB Host相关驱动:
a)文件系统和存储设备相关模块
−vfat
−ext4
−scsi_mod
−sd_mod
−nls_ascii
−nls_iso8859-1
b)键盘相关模块
−evdev
−usbhid
c)鼠标相关模块
−mousedev
−usbhid
−evdev
d)USB Host模块
−xhci-hcd
−xhci-plat-hcd
−usb-storage
−phy-hisi-usb3
3. 内核下USB Device操作过程
- 编译USB Device相关的内核驱动模块。
|
|
进入menuconfig的如下路径,USB device作为虚拟u盘、复合设备、摄像头的配置如下
Device Drivers ---> [*] USB support ---> |
|
Device Drivers ---> PHY Subsystem ---> |
- 编译内核模块命令
|
注意:在编译模块之前先编译内核
|
- 启动单板,加载yaffs2、jffs2、ext4或cramfs文件系统,也可以使用NFS。
- 单板作为Device时,需加载Device模块才能在Host端被识别成相应 USB 设备。
下面列出所有USB Device相关驱动:
- 文件系统和存储设备相关模块与 Host 相同
- USB Device 模块
−USB Device 控制器驱动
dwc3.ko
−USB 虚拟 U 盘相关驱动
libcomposite.ko
usb_f_mass_storage.ko
g_mass_storage.ko
−USB 复合设备相关驱动
libcomposite.ko
u_ether.ko
u_serial.ko
usb_f_acm.ko
usb_f_rndis.ko
g_multi.ko
−USB 摄像头相关驱动
libcomposite.ko
usb_f_uvc.ko
四、 操作实例
- 内核下U盘操作示例
- 插入检测,枚举成功
其中:sda1表示U盘或移动硬盘上的第一个分区,当存在多个分区时,会出现sda1、sda2、sda3等字样。
- 应用
- 挂载分区
|
- 写测试
|
2. 内核下键盘操作示例
3. 内核下鼠标操作示例
- 插入模块,即将鼠标 USB 接口插入单板上的 USB 接口
- 接收鼠标输入
cat /dev/input/mouse0 | hexdump & |
- 鼠标点击或滑动出现如下码值
4. 内核下虚拟U盘操作示例
单板作为虚拟U盘时,以U 盘做存储介质为例,也可使用 Flash 或者 SD 卡,操作过程如下:
- 插入驱动模块模板如下(注意插入驱动模块前先插入 U 盘)
|
实际如下
|
U 盘在单板中被识别成盘符 /dev/sda1
- 各驱动模块对应内核位置
drivers/usb/gadget/libcomposite.ko drivers/usb/gadget/function/usb_f_mass_storage.ko |
drivers/usb/gadget/legacy/g_mass_storage.ko |
- 通过USB将单板与PC端相连,此时PC端可识别到盘符。至此,单板可以当做真正的U盘使用。
|
5. 内核下复合设备操作示例
单板作为复合设备,操作过程如下:
- 在单板端,ko、u_ether.ko、u_serial.ko、usb_f_acm.ko、usb_f_rndis.ko、g_multi.ko下载到 NFS 挂载的文件系统路径 rootfs/ko/usb 下
- 加载驱动
|
- 在单板端,进行如下操作
|
- 通过USB数据线将单板与Host PC端相连,PC端会自动加载驱动,第一次可能会失败,需要自行安装驱动。
- 在单板端配置IP,命令为ifconfig usb0 xx.xx.xx.xx netmask 255.255.xxx.0;route add default gw xx.xx.xx.xx。
实例如下:
|
|
- PC 端 USB ethernet 设置 IP 属性
- 互 ping 测试
6. 内核下USB 摄像头(UVC)支持分辨率说明及操作示例
单板作为摄像头功能,操作如下:
- 编译应用程序
uvc_app 编译
参考 {SDK_PATH}/mpp/sample/uvc_app 目录下的 readme.txt 文件。
- 在单板端,把ko、usb_f_uvc.ko、应用程序uvc_app和媒体相关驱动目录下载到 NFS 方式挂载的文件系统路径 rootfs/ko/usb 下。
- 执行以下命令
|
- 通过USB数据线将单板与PC相连,PC端识别后,设备管理器列表会出现UVC Camera,表示识别正常,如下所示。
效果如下: |
关于 BSP 调试与进阶的更多博文内容可以通过关注大大通,或者扫描以下二维码即可链接到上一篇博文《 S32V 手动制作 rootfs.uimg 》, 二维码如下所示: |
五、 附件
海思官方资料参考:
1、外围设备驱动操作指南.doc
评论