loading

Loading

请输入关键字开始搜索
    首页 技术实践嵌入式

    【2】针对于海思接口配置学习【重点】

    分类:嵌入式
    字数: (5448)
    阅读: (151)
    0

    配置思路

    1. 如何分析视频接口

    选择使用MIPI还是LVDS,所需要做的工作有:
    1) 硬件配置正确,即配置正确的公模电压,差分电路,正确的接口。
    2) 配置相关的MIPI上层抽象接口。
    3) 配置相关的寄存器操作。
    注:
    1、上层硬件配置,此处硬件工作较多,不做深入研究。
    2、相关寄存器操作主要集中在XXX_cmos.c与XXX_ctrl.c中,具体配置以另外叙述。
    3、Mipi上层抽象接口为海思抽象出来的接口,此层自行配置了相关寄存器,本文主要基于HI3516D芯片进行配置,这也是本次研究的重点。

    2. 如何配置上层抽象接口

    此处只针对于配置上层抽象接口。主要为LVDS配置,MIPI方式配置较为简单,不做叙述。

    1. 查看sensor支持LVDS还是mipi接口。实际操作为查看datasheet,一般前几页会有支持的接口名称,或者搜索LVDS,然后搜索DOP1或者DOM1。LVDS的接口使用名称叫做DOPX/DOMX,而MIPI的接口一般为DMOXP/DMOXN。
    2. 查看硬件配置是否为LVDS接口,实际操作为查看硬件电路图。
    3. 根据硬件电路图,确定LVDS的lane对接方式。实际操作为对接方式,例如OV4689操作
    4. 根据sensor,查看是否支持宽动态,支持宽动态的方式,配置HI_WDR_MODE。
    5. 确定同步方式。实际操作为搜索LVDS,查看是为SOL方式还是SAV方式。
    6. 搜寻同步码。实际操作为搜寻sync_code。

    3. 视频上层抽象接口配置

    海思接口配置,结构体如下所示:

    typedef struct
    {
    /* input mode:MIPI/LVDS/SUBLVDS/HISPI/DC */
    input_mode_t  input_mode;
        union
    {
    /* for MIPI configuration */
            mipi_dev_attr_t     mipi_attr;   
    /* for LVDS/SUBLVDS/HISPI configuration */
            lvds_dev_attr_t     lvds_attr;                
     };
     } combo_dev_attr_t;

    input_mode为输入模式,代码会根据设置的输入,自行载入MIPI配置还是LVDS配置。
    以OV4689 MIPI配置实测:

    OV4689配置MIPI

    OV4689确定使用MIPI设置,从硬件电路可看出,不累述。
    MIPI的配置结构体如下:

    typedef struct
    {
        raw_data_type_e  raw_data_type; /* raw data type: 8/10/12/14 bit */
        short lane_id[MIPI_LANE_NUM];   /* lane_id: -1 - disable */
    }mipi_dev_attr_t;

    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,配置关系如下:

    combo_dev_attr_t MIPI_4lane_SENSOR_OV4689_12BIT_ATTR =
    {
        .input_mode = INPUT_MODE_MIPI, 
        {
            .mipi_attr =   
            {
                RAW_DATA_12BIT,
                {1, 3, 0, 2, -1, -1, -1, -1}     //-1表示不支持      
    //            {1, 0, 2, 3, -1, -1, -1, -1}
            }
        }   
    };

    注:此处有一次事故,由于sensor的mipi接口与海思的mipi接口有改动,所以造成此处接口需要重新配置。

    LVDS配置与imx123学习

    1. 查看imx123datasheet,是否支持LVDS。


    由配置可知,imx123支持LVDS与MIPI,详细配置如下:

    2查看硬件采用的是MIPI还是LVDS


    由配置可知,imx123配置的是LVDS硬件,而MIPI的硬件是没有配置的,imx123硬件的MIPI如下:

    3. 软件配置LVDS配置

    Imx123使用的是LVDS配置,所需工作如下:
    配置关系如下:

    combo_dev_attr_t LVDS_4lane_SENSOR_IMX123_12BIT_3M_ATTR_WDR =
    {
        /* input mode */
        .input_mode = INPUT_MODE_LVDS,
        {
            .lvds_attr = {
                .img_size = {2048, 1536},//图像大小
                HI_WDR_MODE_DOL_2F, //宽动态模式,暂时只支持2F
                LVDS_SYNC_MODE_SAV,//设置起始方式,sav与SOL等方式
                RAW_DATA_12BIT,//图像数据大小
                LVDS_ENDIAN_BIG,//数据传输方式,大端小端方式
                LVDS_ENDIAN_BIG,//同步传输方式,大端小端方式
                .lane_id = {0, 1, 2, 3, 4, 5, 6, 7},//同步通道设置
                .sync_code = {
                       {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}},
                        {{0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0},
                        {0xab0, 0xb60, 0x800, 0x9d0}}                 }
            }
        }
    };

    1)首先设置图像大小

    根据配置寄存器我们可知道,设置的图像为2048x1536。(具体如何配置寄存器,后续可在附件配置里讲)

    2)配置宽动态模式

    我们可知道imx123支持的宽动态为

    而海思对于宽动态支持的力度较小,目前只是支持两帧合一帧,即HI_WDR_MODE_DOL_2F,故选择HI_WDR_MODE_DOL_2F。(几种宽动态模式差异,可在后续讲)

    3)配置起始方式

    首先,在datasheet里搜寻LVDS,在设置页面可知,支持SAV格式,文档如下:

    具体SAV与SOL的区别,有兴趣可以看海思文档

    Hi3516A/Hi3516D 专业型HD IP Camera Soc用户指南.pdf
    HiMPP IPC V2.0 媒体处理 FAQ.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位的同步码为:

    FFFh,000h,000h,AB0h
    FFFh,000h,000h,B60h
    FFFh,000h,000h,800h
    FFFh,000h,000h,9D0h

    其中前三个同步码为相同数字,故每个通道的同步码为 {0xab0, 0xb60, 0x800, 0x9d0}。
    另(拓展)

    • Sav英文名为start audio vide,EAV为end audio video
    • 图像为什么从invaid SAV开始,可以参考下图。
    本文发布于2024年11月14日21:36,已经过了409天,若内容或图片失效,请留言反馈
    文章出处: 求索空间
    文章链接: https://blog.askerlab.com/hisi_mipi_api
    评论列表:
    empty

    暂无评论