全志平台移植sensor驱动详解

本文详细介绍了一步步移植传感器驱动的过程,以OV02B10为例,涉及硬件配置、上电时序、驱动初始化参数、颜色调整、翻转和曝光增益函数的修改,旨在帮助开发者顺利移植并完善驱动功能。
摘要由CSDN通过智能技术生成

1、说明

        前面一篇文章 fastboot sensor 驱动移植 里面大概介绍了一下快起上面的驱动移植,提及了自己手动移植驱动时,需要修改的一些地方,如果顺利的话可以初步点亮sensor出图,但具体不是太详细,所以想着重新写一篇专门说sensor驱动修改方面的文,这篇也算是驱动移植了,可以实际套用在全志平台(我也没接触过过全志很多其他平台,具体是不是都一样也不晓得),如果不适用,那你再瞅瞅其他人的文章,我这个做个了解好了。

        本文讲一下整体的sensor移植过程,重点在驱动修改方面,然后用 ov02b10 这个驱动做例子分析。这个sensor其实不太友好,也不是非常不友好,就是寄存器设置什么的有一点麻烦,还有曝光增益逻辑也有点麻烦,但是具体阐述这个方法而已,你也不一定面对的就是这种sensor。

        然后,没然后了,让我们go起来

2、驱动修改要点一(点亮基础修改)

        调试sensor第一步,管他什么花里花哨的,我首先得先把sensor点亮,至于颜色,翻转曝光啊之类的功能,那都是后面的事情,不先点亮,其余的全没用。

2.1、硬件管脚等信息

        拿到sensor第一步,首先配置硬件信息,这里配置,基本上重点在设备树里面,其他地方涉及的不多。我们配置的话,就看看硬件关键和当前原理图是否一致,然后就是管脚配置时候注意功能复用,最基础的i2c总线、mipi clk的管脚是否正确、mipi管脚是否正确、sensor最重要的pwdn和reset引脚配置。注意,配完之后,确保正确的前提下,一定要确认在其他地方一定没有管脚复用冲突,因为有的时候,在内核上面包含的dtsi文件里面,是会有引脚冲突存在的可能的,不能只查找当前 board.dts。

列举个别引脚:

mipi  clk等管脚:这里mipi接口,i2c,clk,pwdn都有了,在设备树里面各个查询配置,不过多截图了

sensor节点配置:注意自己使用的i2c总线编号,pwdn引脚,设备地址。有的摄像头reset和pwdn只有一个也可正常工作,这个sensor就是

硬件就看原理图改就行,没多少难度。最基础的就是你首先要硬件上识别到i2c设备,然后才是软件上面驱动探测,两者i2c通讯读取id比对,所以先保证i2c引脚正确,然后sensor节点i2c配的也正确,这时候就可以先使用i2cdetect 工具查看总线了,能探测到i2c设备才能有以后。刚开始排查问题一定是有没有识别到硬件设备,如果i2c配置正确没有识别到设备,这里你就可以停下来了,让硬件帮忙看看是不是哪里有啥问题

2.2、上电时序

        引脚配置顺利,且i2cdetect 识别到设备,就可以搞驱动了。驱动搞好放进去,i2c探测成功,probe函数执行,小机端就有设备了,功能好不好起码有设备了。所以第二步的目标是成功加载驱动。

        这部分最重要的大头在上电时序上面,然后就是一些基础的寄存器配置,比如驱动刚开始,里面的id 寄存器地址,然后寄存器里面需要匹配的id值;再然后是你上一步设备树里面配置的设备地址,这些都需要自己去查找sensor手册查找,包括那个重要的上电时序。

注意看手册上面各个顺序和时值,都正确的话,上电这个sensor驱动的探测函数,对比id应该是能成功的,也就是probe那一步,成功的话,你开机加载sensor驱动的log里面,是不会打印错误log的。如果probe函数对比id报错,根据驱动代码那一部分排查问题,看到底是读id的寄存器不对;还是寄存器正确,然而读出来的id值和自己要对比的sensor id不对应。自己看下什么问题,前面都顺利的情况下,这里基本上没啥问题。(一定要注意是之前的都顺利,要是前面步骤i2c都没通,或者i2c总线设置出错,那疯狂折腾也没啥用)

2.3、初始化参数

        然后就是填充驱动里面的初始化参数,这部分需要模组厂提供,自己也可以向模组厂提出要求,比如什么分辨率的,多少fps的初始化参数,我的初始化参数是这样的(不全,后面一大串,全是初始化数组)

文件名字有时候也包含很多重要信息(包含raw bit,分辨率,mclk,lane之类的信息):

这个初始化参数具体在驱动中,这样使用:

你可以创建多组自己的参数,在sensor_win_size 中引用(每个大括号是一个分辨率的初始化参数,这里举例是1600 1200 30fps 的初始化参数;你也可以复制一份,里面填写你15fps的另一份初始化参数):

hts vts  pclk  mipi_bps fps 这些都可以在模组厂提供的参数文件中找,找不到的可以自己计算, hts vts 有的可以在手册中找到,或者可以根据手册找对应的寄存器,然后对比模组厂提供的参数中对应寄存器的值,也可以得到 vts  hts

pclk = hts * vts * fps

mipi_bps = pclk * raw_bit / lane_num

从上面模组厂提供的文件名字能看出来,用的是raw10, 1 lane的。不必强求模组厂提供的数据和自己计算的不一样,可以根据提供的参数尝试,如果不行再尝试计算数据

2.4、sensor raw bit

这个参数在上面提及到了,sensor手册可以查询到支持的 raw bit,一般sensor支持多种,可以向模组厂索要不同的raw bit初始化参数,看自己具体需求

有的sensor手册说明很详细,比如这种:

这个参数在驱动中需要根据实际情况设置rgb顺序宏,如:

(如果是raw12的,可能这里宏就是 MEDIA_BUS_FMT_SRGGB12_1X12,这个宏要是自己不确定,就在内核里搜一下定义这个宏的地方,看看其他raw bit宏怎么写)

2.5、sensor lane num

参数同上 raw bit 可以在手册中查找,有的初始化参数文件里面也有说明,确认了 1 lane 还是2 lane,修改驱动:(2line的应该也是把数字1改成2就行,还是那句话,不知道的查一下定义的地方,看看是不是,我之前就把CSI后面数字也改了..)

2.6、i2c地址和数据位宽

        i2c数据和地址位宽也需要重视,如果设置不正确,可能刚开始的id匹配都会失败,地址位宽基本上都是8bit,数据位宽有8bit (0xff) 有16 bit (0xffff),看具体的sensor,或者看厂家提供的初始化数据,基本就能看出来地址位宽和数据位宽。驱动中设置这里的参数:

        这些修改完应该就可以出图点亮了,中间的一些针对自己的sensor具体修改的,一定要注意

3、驱动修改要点二(点亮之后驱动完善)

        sensor初步点亮之后还有其他很多问题,比如曝光,翻转,增益,颜色等需要调整和调试。

3.1、颜色,rgb顺序

        若出图之后画面整体颜色不对,可调整rgb顺序看看有没有好转。技巧还是上篇文章中提到的,最好自己百度一张色卡,然后放在sensor下面看色块,如果色块颜色就不对,那就需要调整rgb顺序,如果只主观看到画面全是紫的,或者其他颜色,就去盲目改rgb顺序,大概率是没有多大效果的,因为这时候的isp效果文件没有匹配的,画面不一定就正常显示,有的你调整好了rgb顺序,只是色块颜色都正确了,其实整体画面他就是紫色的,需要后面加载和调试isp效果文件的。

        技巧就是:单看颜色对不对应就行了,不要看整体画面色彩正不正。有的碰巧加载的效果文件也能凑合使用,那它显示的颜色就正常。重点看rgb色块,要是明显看出来绿色和蓝色和手里色卡上面翻了,那就调换绿和蓝颜色顺序。

        rgb顺序在这里设置,初始的rgb顺序(注意这里的宏,不清楚的还是自己去查定义的地方):

3.2、左右上下翻转

        然后就是翻转功能,根据sensor手册,查找对应的寄存器地址,改驱动

注意翻转函数修改完之后,翻转之后的颜色问题也要修改(这里的寄存器和里面数值代表的那个位是什么翻转,都参考书册来改):

如果你不知道翻转之后颜色顺序是啥,你可以根据手册这种信息:

结合上面翻转的手册截图,利用初始的rgb顺序翻转得到翻转后的颜色顺序。或者实在搞不懂,就一个一个试试,总有对的,颜色顺序就那几个。

3.3、曝光、增益函数

        上面都修改好了,最重要的曝光增益就来了。首先还是手册查找增益的寄存器和相关说明:

曝光很大程度上和vts是直接相关的,手册这边介绍了曝光的最大值和最小值,这个数据是要在驱动初始化数据那边做修改的:

曝光和增益在函数中设置,增益逻辑相对复杂,曝光简单,基本上就是设置寄存器,一般的sensor就是直接写对应的寄存器就好了,这个sensor设置寄存器操作比较麻烦,还有生效,所以开头说这个sensor不太友好,曝光如下:

增益函数比较复杂,里面还牵扯了曝光增益逻辑,这个逻辑往往伴随一些参数,曝光增益逻辑有两种方法,查表法和计算法,基本都需要模组厂提供,有个会提供一个表,有的会把整个表和参考代码或者计算代码都提供给你,这种情况就很nice,你逻辑代码直接放进这个增益函数里面用就可以了:

没有给你参考代码的,那你自己参考其他的驱动,写一个,用模组厂提供的表就好了,就这个数组,必要的时候做一下取整什么的(取整思路参考另一篇,这里代码没截全,不单纯乘1024就完了):

然后就差不多可以了,后续交给 isp tuning工程师调一下效果文件,中间有什么细节小问题,你再改驱动就好了。

打完收工

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值