Hi3516d平台的usb功能调试记录
Hi3516d平台的usb功能调试记录
其他平台类似,但与海思sdk版本和内核版本有关,相关配置位置和形式不一样。hi3516av100内核版本为3.4.35
一、USB用作从机device
- usb大容量存储
作为大容量存储设备时内核配置如下:
1)启用海思DMA(默认开启)
Device Drivers --->
<*> Hisilicon DMAC Controller support
2)usb配置
Device Drivers --->
[*] USB support --->
<*> Support for Host-side USB
[*] hiusb2.0 usb device support --->
<*> hisilicon highspeed device controller version 3.00a driver /*地址信息与寄存器地址一致*/
<*> USB Mass Storage support /* 选上后,gadget中才有对应选项 */
<*> USB Gadget Support ---> /* 目的是dwc_otg编译进来 */
<M> USB Peripheral Controller
<*> USB Gadget Drivers (Mass Storage Gadget) --->
其他配置使用默认即可,建议使用DMA模式。编译后,可以查看内核启动信息(或dmesg查看):
console [ttyAMA0] enabled
uart:1: ttyAMA1 at MMIO 0x20090000 (irq = 41) is a PL011 rev2
bio: create slab <bio-0> at 0
SCSI subsystem initialized
... ...
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
... ...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
dwc_otg: version 3.00a 10-AUG-2012
Core Release: 3.10a
Setting default values for core params
Using Buffer DMA mode
Periodic Transfer Interrupt Enhancement - disabled
Multiprocessor Interrupt Enhancement - disabled
OTG VER PARAM: 0, OTG VER FLAG: 0
Dedicated Tx FIFOs mode
g_mass_storage gadget: Mass Storage Function, version: 2009/09/11
g_mass_storage gadget: Number of LUNs=1
lun0: LUN: removable file: (no medium)
g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
g_mass_storage gadget: userspace failed to provide iSerialNumber
g_mass_storage gadget: g_mass_storage ready
主要有usb核心驱动、otg驱动、大容量存储驱动
此时接入电脑USB,可以在电脑的设备管理器中查看到“USB大容量存储设备”,运行正常。
如果电脑仍没有识别到设备插入的话,检查usb线序是否有问题;检查外设控制寄存器MISC_CTRL30配置是否正确[bit31] 0 -- host,1 -- device
说明:上面配置中将驱动编译进内核,也可以编译成模块.ko文件,然后加载。
编译过一次内核之后,编译成模块时可以通过命令单独编译:
make -C /home/wigewige/linux-3.4.y M=/home/wigewige/linux-3.4.y/drivers/usb/gadget ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-
-C:指定.config文件路径
M:指定要编译的模块路径
ARCH:指定交叉编译工具
- usb文件存储(u盘)
用作u盘时,把上面gadget中的“Mass Storage Gadget”改成“File-backed Storage Gadget (DEPRECATED)”即可,
生成的驱动文件为“g_file_storage.ko”,该部分建议以模块形式编译,然后手动加载,因为要制定存储介质,加载的时候制定对应参数。详细使用参考海思《外围设备驱动 操作指南.pdf》。
驱动加载后可以在电脑中识别为U盘,但操作U盘还需要做其他配置(没有测试验证)。
- uvc设备端
作为uvc设备是内核配置如下:
- 多媒体配置
Device Drivers --->
<*> Multimedia support --->
[*] Media Controller API (EXPERIMENTAL)
<*> Video For Linux
[*] V4L2 sub-device userspace API (EXPERIMENTAL)
[*] Video capture adapters (NEW) --->
[*] V4L USB devices (NEW) --->
<*> USB Video Class (UVC)
[*] UVC input events device support (NEW)
<*> CPiA2 Video For Linux
[*] V4L platform devices --->
<*> SoC camera support
<*> platform camera support
2)usb配置
Device Drivers --->
[*] USB support --->
<*> Support for Host-side USB
[*] USB announce new devices
[*] USB device class-devices (DEPRECATED)
[*] hiusb2.0 usb device support --->
<*> hisilicon highspeed device controller version 3.00a driver /*地址信息与寄存器地址一致*/
<*> USB Gadget Support ---> /* 目的是dwc_otg编译进来 */
<M> USB Peripheral Controller
<*> USB Gadget Drivers (USB Webcam Gadget) ---> /* 配置了多媒体后才有该选项 */
其他配置使用默认即可,建议使用DMA模式。
可以根据实际情况选择编译进内核或模块。编译成模块则有以下模块:
dwc_otg.ko /* usb作为从设备相关的驱动 */
g_webcam.ko
uvcvideo.ko
videobuf2-core.ko
videobuf2-memops.ko
videobuf2-vmalloc.ko
videodev.ko
手动加载驱动时如果有报错可以通过dmesg查看,一般出错的原因是有依赖关系,加载顺序不正确导致的。加载顺序如下:
insmod dwc_otg.ko
insmod videobuf2-core.ko
insmod videobuf2-memops.ko
insmod videobuf2-vmalloc.ko
insmod videodev.ko
insmod uvcvideo.ko
insmod g_webcam.ko
编译进内核的模块或手动加载的模块,在内核启动后通过命令可以查看:ls /sys/module/
查看设备信息:cat /proc/devices
查看usb设备信息:lsusb 或 lsusb -v
如果驱动加载成功且没有报错的话,在电脑端应该能识别到UVC camera。但由于3516av100可用的usb 端点数量有限,g_webcam加载时报错:
g_webcam gadget: uvc_function_bind
g_webcam gadget: Unable to allocate streaming EP
himm 0x10080044 ---> 0x00000024
himm 0x10080048 ---> 0x2288C8D4
读取硬件配置寄存器GHWCFG1和GHWCFG2,可以查看到除了ep0(双向)之外,只有两个可用端点,一个in一个out。Usb协议中ep0为必备端点,上电即可使用,而其他端点需要通过ep0和主机建立连接时进行配置,配置后才可以使用。UVC协议中需要使用两个IN ep,一个用作视频控制VC,一个用作视频流VS,因此在加载该驱动时获取ep失败,在绑定uvc功能模块时报的错。(海思方面答复是3516av100不支持)
注意:驱动本身最大支持到16个端点(含ep0),但是实际可用的受限于硬件,通过读取寄存器获取到可用端点总数和in/out端点数。
理论上可以复用ep0作为uvc的VC端点,因为ep0是双向的;但实际验证行不通,为此做了如下修改尝试:
- VC复用ep0
- VC为空
- VC和VS共用端点
主要修改f_uvd.c中uvc_function_bind函数。
上面的修改均行不通,修改后再host对设备进行配置时,setup报错。
实际查看代码,关于uvc的描述符中定义了uvc控制类和uvc视频流类:uvc_control_cls和uvc_fs_streaming_cls,还有一个uvc_hs_streaming_cls类。
如果要修改还需要对uvc协议和驱动代码深入的了解,时间有限,没有深入去理解。
二、USB用作主机host
作为大容量存储设备时内核配置如下:
Device Drivers --->
[*] USB support --->
<*> Support for Host-side USB
[*] USB announce new devices
[*] hiusb2.0 usb host support --->
<*> hisilicon highspeed device controller version 3.00a driver /*地址信息与寄存器地址一致*/
[*] hisilicon usb host controller support
[*] hiusb-ehci usb host device support
[*] hiusb-ohci usb host device support
其他配置使用默认即可,建议使用DMA模式。
注意:用作主机时没有实际验证,如有问题还需要检查其他配置。另外,3516av200和3519的sdk中加入了主从自动切换的驱动,在gadget中配置。内核版本为3.18.20.
Hi3516d平台的usb功能调试记录相关推荐
- RK3188 5.1平台PCM2708 USB声卡调试
RK3188 5.1平台PCM2708 USB声卡调试 [1]底层要支持usb sound,通过make menuconfig 找到如下配置: [2]设置CONFIG_SND_RAWMIDI=y 和C ...
- Nvidia Xavier平台CAN收发控制器调试记录
1. 前言 由于需要接收车辆的CAN信息,就需要CAN收发功能: 正好xavier平台自带两路CAN控制器: 以下是驱动调试记录 2. 硬件连接 CAN总线获得数据使用OBD2; 连接2个CAN收发器 ...
- Nvidia Xavier Nx平台PCIE速率调整调试记录
1. 前言 如何增加最大速度的pcie上的jetson xavier? 因为被限制在2.5 GT/s Xavier似乎可以增加到8 GT/s. 使用Jetpack 4.5 0004:00:00.0 P ...
- Android USB Camera(1) : 调试记录
1. 前言 前段时间调试了一个uvc摄像头,这里做下记录.硬件平台为mt6735,软件平台为android 5.0 2. 底层配置 UVC全称是usb video class,一种usb视频规范.所有 ...
- [调试记录]3288 7.1平台上移植美格 SLM790 4G模块
[调试记录]3288 7.1平台上移植美格 SLM790 4G模块 一 驱动配置 1.1 PPP 配置 需要配置 Android 内核来支持 PPP 功能,按照以下步骤来配置 PPP 选项 Devic ...
- nvidia xavier平台无PD控制器USB接口调试
NVIDIA英伟达 1. 前言 问题: 基于nvidia xavier核心板,设计载板,但是USB功能无法使用: 硬件: OTG连接器使用Micro B VBUS_ID=GPIO30(B55) pin ...
- nvidia nx平台GStreamer pipeline异常问题调试记录2
1.前言 承接上文 nvidia nx平台GStreamer pipeline异常问题调试记录1_bingdund的博客-CSDN博客 2. 设置gst调试级别为3 这是我在崩溃发生前得到的唯一消息 ...
- Nvidia Agx Xavier平台无PD控制器USB接口调试
1. 前言 问题: 基于nvidia xavier核心板,设计载板,但是USB功能无法使用: 硬件: OTG连接器使用Micro B VBUS_ID=GPIO30(B55) pin VBUS Dete ...
- 展讯平台功耗调试记录
展讯平台功耗调试记录 1.查看应用持有锁:dumpsys power | grep LOCK 2.查看内核持有锁:cat /d/wakeup_sources 休眠后查看唤醒源:串口 log 打印 Wa ...
- Nvidia Xavier Nx平台GMSL接口imx390相机驱动调试记录
1.前言 使用GMSL的串行器和解串器9295 9296 两路imx390相机 有两种采集方式, 一种是在前端拼接好作为一路采集: 另一种是独立采集,使用MIPI的虚拟通道. 下面为调试记录 2. 搭 ...
最新文章
- Android Linux 9,linux学习(一)(ubuntu9.10 玩转android)
- 国内外有名的安全扫描工具,你知道几个?
- 河北工业机器人夹爪生产厂家_电动夹爪会成为“标配”吗?
- executequery方法_在IDEA的maven项目中连接使用MySQL8.0方法教程
- sublime text3 按F5运行python代码
- Latex快速入门系列 -- 在TexStudio中正确插入参考文献的基本操作
- 宁波Uber优步司机奖励政策(12月14日到12月20日)
- OLW (Open Live Writer)安装代码高亮插件方法(简明)
- 很多人都爱玩的lol..
- Tcl Tutorial 笔记8 · proc
- 利率市场化改革 增大银行风险管理挑战
- 实时高清渲染:Shadows
- 【C++背包】稀奇古怪的多重背包问题
- python 实时股票行情_python 实时获取股票行情脚本
- 音创a55怎么安装系统_怎么安装系统|教你怎样安装系统教程
- 【js】不间断空格 特殊的空格-ASCII码值160
- 哪些数码好物值得在开学季入手,推荐几款数码好物
- StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全
- 专访三维力控科解读实时数据库的发展
- FinTech头条丨祝贺国家电投全球司库管理系统成功上线!
热门文章
- Arduino 传感器: 使用FSR402压力传感器检测压力
- linux centos7 录屏,centos7在线安装视频录制软件
- 如何恢复误删SD卡文件?SD卡误删除数据恢复
- python人民币转大写_python将人民币转换大写的脚本代码
- 三维模型重建(1):关于三维模型重建的一些简介
- 3种常用的图片压缩方法
- 车牌识别对于智慧城市的重要性
- python 多继承 MRO
- 【实验】【视图】使用v$bgprocess视图获得所有后台进程信息
- 阅读图像显著性检测论文三:Saliency Detection A Spectral Residual Approach