HISI3559AV100 平台 USB 操作测试

一、 前言

        Hi3559AV100 包含了丰富的硬件计算资源,包括单核的 A53、双核 A73 和双核 A53 组成的 big.LITTLE 系统以及一个 M7、一个 GPU、两个 DSP 和 NNIE 加速引擎。Hi3559AV100 平台针对 USB 接口的功能提供了非常丰富的支持,因此本文主要讲解在 Hi3559AV100 平台下的 USB 接口的各项功能的实际操作。

 

二、 操作准备与说明 

  1. 说明

          Hi3559AV100  的  USB 只能 Host 模式或 Device 模式二选一使用。

 

  1. 准备

          U-boot 和 Linux 内核使用 SDK 发布的 U-boot 和 kernel

          文件系统可以使用本地文件系统 yaffs2、jffs2、ext4 或 cramfs,也可以使用 NFS,建议使用 jffs2。

三、 操作过程

  1. Uboot下USB Host操作过程
  • 编译 u-boot 下 USB 相关的驱动,默认相关驱动已全部选上,主要驱动选项如下
 
 

 

 
 

  • 编译相关命令:

make CROSS_COMPILE=aarch64-himix100-linux- hi3559av100_defconfig

make CROSS_COMPILE=aarch64-himix100-linux- menuconfig

make CROSS_COMPILE=aarch64-himix100-linux- -j 20

cp ../../../tools/pc/uboot_tools/reg_info.bin .reg

make ARCH=arm CROSS_COMPILE= aarch64-himix100-linux- u-boot-z.bin


说明:当前 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相关的内核驱动模块。

cp  arch/arm64/configs/hi3559av100_arm64_big_little_defconfig   .config

make  ARCH=arm64  CROSS_COMPILE=aarch64-himix100-linux-   menuconfig


         进入menuconfig的如下路径,USB device作为虚拟u盘、复合设备、摄像头的配置如下

Device Drivers  --->

         [*] USB support  --->

 


     

Device Drivers  --->

        PHY Subsystem  --->


  • 编译内核模块命令

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- modules

注意:在编译模块之前先编译内核

make ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- uImage


  • 启动单板,加载yaffs2、jffs2、ext4或cramfs文件系统,也可以使用NFS。
  • 单板作为Device时,需加载Device模块才能在Host端被识别成相应 USB 设备。

      下面列出所有USB Device相关驱动:

  1. 文件系统和存储设备相关模块与 Host 相同
  2. 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

四、 操作实例

  1. 内核下U盘操作示例
  • 插入检测,枚举成功
 

其中:sda1表示U盘或移动硬盘上的第一个分区,当存在多个分区时,会出现sda1、sda2、sda3等字样。

  • 应用
  1. 挂载分区

mount -t vfat /dev/sda1 /mnt

  1. 写测试

cp ./test.txt /mnt


 2. 内核下键盘操作示例

 3. 内核下鼠标操作示例
  • 插入模块,即将鼠标 USB 接口插入单板上的 USB 接口
 

 

  • 接收鼠标输入

cat  /dev/input/mouse0  |  hexdump &


  • 鼠标点击或滑动出现如下码值
 
      
 4. 内核下虚拟U盘操作示例

          单板作为虚拟U盘时,以U 盘做存储介质为例,也可使用 Flash 或者 SD 卡,操作过程如下:

  • 插入驱动模块模板如下(注意插入驱动模块前先插入 U 盘)

insmod libcomposite.ko

insmod usb_f_mass_storage.ko

insmod g_mass_storage.ko file=/dev/mtdblockX  luns=1 stall=0 removable=1

实际如下

insmod libcomposite.ko

insmod usb_f_mass_storage.ko

insmod g_mass_storage.ko file=/dev/sda1  luns=1 stall=0 removable=1

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 下
  • 加载驱动

cd /rootfs/ko/usb

insmod libcomposite.ko

insmod u_ether.ko

insmod u_serial.ko

insmod usb_f_acm.ko

insmod usb_f_rndis.ko

insmod g_multi.ko


  • 在单板端,进行如下操作

vi /etc/inittab

#::respawn:/sbin/getty -L ttyS000 115200 vt100 -n root -I "Auto login as root ..."

::respawn:/sbin/getty -L ttyGS0 115200 vt100 -n root -I "Auto login as root ..."


  • 通过USB数据线将单板与Host PC端相连,PC端会自动加载驱动,第一次可能会失败,需要自行安装驱动。
  • 在单板端配置IP,命令为ifconfig usb0 xx.xx.xx.xx netmask 255.255.xxx.0;route add default gw xx.xx.xx.xx。

          实例如下:

ifconfig  usb0  10.86.218.19  netmask  255.255.255.0

route  add  default  gw  10.86.218.1


  • 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 下。
  • 执行以下命令

cd /rootfs/ko/usb

insmod libcomposite.ko

insmod usb_f_uvc.ko

export VID="0x1e4e"

export PID="0x0100"

export MANUFACTURER="UNKnown"

export PRODUCT="USBCamera"

export SERIALNUMBER="12345678"

export CamControl1=0xa

export CamControl2=0x0

export CamControl3=0x0

export ProcControl1=0x4f

export ProcControl2=0x14

export YUV="360p"

export MJPEG="360p 720p 1080p 2160p"

export H264="360p 720p 1080p 2160p"

./ConfigUVC.sh

cd /rootfs/ko

./load3559av100_multicore -a -sensor0 imx334

cd /rootfs/exefile

./uvc_app &


  • 通过USB数据线将单板与PC相连,PC端识别后,设备管理器列表会出现UVC Camera,表示识别正常,如下所示。
 

效果如下:

关于 BSP 调试与进阶的更多博文内容可以通过关注大大通,或者扫描以下二维码即可链接到上一篇博文《 S32V 手动制作 rootfs.uimg 》, 二维码如下所示:



五、 附件

海思官方资料参考:

1、外围设备驱动操作指南.doc

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论