【2】针对于海思接口配置学习【重点】
配置思路
1. 如何分析视频接口
选择使用MIPI还是LVDS,所需要做的工作有:
1) 硬件配置正确,即配置正确的公模电压,差分电路,正确的接口。
2) 配置相关的MIPI上层抽象接口。
3) 配置相关的寄存器操作。
注:
1、上层硬件配置,此处硬件工作较多,不做深入研究。
2、相关寄存器操作主要集中在XXX_cmos.c与XXX_ctrl.c中,具体配置以另外叙述。
3、Mipi上层抽象接口为海思抽象出来的接口,此层自行配置了相关寄存器,本文主要基于HI3516D芯片进行配置,这也是本次研究的重点。
2. 如何配置上层抽象接口
此处只针对于配置上层抽象接口。主要为LVDS配置,MIPI方式配置较为简单,不做叙述。
- 查看sensor支持LVDS还是mipi接口。实际操作为查看datasheet,一般前几页会有支持的接口名称,或者搜索LVDS,然后搜索DOP1或者DOM1。LVDS的接口使用名称叫做DOPX/DOMX,而MIPI的接口一般为DMOXP/DMOXN。
- 查看硬件配置是否为LVDS接口,实际操作为查看硬件电路图。
- 根据硬件电路图,确定LVDS的lane对接方式。实际操作为对接方式,例如OV4689操作。
- 根据sensor,查看是否支持宽动态,支持宽动态的方式,配置HI_WDR_MODE。
- 确定同步方式。实际操作为搜索LVDS,查看是为SOL方式还是SAV方式。
- 搜寻同步码。实际操作为搜寻sync_code。
3. 视频上层抽象接口配置
海思接口配置,结构体如下所示:
1 | typedef struct |
input_mode为输入模式,代码会根据设置的输入,自行载入MIPI配置还是LVDS配置。
以OV4689 MIPI配置实测:
OV4689配置MIPI
OV4689确定使用MIPI设置,从硬件电路可看出,不累述。
MIPI的配置结构体如下:
1 | typedef struct |
1. 确定datasheet支持的接口
OV4689支持的接口如下:
中OV4689只支持MIPI 4-lane的接口:
2. 确定传输数据
根据文档,传输数据为10位数据。 (海思默认默认配置为12位,此处经过确认,配置成10位也是可以的,通过读取海思3516D寄存器,如论如何配置,寄存器都是10位数据,暂时不知道是不是应用层配置无效)
3. 确定lane的配置。
首先,查看硬件接口,主板3516A接口如下所示:
主板引出来的接口板如下如是:
而OV4689的sensor板插线板如下所示:
构成关系如下:
从海思3516A的芯片出来的MIPI0_D0对应着OV4689sensor的MIPI0_D1, MIPI0_D0对应着OV4689的MIPI0_D3。以此类推,当3516A出来的lane为0,1,2,3时候,对应OV4689为1,3,0,2,配置关系如下:
1 | combo_dev_attr_t MIPI_4lane_SENSOR_OV4689_12BIT_ATTR = |
注:此处有一次事故,由于sensor的mipi接口与海思的mipi接口有改动,所以造成此处接口需要重新配置。
LVDS配置与imx123学习
1. 查看imx123datasheet,是否支持LVDS。
由配置可知,imx123支持LVDS与MIPI,详细配置如下:
2查看硬件采用的是MIPI还是LVDS
由配置可知,imx123配置的是LVDS硬件,而MIPI的硬件是没有配置的,imx123硬件的MIPI如下:
3. 软件配置LVDS配置
Imx123使用的是LVDS配置,所需工作如下:
配置关系如下:
1 | combo_dev_attr_t LVDS_4lane_SENSOR_IMX123_12BIT_3M_ATTR_WDR = |
1)首先设置图像大小
根据配置寄存器我们可知道,设置的图像为2048x1536。(具体如何配置寄存器,后续可在附件配置里讲)
2)配置宽动态模式
我们可知道imx123支持的宽动态为
而海思对于宽动态支持的力度较小,目前只是支持两帧合一帧,即HI_WDR_MODE_DOL_2F,故选择HI_WDR_MODE_DOL_2F。(几种宽动态模式差异,可在后续讲)
3)配置起始方式
首先,在datasheet里搜寻LVDS,在设置页面可知,支持SAV格式,文档如下:
具体SAV与SOL的区别,有兴趣可以看海思文档
1 | Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf |
关于MIPI的部分,也可以直接咨询本人。
4)设置图像数据方式
数据格式,通过文档可知
MIPI支持12或者14,查看
相关设置可知,LVDS也是支持12bit或者14bit相关数据。根据寄存器配置,我们一般使用为RAW_DATA_12BIT。
5)设置数据同步大小端
由文档可知,此数据是以大端设置为先,故设置为LVDS_ENDIAN_BIG。
6)设置同步传输大小端
与第五条类似。
7)设置同步通道
设置同步通道,首先我们是查看文档,是支持LVDS的,并且相关GPIO对应如下:
其中我们硬件设计的时候,同步也有相关标记:
其中硬件设计为8通道设计,DLOP/MD对应的是Ch1.。硬件已做了相关标记。通过寄存器的配置,软件设置8通道。
故配置通道为{1,2,3,4,5,6,7,8}。此配置可参照OV4689的通道配置,sensor出来的ch通道一定要和3516A的ch通道一一对应!
8)设置同步码
设置同步码,可以慢慢看datasheet文档,也可以直接搜sync code两个关键字
我们可以看到,图像的同步码按照图像配置来设置,我们一般用12位数据,其中每个同步码一般为四位,按照SAV(invalid)EAV(invalid), SAV(valid),EAV(valid)顺序来说12位的同步码为:
1 | FFFh,000h,000h,AB0h |
其中前三个同步码为相同数字,故每个通道的同步码为 {0xab0, 0xb60, 0x800, 0x9d0}。另(拓展)
- Sav英文名为start audio vide,EAV为end audio video
- 图像为什么从invaid SAV开始,可以参考下图。