第四部分 Sensor调试
我们手头上这块开发板使用的是索尼的IMX178LQJSensor,那么完成以上的工作之后就进入了针对这款sensor的修改调试工作了。
依赖文件
SDK中针对sensor的驱动有以下几个依赖文件:
1). load3516a:这里主要是3516pinmux中几个跟sensor有关的寄存器,可修改。
2). sensor_i2c.ko /sensor_spi.ko:这两个文件二选一使用,主要是提供了和sensor通信的支持,需要根据sensor的通信方式进行进行有选择性地加载,加载操作在load3516a中。这两个ko的源码位于$(SDK_PATH)\mpp\extdrv 下,可修改。
3). libsns_xxx.a /libsns_xxx.so:这两个文件二选一使用,主要提供了sensor图像输出的配置接口,需要在应用层序中进行调用,使用静态库还是动态库方式都是可以的,如以imx178的sensor为例,对应的库文件分别为libsns_imx178.a和libsns_imx178.so,其源码位于$(SDK_PATH)\mpp\component\isp\sensor下,可修改。
以上几个文件是配置sensor时有可能需要进行配置的地方。目前,总部那边使用的ov4689的sensor,在demo板上使用的驱动在SDK020基础上无需做任何修改。
IMX178配置
第一步 通信方式
一般sensor的通信方式有SPI或I2C两种方式,至于IMX178LQJ的sensor通信方式,卖家提供给我的信息是使用SPI通信,但是从海思提供的配置和代码来看,是使用I2C的方式进行通信的,那么这里就出现了分歧,那么就获取官方信息吧,千方百计地找卖家要了一份IMX178的datasheet,一查,有如下描述:
Imagedata output(Low voltage serial LVDS output)
Communicationport( IIC interface )
那么这就很明显了,通信方式是I2C通信,图像输出使用LVDS,那么再看load3516a中的配置,在insert_sns函数中imx178的分支配置了寄存器0x200f0050和0x200f0054分别设置为i2c0_scl和i2c0_sda,然后再看ko的加载,在函数insert_ko中有加载了sensor_i2c.ko,所以这些配置无误。
下面,对sensor的工作时钟进行配置。
第二步 时钟配置
对于sensor的输入时钟,在datasheet中介绍有如下几种工作模式:54MHzor 27MHz / 74.25MHz or 37.125MHz,在$(SDK_PATH)\mpp\component\isp\sensor\ readme_cn.txt文档中有针对sensor输入时钟的配置方法,其描述如下:
卖家提供的信息是需要配置成27M输入时钟,我经过测试发现在SDK030下,配置成25M时钟,sensor配置为1080p@60fps下出CVBS视频暂时没有问题,配置成27M时钟也没有问题,也就是说从目前的测试情况,两种工作模式都可以。至于是否会有其他方面问题,需要进一步验证。