2

全志V3S嵌入式驱动开发(USB camera驱动)

 1 year ago
source link: https://blog.csdn.net/feixiaoxing/article/details/131268144
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

全志V3S嵌入式驱动开发(USB camera驱动)

嵌入式-老费 已于 2023-06-18 15:42:18 修改 343

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        soc和mcu的一个重要区别,就是soc会涉及到大量的音视频操作,当然音视频也就包括了camera摄像头这部分。v3s本身支持csi接口和mipi csi2接口。但是两者不能同时使用,一份电路图,只能使用一种接口。另外,厂家对于两份接口的支持也是不同的,对于csi,官方soc文档中给出了主要的寄存器配置信息;而对mipi cs2则支持有限,只是一份介绍性的文档。

1、mipi csi2电路图

f9969d05a68b4466808e53214d044e57.png

         这是mipi csi2的驱动电路,整个结构还是很清楚的。CK_P & CK_N是时钟差分,D0_P & D0_N、D1_P & D1_N是数据差分。另外三个信号是MCLK、PWDN和RST。AVDD是电压信号,2.8V。上面这些都是数据通讯的信号线。控制信号线则比较简单,主要就是IIC接口,即SCK和SDA。

        电路上看camera接口还是比较简单的,几乎没有什么难度。而难点正是在于软件驱动的编写,而使用频率比较高的mipi csi2又没有相关的驱动支持,这就有点尴尬。除此之外,对于h264这样的编解码支持,目前文档上面体现的也不多,这也有点遗憾。

2、usb camera

        为了弥补camera的遗憾,同时可以让大家继续学习和了解camera,另外一个方向,大家可以试试usb camera。使用usb camera有几个好处,第一,本身linux kernel就对usb camera uvc支持,不需要做额外的工作,就可以适配很多的第三方摄像头;第二;相关的摄像头也比较容易采购,选择余地较多;第三,有了驱动之后,大家也方便对/dev/video0进行操作,进行图片的后续处理,或者相关视频的开发工作。

1c4f6b96daf248bf96c688dacb692358.png

3、设备树配置

        设备树的配置没有特别需要注意的。和usb host一样,它所要做的就是就是把usb_otg中的dr_mode修改为host,其他部分不需要则不做修改。

        后续其他所有的usb设备,只要v3s是作为host访问,基本设备树这边的修改都是这样的。

4、uvc驱动的修改

        目前关于usb camera这部分的配置,主要位于drivers->Multimedia support这个部分,

cfa29478017647ad9e87f1b5d51ad5aa.png

         自从内核从4.14.y升级到5.2.y之后,关于usb camera这部分驱动,默认已经配置好。因此对于我们来说,唯一需要修改的,就是把Multimedia support下面所有的M选项,修改成y选项。这也就是说明,相关的驱动代码没有被编译成单独的ko文件,而是集成在zImage里面。这主要是对于我们测试来说比较方便。修改之后,可以通过diff查看下,相关的内容是如何修改的,



newCodeMoreWhite.png

        箭头<表示新添加的内容,箭头>表示删除的内容,大家灵活比较一下即可。

5、编译烧入文件

        因为dts和内核代码都发生了改变,所以我们需要分别生成dtb文件、zImage文件。等到编译完成之后,烧入即可。

6、开始测试

        所有的文件都准备之后,就可以开始准备测试了。测试可以分成三个部分,第一,当usb camera插入的时候,看看有没有具体的打印信息,

        第二,查看对应的video设备节点有没有生成,

        第三,编写程序,对/dev/video节点进行访问,查看是否可以进行截图操作。这里我们参考了网上的一份代码,地址在https://blog.csdn.net/zhangdaxia2/article/details/72763847。链接地址的最后直接给出了源代码,不妨命名为new_video.c,交叉编译之后copy到开发板,

arm-linux-gnueabihf-gcc new_video.c -g -o new_video

        等到文件准备好之后,就可以准备开始截图操作了。因为相关的摄像头是/dev/video0,所以只需要输入./new_video 0即可,



newCodeMoreWhite.png

        不出意外的话,你会看到上面这些打印,除此之外,ls一下,还可以看到生成的10张bmp图像,

        为了验证效果,此时可以拔掉usb摄像头,重新插入u盘,mount到/mnt目录之后,就可以把所有的bmp图像拷贝到U盘出上。重新u盘插上电脑,用一个看图软件看一下效果,就能判断出是不是camera真的是有效果。目前看下来,拍摄的前面几张图片比较暗淡,后面是正常的,这一点略微有点奇怪。

        至此,usb camera的部分算是讲完了,大家可以自己做做实验,加深一下印象和认知。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK