Linux camera驱动开发(点亮新camera sensor)

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

这里的sensor,大部分情况下都是指mipi接口的camera sensor。如果说mcu平台,还有很多的dvp sensor,那么soc平台下面则主要都是mipi接口的sensor。另外和mcu平台不同,很多的soc平台都有isp,所以哪怕sensor本身不带有isp功能,这都没有关系的。这也是soc平台和mcu平台很大的一个区别。今天就谈一谈如何点亮一个新的sensor。

1、目前sensor的主要厂家

当前camera sensor,经常遇到的主要有这么几家。一个是sony,另外两个是思特微和格科微。较早的时候,sony用的居多,而现在越来越多的soc开始支持国产sensor品牌。

2、找到sensor的手册

**要点一个新的sensor,那么势必需要找到对应sensor的芯片手册。**这部分,从公开渠道不一定找得到,而要从代理商那里去获得。所以,要开始调试之前,一定要找到对应的sensor手册。

3、弄懂电路原理

csi接口的sensor本身并不复杂,主要是两部分接口。一个是i2c接口,这一点主要是对sensor进行配置使用的。也就是说,如果我们需要对sensor进行属性的设置,那么就需要配置这个i2c接口。另外一个接口是mipi接口,i2c本身的速率比较低,那么数据传输的部分,主要就是通过mipi来进行传输的。有几条lane,速率多少,这都是要提前想清楚的。

4、配置设备树和menuconfig

menuconfig这一部分,一般大家都不会忘记。毕竟只有把对应驱动代码打开了,才能在开机的时候,加载对应的驱动代码。**但是设备树这部分,往往很容易出现错误。**比如说i2c的pin脚选错了,lane的数量填错了,lane的引脚选错了等等,这些都是很容易出现的错误。

5、sensor驱动代码

sensor驱动代码一般有两个地方。一个地方是drivers/media/i2c这个地方,这是可以公开查找到的sensor驱动目录。还有一个地方是drivers/media/platform这里。按道理说,这里只应该存放soc平台侧相关的代码,不应该放置sensor端的代码。但是soc的sdk本身就是厂家自己提供的,有一些厂家习惯把sensor代码放到drivers/media/platform这里,这也是情有可原的事情。

6、怎么移植新的sensor代码

移植新的sensor代码,并不是如大家所想的那样,从0到1去一行、一行去写代码完成。大多数时候移植的过程是这样的,

1)找到类似的sensor驱动,修改它的函数名,添加适当打印;

2)把新sensor驱动代码,添加到kconfig和makefile里面,这样可以被kernel发现;

3)配置好dts文件,查看电路要求,保证基本的配置信息都是正确的;

4)配置好对应的mipi参数信息,这一点不同的soc平台有不同的配置方法;

5)编写sensor驱动代码,先保证编译驱动是ok的;

6)开始加载驱动,确认i2c访问是ok的,这样至少保证sensor是可以配置的;

7)保证soc mipi侧可以拿到数据,保证数据流是通畅的,查看/dev/video节点是否生成;

8)用同类型sensor的isp配置代替,这样就可以通过v4l2编程拿到新sensor图片信息;

9)调试过程中可能涉及故障分析,比如drivers/media/platform添加打印信息、i2c sensor添加打印信息、硬件端信号测量,这些都是比较花费时间的。调试的时候,不仅需要关注sensor端代码,还要关注硬件、关注driver/media/platform端代码,这样才能又快又好地去进行debug处理。

7、sensor和isp

sensor的基本接口是固定的,都是i2c+mipi,所以soc几乎可以支持所有厂家的sensor。**但是不同soc厂家的isp水平差异很大,一般认为国外soc厂家、国内某思的soc,它们的isp、ai-isp是做得最好的。**其他家的soc图像,相对来说,要逊色不少。

8、其他资料链接

复制代码
https://www.bilibili.com/video/BV1MtPvejErT/?
相关推荐
世微 如初2 天前
AP5125大功率LED恒流驱动实战:地摊灯项目从原理图到调试笔记
驱动开发·芯片·led电源驱动·降压恒流ic
ScilogyHunter2 天前
Zephyr串口驱动开发及构建完全指南
驱动开发·uart·zephyr
_Emma_3 天前
【DRM&Graphic】Linux图形与显示框架
linux·驱动开发·图形渲染·显示器
董厂长3 天前
Loop Engineering:停止手动提示,开始设计自动提示的系统
大数据·人工智能·驱动开发·llm
Saniffer_SH3 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
暮云星影3 天前
全志linux开发屏幕适配(二)`HDMI`驱动适配说明
linux·arm开发·驱动开发
charlie1145141913 天前
嵌入式Linux驱动开发——从轮询到中断
linux·开发语言·驱动开发·嵌入式
暮云星影3 天前
瑞芯微rk3566开发FIT Secure Boot
linux·arm开发·驱动开发·安全
暮云星影4 天前
全志linux开发 USB接口设置
linux·arm开发·驱动开发
sukalot4 天前
windows显示驱动开发-CCD DDI的其它技术
windows·驱动开发