图像sensor的特性和驱动解析

目录

1、更换OV9712并且做配置更改和测试

1.1、更改配置脚本

​编辑1.2、测试运行

1.3、更换sensor的总结

2、MIPI和LVDS和并口

2.1、并口Sensor

2.2、LVDS

2.3、MIPI(MIPI-CSI2)

2.4、总结

3、HI3518E的Sensor接口引脚复用设置

3.1、查看引脚定义框图

3.2、找到相应设置寄存器

3.3、himm工具---是海思提供的一个写寄存器的软件库,海思在rootfs中已经安装好了

4、sensor驱动源码解析

4.1、sensor驱动源码寻找

4.2、sensor驱动的框架

4.2.1、xxxx_cmos.c中:回调函数实现和注册

4.2.2、xxxx_sensor_ctl.c中:sensor 的底层控制驱动,主要实现 sensor 的读写和初始化动作。用户可以根据sensor 的 datasheet 进行这两个文件的开发,必要的时候可以向 sensor 厂家寻求支持

5、ISP_3A框架解读(在Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp目录下)

6、更改黑电平

6.1、sensor的注册接口分析

6.2、黑电平

6.3、修改sensor驱动中黑电平的设置

7、sensor驱动的寄存器操作

7.1、sensor驱动的寄存器设置在sensor_init函数中

7.2、翻转图像

8、总结

8.1、体系思想

8.2、海思方案的sensor驱动相关体系关键点

8.3、扩展学习方向


1、更换OV9712并且做配置更改和测试

1.1、更改配置脚本

图像sensor的特性和驱动解析_第1张图片

修改Hi3518E_SDK_V1.0.3.0\package\mpp\sample\Makefile.param

图像sensor的特性和驱动解析_第2张图片
1.2、测试运行

运行官方SDK sample的测试版本(打包到本地)

运行ORTP传输的测试版本(RTP实时预览)

1.3、更换sensor的总结

(1)程序框架做好多种sensor支持的框架,导致我们可以通过配置很容易的更改

(2)不同的sensor要注意硬件接线上面的差异

(3)由于配置不同,导致加载不同的驱动,做不同的参数设置

2、MIPI和LVDS和并口

查看Hi3518E V200R001C01SPC030\00.hardware\chip\document_cn\Hi3518EV200经济型HD IP Camera SoC产品简介        了解这款SoC支持哪些接口的sensor

2.1、并口Sensor

(1)OV9712和AR0130都是并口的

(2)并口的接口定义:参考AR0130的原理图pdf

(3)并口传输的是CMOS电平信号(重点是非差分)

(4)并口sensor属于较低端老旧的,新型高像素的都是MIPI/LVDS/HISPI等差分信号的

2.2、LVDS

(1)low voltage differential signal,低电压差分信号

(2)接口由1组差分clock和若干组差分信号线组成

(3)LVDS主要用于视频传输的2个领域:camera和主控、LCD和主控

(4)LVDS利用差分抗干扰能力,提升clock频率从而提升带宽,传输距离也更远

(5)LVDS的数据线组数越多带宽越大、clock频率越高带宽越大(牺牲抗干扰和距离)

(6)并口和LVDS之间可以互转,但是需要专门的电平转换芯片(类似于232和485)

2.3、MIPI(MIPI-CSI2)

(1)MIPI: mobile industry processor interface,移动工业处理器接口

(2)MIPI接口由1组差分clock和1-4组差分信号线组成

(3)MIPI和LVDS虽然都是差分对信号,但是不兼容,不能直接对接

(4)MIPI的架构层次更分明,广泛应用在手机平板等领域中,可以认为MIPI是LVDS的升级版

(5)MIPI的数据线组数越多带宽越大、clock频率越高带宽越大(牺牲抗干扰和距离)

(6)MIPI和LVDS和并口之间均可以互相转换,但是需要专门的电平转换芯片

2.4、总结

(1)老旧的、低端的、数据量小的就用电平信号;新的、高端的、数据量大的都用差分信号

(2)要通信,物理层、协议层、应用层都得能对接才行。

(3)因为历史原因,很多行业会使用不同的接口标准,必要时需要去互相转换

3、HI3518E的Sensor接口引脚复用设置

3.1、查看引脚定义框图

Hi3518E V200R001C01SPC030\00.hardware\sensor\开发板原理图\*

3.2、找到相应设置寄存器

Hi3518E V200R001C01SPC030\00.hardware\chip\document_cn\Hi3518EV20X/Hi3516CV200经济型HD IP Camera Soc用户指南

3.3、himm工具---是海思提供的一个写寄存器的软件库,海思在rootfs中已经安装好了

使用himm工具修改Sensor相关引脚寄存器的配置

图像sensor的特性和驱动解析_第3张图片

4、sensor驱动源码解析

4.1、sensor驱动源码寻找

(1)从sample入手

(2)sensor层驱动在component/isp中(mpp\component\isp\sensor\ar0130)

查看Makefile

图像sensor的特性和驱动解析_第4张图片

发现sensor驱动最终编成.so动态库和.a静态库的形式被放到了lib目录下

这是应用层驱动,应用层驱动是将内核驱动大部分内容放到了应用层实现,好处是驱动更改时,无需重新编译内核,只需将重新制作动态库。坏处是很容易被替换,安全性不好,还有一个就是应用层驱动的效率没有内核层效率高。

并且,应用层驱动是不可以直接操作硬件的,它最终还是调用了内核I2C驱动操作硬件。

sensor_register_callback

    cmos_init_sensor_exp_function

        sensor_init

            sensor_init_720p_30fps

                sensor_write_register

                    ioctl(g_fd, GPIO_I2C_WRITE, &i2c_data);//应用层调用I2C驱动

(3)底层i2c驱动在kernel中

4.2、sensor驱动的框架

(1)mpp定义了一套sensor驱动的实现和封装

(2)xxxx_cmos.c中定义回调和上层函数

(3)xxxx_sensor_ctl.c中定义底层硬件相关的寄存器值配置函数

(4)kernel中的I2C驱动提供i2c层面的物理层操作接口

4.2.1、xxxx_cmos.c中:回调函数实现和注册

4.2.2、xxxx_sensor_ctl.c中:sensor 的底层控制驱动,主要实现 sensor 的读写和初始化动作。用户可以根据sensor 的 datasheet 进行这两个文件的开发,必要的时候可以向 sensor 厂家寻求支持

//应用层和Sensor驱动的接口
sensor_register_callback //这个函数 主要是对 与Sensor驱动相关的函数的绑定                 
  cmos_init_sensor_exp_function //一系列函数指针的填充
  HI_MPI_ISP_SensorRegCallBack //初始化Sensor中与ISP相关的操作
  cmos_init_ae_exp_function //一系列函数指针的填充
  HI_MPI_AE_SensorRegCallBack //初始化Sensor中与AE相关的操作 
  cmos_init_awb_exp_function //一系列函数指针的填充
  HI_MPI_AWB_SensorRegCallBack //初始化Sensor中与AWB相关的操作

5、ISP_3A框架解读(在Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp目录下)

ISP 的 Firmware固件 包含三部分,一部分是 ISP 控制单元和基础算法单元,即 ISP 库(isp\firmware),一部分是 AE/AWB/AF 算法库(isp\3a),一部分是 sensor 库(isp\sensor)。Firmware 设计的基本思想是单独提供 3A 算法库,由 ISP 控制单元调度基础算法单元和 3A 算法库,同时 sensor 库分别向ISP 库和 3A 算法库注册函数回调,以实现差异化的 sensor 适配,实现解耦合。

SAMPLE_COMM_ISP_Init 
    sensor_register_callback    sensor 库分别向ISP 库和 3A 算法库注册函数回调 
    HI_MPI_AE_Register          3A算法库向ISP库注册函数回调 
    HI_MPI_AWB_Register 
    HI_MPI_AF_Register

ISP firmware 设计思路如下图

图像sensor的特性和驱动解析_第5张图片

不同的 sensor 都向 ISP 库和 3A 算法库注册控制函数,这些函数都以回调函数的形式存

在。ISP 控制单元调度基础算法单元和 3A 算法库时,将通过这些回调函数获取初始化

参数,并控制 sensor,如调节曝光时间、模拟增益、数字增益,控制 lens 步进聚焦或

旋转光圈等。

例子:sensor驱动自己提供操作曝光时间的函数和获取曝光时间的函数,然后将这个函数注册到ISP库和3A算法库,3A算法库根据外部光照强度计算出一个Sensor曝光时间的设置值,ISP库得到这个设置值,然后通过Sensor之前注册的回调函数,把这个值设置到Sensor的硬件寄存器中去,实现整个过程。

2.1 软件流程

ISP 作为图像前处理部分,需要和视频采集单元(VIU)协同工作。ISP 初始化和基本

配置完成后,需要 VIU 进行接口时序匹配。一是为了匹配不同 sensor 的输入时序,二

是为 ISP 配置正确的输入时序。待时序配置完成后(SAMPLE_COMM_ISP_Init函数执行结束),ISP 就可以启动 Run(执行SAMPLE_COMM_ISP_Run函数) 来进行动态

图像质量调节。此时输出的图像被 VIU 采集,进而送去显示或编码。软件使用流程如

图 2-1 所示。

PQ Tools 工具主要完成在 PC 端进行动态图像质量调节,可以调节多个影响图像质量的

因子,如去噪强度、色彩转换矩阵、饱和度等。

6、更改黑电平

6.1、sensor的注册接口分析

图像sensor的特性和驱动解析_第6张图片

6.2、黑电平

黑电平(black level)是指显示装置上,全黑输出对应视频信号电平。即定义图像数据为0时对应的信号电平。

例子:图像上用rgb000表示黑颜色,000是数字信号,需要转化成模拟电信号,然后再将模拟电信号转化为光信号(rgb000对应全黑输出)显示到显示器上。这是显示器上,Sensor那边也一样,是反着来的

光透过镜头照到Sensor上-》光信号转化为模拟电信号-》AD转换成数字信号(rawRGB)

图像sensor的特性和驱动解析_第7张图片

6.3、修改sensor驱动中黑电平的设置

(1)修改驱动源码(sambashar\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\sensor\ar0130)

图像sensor的特性和驱动解析_第8张图片

(2)清除,并重新编译

图像sensor的特性和驱动解析_第9张图片

(3)确认mpp中lib目录下的libsnsxxx.a/so已经被更新

(4)重新编译sample并运行查看效果

图像sensor的特性和驱动解析_第10张图片

(5)能看到图像变得更粉红、更亮

7、sensor驱动的寄存器操作

7.1、sensor驱动的寄存器设置在sensor_init函数中

sensor_init 
    sensor_init_720p_30fps 
        sensor_write_register

图像sensor的特性和驱动解析_第11张图片

(1)sensor内部有若干寄存器,可以通过I2C接口来读写

(2)数据手册有对寄存器的基本说明

(3)经验:大部分寄存器设置厂家会给,偶尔需要自己调一些

7.2、翻转图像

图像sensor的特性和驱动解析_第12张图片

0x3040寄存器用于管mirror(镜像)和flip(翻转)图像的;

一般的监控摄像头是倒装的,所以可以只设置flip位就能达到效果;

(1)查sensor数据手册的寄存器列表

(2)改sensor驱动代码

图像sensor的特性和驱动解析_第13张图片

(3)重新编译isp

(4)确认sensor库已经更新到mpp中

(5)重新编译sample,运行测试

未flip的图像

图像sensor的特性和驱动解析_第14张图片

flip后的图像

图像sensor的特性和驱动解析_第15张图片

8、总结

8.1、体系思想

(1)成熟的商业解决方案都是一整套设计好的模式

(2)第一步是理解,第二步是用起来,第三步是小修改,第四步是大修改,第五步是创造

8.2、海思方案的sensor驱动相关体系关键点

(1)搞清楚sensor的本质:光电转换+AD+ISP+并口/MIPI/LVDS

(2)ISP有多种实现:sensor内置、主SoC内置、外接专用ISP芯片

(3)3A是为最终图像效果负责的,3A的实现依赖于镜头、sensor、isp等各部门协同工作

(4)海思的体系中把sensor和3A、ISP实现为:指针挂接注册的各自独立模块

8.3、扩展学习方向

(1)sensor的各种参数

(2)其他几种sensor的驱动和对比实现

(3)isp的firmware

(4)3A算法相关知识

你可能感兴趣的:(音视频,arm开发,笔记,linux)