【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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/?