我是靠谱客的博主 美好毛豆,最近开发中收集的这篇文章主要介绍MTK OTG 功能总结(UVC),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

因公司项目需要,近期一直在处理OTG 方面的问题。mtk 的8735 平台,android 6.0,内存3G?

先回顾总结前段时间在工作的所得体会及经验。

1.要实现OTG 功能 ,首选需要芯片支持,当前mtk 的8735 芯片是否支持OTG 功能?

       看原理图,与硬件同事沟通得知OTG 功能在硬件这边其实是一个独立的提供5v电压独立给usb设备供电的功能而已。但在其供电前,驱动这边需要实现USB设备的识别。也就是原理图上所说的IDDIG 脚必须在芯片上引出。此脚是USB ID检测脚,还有个就是电源脚——在识别USB设备后,会触发此脚拉高,然后pmic 给USB设备提供5v电压,后面USB 设备开始正常工作。此为OTG的工作原理。IDDIG 脚和GPIO_OTG_DRVVBUS_PIN脚。后面调试过程中出现的问题和现象说明了硬件原理搞懂很重要,只有在搞懂硬件原理后,才能保证你后面的工作能正常进行下去。如果不明白OTG 工作的原理,是很难调试的。况且后面好要调试UVC 功能——USB camera 。这个必须在OTG调通了基础上才能进行。在这里我们需要有个概念——USB的HOST 和DEVICE 。显然我的机子是作为HOST 端的,连接的OTG设备例如鼠标,U盘,usb camera 均作为device端。USB 还可以配置成HUB 功能,这个需要硬件来实现,我们需要先确认,我们的USB 是支持哪一种的。通常我们的机子USB接口,是当做充电接口和OTG主设备。

 

此图中的GPIO19-OTG-EN就是 GPIO_OTG_DRVVBUS_PIN脚在这里要说明一下 IDDIG脚是需要查原理图,查芯片信息的,一般是对应

一般是用CMMCLK 脚 ,我们在配置pin脚时需要知道是哪个,DRVVBUS_PIN脚是可以灵活选择的。

2.USB工作的几种模式

       这个虽然后面做完了回头看的时候觉得跟调试OTG 没多大关系。但作为USB驱动调试者这些还是需要了解的。USB 按传输速度 我们知道有USB1.0 USB2.0 USB3.0 。我这个项目需要2.0以上。这里需要留意,当前config文件配置中是哪种!还有USB 2.0 传输速度又分全速模式 ,高速模式,两者都是USB 2.0的。这里会涉及到USB的配置,需要留意,由于是UVC 考虑到大量数据传输,是需要配置高速模式。

3.OTG配置相关宏

###CONFIG_MTK_MUSB_QMU_SUPPORT=y

CONFIG_USB_ARCH_HAS_EHCI=y

CONFIG_USB_COMMON=y
CONFIG_USB_OTG=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PLATFORM=y


4.UVC相关宏

CONFIG_MTK_USB_GADGET=y
CONFIG_USB_MTK_ACM_TEMP=y
##CONFIG_USB_MTK_HDRC=y
CONFIG_USB_MTK_HDRC_GADGET=y
##CONFIG_USB_MTK_HDRC_HCD=y
###CONFIG_USB_HID=y
###CONFIG_USB_ARCH_HAS_HCD=y
###CONFIG_USB_DEFAULT_PERSIST=y
###CONFIG_USB_ACM=y
####CONFIG_USB_WDM=y
###CONFIG_USB_PHY=y
####CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
####CONFIG_USB_LIBCOMPOSITE=y
###CONFIG_USB_F_ACM=y
###CONFIG_USB_U_SERIAL=y
###CONFIG_USB_F_SERIAL=y

CONFIG_MEDIA_SUPPORT=y
# Multimedia core support
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_V4L2=y
###CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_GSPCA=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

5.调试过程中使用的工具及其他

在通过OTG进行camera显示时,USB传输带宽会严重制约预览显示效果,有时甚至直接黑屏无法显示。例如我的项目在调试过程中使用UVCcamera apk 来进行显示,在低分辨率时是可以显示的,320x240 30fps ,但如果使用高分辨率就会出问题,直接导致无法显示,整个是黑屏。记得最开始调试时,都怀疑camera 没连上,通过打log,发现是在预览时有带宽分辨率和预览模式的匹配等问题。整个应该是受每个usb camera 模组本身限制的例如有的模组MJPEG和YUYV两种都支持,有的仅支持其中一种,有的两种不同预览模式分辨率和帧率不同。apk在使用过程中,会首先打开camera 然后获取支持的分辨率列表,然后apk 会选择一个分辨率和预览模式进行设置,然后预览。在此需要多说一点,默认的uvc 支持的数据传输有两个制式MJPEG和YUYV,其中MJPEG是带压缩的,就是说如果相同分辨率和fps 如果用MJPEG ,那么USB传输的带宽压力就小很多,卡顿等现象就会好很多。最后将使用到的apk 和github上的源码路径等献上,以飨读者。整个调试过程涉及到Android 应用层和底层驱动,硬件原理。后面我司又调试了一款红外相机,跟调试UVC 没有差异,只是需要提供红外相机的apk。只要UVC调通了,红外相机应该问题不大,但也有卡顿等现象。这边通过给CPU加散热片,发现是过热导致CPU降频。另外这边怀疑是Android 系统整体性能不良导致。后续继续分析,今天先记录下前面的过程。

apk 我这边使用了两个关于UVC 的apk 一个是网上下载量很大的那个apk,不带源码。第一次使用时可能会出现显示为黑屏,需要进入设置设置分辨率。

另一个是github上的源码通过本地Android Studio调试后编译,形成debug版本的apk 方便调试,了解UVC 预览显示的一个过程。此过程其实花费不少时间,因为Android Studio 版本不同,在本机调试可能不容易编译通过需要修改gradle 相关的东西才行。

 

uvcCamera源码

uvc apk安装包

 

uvc源码+apk+androidStudio 调试

 

 

 

最后

以上就是美好毛豆为你收集整理的MTK OTG 功能总结(UVC)的全部内容,希望文章能够帮你解决MTK OTG 功能总结(UVC)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部