赞
踩
v851s fastboot 快起 SDK 因为有小核 e907 的存在,使得启动速度加快,同时可以理解为小核e907 和 大核各自跑了 rtos linux系统,小核rtos协助了 linux 的启动,做了准备。因此,在sensor 驱动移植方面,快起代码其实是有两份驱动要移植的,rtos里面的驱动,注重的是前期的sensor 初始化功能,linux启动之后注重其他设置曝光之类的sensor功能。我是这么理解的,说的也不官方,准不准确不晓得。
rtos sensor的目录在:lichee/rtos-hal$ cd hal/source/vin/modules/sensor
目前没见过模组厂直接提供sensor驱动的,我的意思是针对快起的sensor驱动,可以自行移植,可参照其他sensor驱动,重要的是初始化参数,和sensor本身的差异,进行修改,然后将移植好的驱动放本目录下,之后就是修改Makefile Kconfig 和快起专属的其他修改点了。
首先就是 sensor 设备地址,sensor id 以及各种寄存器不要搞错了,查看 sensor 手册找一下,clk按照模组厂提供的初始化参数,或者你直接定一个clk,问模组厂要你需要的初始化参数,比如 raw bit啊,分辨率啊,fps啊,你有特定需要就问模组厂要参数,把参数弄进你的驱动。
然后就是初始化数组,这个参数是包含在模组厂提供给你的数据里面的,很长的一大串就是,挪过来驱动里面:
这个初始化数组是可以有多个的,比如这里上面的是1600 1200 30fps的,你也可以把你25 fps的,15fps的写出来多个数组。这个数组对应下面 switch_sensor_formats 里面的 switch_regs 参数,在你使用sensor 不同模式的时候,会加载这个初始化参数。
这个数组里面的参数也是一个比较重要的点,其中一些重要参数也是在模组厂商提供的参数中,有的厂家会直接提供给你hts vts pclk mipi_bps ,有的不提供,看具体情况。但基本都提供了 width height 还有fps。
如果没有提供 hts vts,或者没有提供 pclk mipi_bps,总之就是没有全给你,这时候, hts和vts可以在sensor 手册里面找找看,然后 pclk和 bps是可以算出来的:
pclk = hts * vts * fps
mipi_bps = pclk * raw_bit / lane_num
这个raw_bit 有raw8 raw10 raw12的,数据位数, lane_num 就是你摄像头的通道数,有1 lane和 2 lane的,这个模组厂给你的参数里也会有,没有的话你看看手册找找,一般sensor都支持很多raw bit了,看你问厂家要什么bit的参数了。
注意:有的厂家给你的pclk和bps和计算的不一样,你可以先用厂家给的参数,最后实在出图不了,然后其他修改也都没问题,那你可以自己计算,填进去试试,没必要一直纠结这个参数和你计算的参数不相等。
然后注意了,上面的 raw_bit lane_num还有其他地方需要相应修改,比如这里的lane_num配置,这里是1, 2 lane的要改成2:
还有raw_bit 不一样的话,sensor的rgb格式宏要相应修改,下面这个是raw10的:
刚好说到这个 rgb 格式了,顺带提一嘴,这个格式也是要根据sensor改的,驱动里面有个地方配置这个 egb顺序,也用的这种宏,如果顺序不对,后面点亮sensor,颜色会错乱的,但这都是移植成功,出图的后续修改了,现在离移植成功还远。这种宏在驱动好多地方都有,注意统一raw bit的位数,不要有的地方改了10,有的地方还是12没改。
然后sensor 上电最重要的上电时序就不用说了,这个上电时序不对,那基本上是不行的,这个上电时序是第一步,也是最重要的一步,按照手册自己改一下:
然后这个rtos的 sensor 基本就差不多了。
注意,这个rtos 驱动最后有这个结构体,跟linux 不一样:
修改 lichee/rtos-hal/hal/source/vin/vin.c
参照其他添加自己的sensor:注意这里这个结构体名字就是上面驱动最后那个
修改 lichee/rtos-hal/hal/source/vin/modules/sensor/camera.h
这里要声明那个驱动的结构体,要不然vin.c 里面不认识
修改同目录下的 sensor_register.c
rtos 修改完成
linux部分相比rtos部分修改要容易一些,大头都在驱动上面,还是按照rtos 驱动修改,参照linux 的其他sensor 驱动,修改,放进对应目录,然后 Makefile Kconfig之类的,然后就是设备树
注意:linux驱动里面还有一点需要注意设置,根据sensor i2c的地址和数据位宽,修改这里的参数:
设备树里面是这样的:
如果设备树只支持了一个sensor,想要打开两路sensor的话,你参考这个博客:
到这差不多就移植完了,首先系统启动之后,可以看看log,或者 ls /sys/devices 看看有没有对应名字的设备出来。如果一切正常的话,可以使用isp tuning工具连接尝试出图看看,若颜色不对,那就看看sensor手册,替换驱动中rgb顺序试试。 有个看颜色的小窍门就是你找一个色卡,摄像头下面看到rgb色块明显颜色不对,那就替换rgb顺序继续测试,如果rgb色块颜色对了,但是图像整体还是很紫的,那至少sensor 出图这块你已经调好了,剩下的可以交给tuning工程师调一下效果文件,然后就正常了。
不过交给tuning工程师之前,你还需要做的就是完善你的驱动,毕竟这时候你只是简单的点亮了而已,还需要继续填补驱动里面的曝光,增益,旋转,曝光逻辑等一系列功能,只有这些做了,isp tuning工程师才能调试效果文件。
本篇移植驱动已经完了,剩下的修改空了再开一个文章吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。