海思Hi3516新增sensor imx214 笔记

海思平台-------------------------------------------------

本文档简述了如何在海思平台(以原版SDK为例)更换一块新屏幕和新sensor,并完成采集显示;

调试sensor--VI------------------------------------------

阅读手册可知imx214的设备地址为0x20;

1:首先判断主控与sensor IIC通讯是否成功,可以使用i2cdetect -l来查看启用了几路I2C,再对照原理图查看自己的sensor挂载在哪一路总线上;样例挂载在I2C0上,可以读一下设备ID以判断I2C通讯是否正常,Sony的sensor设备id一般存放在0x16和0x17这两个寄存器中--------i2c_read  0 0x34 0x0016  0x0017 2 1,读出正确说明I2C读取没问题

注:如果此处的iic一直通讯不成功可以按如下步骤排查问题

(1)检查sensor上电是否正常;

(2)使用万用表测量空闲时的SCL以及SDA,应都为高电平,因为空闲状态下,SCL和SDA均应为高电平以实现线与;如果不全是高电平,则可能线路断了,可以用万用表测一下线路是否正常;

(3) 如果第一步正常,则在读ID的时候使用示波器测量一下SCL以及SDA的波形,如果仍有波形但依旧读取失败,则对照原理图以及pcb看一下SCL和SDA有没有接错。

补充:在终端直接操作gpio

海思GPIO转化公式:例如GPIO_4_0==>4*8+0=32

cd /sys/class/gpio

echo 32 > export

cd gpio32

echo out > direction

echo 1 > value

cat value

若出现devices busy则cat /sys/kernel/debug/gpio 

如果gpio口被占用,则要修改设备树;

2:IIC测试正常后就可以编写驱动程序了,这里需要用到的资料有:

《MIPI使用指南》《HIMPP开发参考》《sensor调试指南》《硬件原理图》;

使用的是sample里的vio例程,路径为:

HI3526_AR/smp/a7_linux/mpp->sample->vio这里选case 9

新增一款imx214

1:首先增加imx214驱动文件,路径为:

/HI3526_AR/smp/a7_linux/mpp/component/isp/user/sensor,

主要修改ctrl.c文件中的寄存器配置,此文件主要是底层控制,使用iic来向sensor的相应寄存器写入相应的数据,cmos.c主要定义上层以及回调函数;

注意:新增sensor后要重新生成新的驱动库,需要修改一下Makefile以及重新make一下生成新的驱动,Make的路径:

/HI3526_AR/smp/a7_linux/mpp/component/isp/user先make clean再make生成驱动;

至此,驱动添加成功。

2:接着修改sample中的vio例程,实质上调用的都是common的的程序,主要修改sample_comm_vi.c以及sample_comm_isp.c;

(1)sample_common.h中添加,以及加载相应的库

(2)首先获得sensor的类型,这里可以看到是从Makefile.param中获取到sensor type的;

Makefile.Param

(3)sample_comm_vi_getsize里添加一个case,sample_comm_sys_getpicsize也自己添加一下(如果有新的分辨率的话)

(4)

sample_comm_vi_startvi-->sample_comm_vi_startmipi-->sample_comm_vi_setmipiattr-->sample_comm_vi_getcomboattrbysns中新增一条case,这里是4lane,标号为0,1,2,3,如果只有2lane则为0,1,-1,-1

(5)sample_comm_vi_startvi-->sample_comm_vi_createvi-->sample_comm

_createsinglevi-->sample_comm_vi_satrtdev-->sample_comm_vi_getattrbysns中新增一个case

(6)sample_comm_vi_startvi中重点看一下sample_comm_createisp函数--->sample_comm_vi_startisp-->sample_comm_vi_getpipesttrbysns添加一个case,这里主要设置管道的属性

接着是sample_comm_isp_getispttrbysns同样添加一条case,主要是isp的一些公共属性

 

最后是注册一下回调函数

sample_comm_isp_sensor_register_callback-->sample_comm_isp_getsensob;

 至此VI部分更改完成。

注意:

 1:海思平台的sensor驱动是应用层驱动,目的是为了方便快速更换sensor;

猜你喜欢

转载自blog.csdn.net/warren103098/article/details/127516146