前言

产品版本

与本文档相对应的产品版本如下。

产品名称

产品版本

SS928

V100

SS927

V100

说明: 本文以SS928V100描述为例,未有特殊说明,SS927V100与SS928V100内容一致。

读者对象

本文档(本指南)主要适用于以下工程师:

  • 技术支持工程师

  • 软件开发工程师

符号约定

在本文中可能出现下列标志,它们所代表的含义如下。

符号

说明

表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。

表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。

表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

“须知”不涉及人身伤害。

对正文中重点信息的补充说明。

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

修订记录

修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。

文档版本

发布日期

修改说明

00B01

2025-09-15

第1次临时版本发布。

MIPI使用指南

概述

MIPI Rx通过低电压差分信号接收原始视频数据,将接收到的串行差分信号(serial differential signal)转化为DC(Digital Camera)时序后传递给下一级模块VICAP(Video Capture)

MIPI Rx支持MIPI D-PHY、LVDS(Low-Voltage Differential Signal)、HiSPi(High-Speed Serial Pixel Interface)等串行视频信号输入,同时兼容DC视频接口。

重要概念

  • MIPI

    MIPI的全称是Mobile Industry Processor Interface(移动行业处理器接口),本文描述的MIPI接口特指物理层使用D-PHY传输规范,协议层使用CSI-2的通信接口。

  • LVDS

    LVDS的全称是Low Voltage differential Signaling(低压差分信号),通过同步码区分消隐区和有效数据。

  • Lane

    用于连接发送端和接收端的一对高速差分线,即可以是时钟Lane,也可以是数据Lane。

  • 同步码

    MIPI接口使用CSI-2里面的短包进行同步,LVDS使用同步码区分有效数据和消隐区。LVDS有两种同步方式:

    • 使用SOF/EOF表示帧起始和结束,使用SOL/EOL表示行的起始和结束。同步方式如图1所示。

      图 1 SOF/EOF/SOL/EOL同步方式

    • 使用SAV(invalid) EAV(invalid)表示消隐区的无效数据开始和结束,使用SAV(valid) EAV(valid)表示有效像素数据的开始和结束。

      每个同步码由4个字段组成,每个字段的位宽与像素数据位宽保持一致。前3个字段为固定基准码字,第4个字段由sensor厂家确定。

      由于不同的sensor可能会有不同的同步码,所以需要根据sensor配置同步码。同步方式如图2所示。

      图 2 SAV/EAV同步方式

功能描述

MIPI Rx是一个支持多种差分视频输入接口的采集单元,通过combo-PHY接收MIPI/LVDS/sub-LVDS/HiSPi/DC接口的数据,通过不同的功能模式配置,MIPI Rx可以支持多种速度和分辨率的数据传输需求,支持多种外部输入设备。最大支持Lane个数如表1所示。

表 1 最大支持Lane的个数

解决方案

最大支持lane数

SS928V100

MIPI Rx最大支持8Lane MIPI输入或8Lane LVDS输入。

MIPI Rx能同时对接多个sensor,最多对接sensor的数目如表2所示。

表 2 最大对接sensor数目

解决方案

对接sensor数目

SS928V100

4

MIPI Rx最大能同时对接不同数量的sensor,每个sensor需要的Lane也不尽相同。因此用户需要确定MIPI Rx的LANE分布模式。具体的Lane分布模式请参见表3

表 3 MIPI Rx Lane分布模式

解决方案

Mode

DEV0

DEV1

DEV2

DEV3

SS928V100

0

L0~L7

N

N

N

1

L0~L3

N

L4~L7

N

2

L0~L3

N

L4,L6

L5,L7

3

L0,L2

L1,L3

L4,L6

L5,L7

MIPI Rx具体的Lane管脚连接请参见表4

表 4 MIPI Rx Lane管脚关系图

解决方案

LANE

MIPI0

MIPI1

MIPI2

MIPI3

SS928V100

Lane0

-

-

-

Lane1

-

-

Lane2

-

-

-

Lane3

-

-

Lane4

-

-

Lane5

-

Lane6

-

-

Lane7

-

API参考

MIPI Rx提供对接sensor时序的功能。提供ioctl接口,可用的命令如下:

  • OT_MIPI_SET_DEV_ATTR:设置MIPI设备属性。

  • OT_MIPI_SET_HS_MODE:设置MIPI Rx的Lane分布。

  • OT_MIPI_SET_PHY_CMVMODE :设置共模电压模式。

  • OT_MIPI_RESET_SENSOR:复位sensor。

  • OT_MIPI_UNRESET_SENSOR:撤销复位sensor。

  • OT_MIPI_RESET_MIPI:复位MIPI Rx。

  • OT_MIPI_UNRESET_MIPI:撤销复位MIPI Rx。

  • OT_MIPI_ENABLE_MIPI_CLOCK:打开MIPI设备的时钟。

  • OT_MIPI_DISABLE_MIPI_CLOCK:关闭MIPI设备的时钟。

  • OT_MIPI_ENABLE_SENSOR_CLOCK:打开SENSOR的时钟。

  • OT_MIPI_DISABLE_SENSOR_CLOCK:关闭SENSOR的时钟。

  • OT_MIPI_SET_EXT_DATA_TYPE:设置MIPI扩展DATA TYPE的属性。

MIPI Tx提供对接显示屏、级联的功能。提供ioctl接口,可用的命令如下:

  • OT_MIPI_TX_SET_DEV_CFG:设置MIPI Tx设备的属性。

  • OT_MIPI_TX_SET_CMD:设置发送给MIPI Tx设备的命令数据。

  • OT_MIPI_TX_GET_CMD:用于从外围设备读取信息。

  • OT_MIPI_TX_ENABLE:使能MIPI Tx设备。

  • OT_MIPI_TX_DISABLE:禁用MIPI Tx设备。

OT_MIPI_SET_DEV_ATTR

【描述】

设置MIPI Rx设备属性。

【定义】

#define OT_MIPI_SET_DEV_ATTR _IOW(OT_MIPI_IOC_MAGIC, 0x01, combo_dev_attr_t)

【参数】

combo_dev_attr_t类型的指针。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno

【解决方案差异】

无。

【需求】

头文件:ot_mipi_rx.h

【注意】

  • 除了配置OT_MIPI_SET_DEV_ATTR之外,还需要配置以下接口。

  • 设置模式:接口为OT_MIPI_SET_HS_MODE。

  • 打开MIPI时钟:接口为OT_MIPI_ENABLE_MIPI_CLOCK。

  • 复位MIPI:接口为OT_MIPI_RESET_MIPI。

  • 打开SENSOR的时钟:接口为OT_MIPI_ENABLE_SENSOR_CLOCK。

  • 复位SENSOR:接口为OT_MIPI_RESET_SENSOR。

  • 撤销复位MIPI:接口为OT_MIPI_UNRESET_MIPI。

  • 撤销复位SENSOR:接口为OT_MIPI_UNRESET_SENSOR。

  • 推荐的配置流程如下:

    1. 设置模式。

    2. 打开多路MIPI时钟。

    3. 复位多路SENSOR所对接的MIPI Rx。

    4. 打开多路SENSOR所连接的时钟。

    5. 复位对接的所有SENSOR。

    6. 配置MIPI Rx设备属性。

    7. 撤销复位多路SENSOR所对接的MIPI Rx。

    8. 撤销复位对接的所有SENSOR。

  • 推荐的退出流程如下:

    1. 复位多路对接的SENSOR。

    2. 关闭多路SENSOR所连接的时钟。

    3. 复位多路SENSOR所对接的MIPI Rx。

    4. 清除多路SENSOR所对接的MIPI Rx设备的配置。

    5. 关闭多路MIPI时钟。

  • 操作SENSOR复位信号线和时钟信号线会对所连接到该信号线的所有SENSOR都产生效果。

【相关数据类型及接口】

OT_MIPI_SET_HS_MODE

【描述】

设置MIPI Rx的Lane分布模式。

【定义】

#define OT_MIPI_SET_HS_MODE _IOW(OT_MIPI_IOC_MAGIC, 0x0b, lane_divide_mode_t)

【参数】

lane_divide_mode_t类型的指针。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

在接多路sensor输入时,建议在初始时根据硬件连接对整个lane分布进行全局的lane分布模式的设定,在之后的多路sensor采集过程中不能再调用此接口,否则可能对其他sensor采集有影响。

OT_MIPI_SET_PHY_CMVMODE

【描述】

设置共模电压模式。

【定义】

#define OT_MIPI_SET_PHY_CMVMODE _IOW(OT_MIPI_IOC_MAGIC, 0x04, phy_cmv_t)

【参数】

phy_cmv_t类型的指针。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_RESET_SENSOR

【描述】

复位sensor。

【定义】

#define OT_MIPI_RESET_SENSOR _IOW(OT_MIPI_IOC_MAGIC, 0x05, sns_rst_source_t)

【参数】

sns_rst_source_t SENSOR复位信号线编号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_UNRESET_SENSOR

【描述】

撤销复位sensor。

【定义】

#define OT_MIPI_UNRESET_SENSOR _IOW(OT_MIPI_IOC_MAGIC, 0x06, sns_rst_source_t)

【参数】

sns_rst_source_t SENSOR复位信号线编号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_RESET_MIPI

【描述】

复位MIPI_Rx。

【定义】

#define OT_MIPI_RESET_MIPI _IOW(OT_MIPI_IOC_MAGIC, 0x07, combo_dev_t)

【参数】

combo_dev_t设备号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno

【解决方案差异】

解决方案类型

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_UNRESET_MIPI

【描述】

撤销复位MIPI_Rx。

【定义】

#define OT_MIPI_UNRESET_MIPI _IOW(OT_MIPI_IOC_MAGIC, 0x08, combo_dev_t)

【参数】

combo_dev_t设备号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_ENABLE_MIPI_CLOCK

【描述】

打开MIPI设备的时钟。

【定义】

#define OT_MIPI_ENABLE_MIPI_CLOCK _IOW(OT_MIPI_IOC_MAGIC, 0x0c, combo_dev_t)

【参数】

combo_dev_t 设备号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_DISABLE_MIPI_CLOCK

【描述】

关闭MIPI设备的时钟。

【定义】

#define OT_MIPI_DISABLE_MIPI_CLOCK _IOW(OT_MIPI_IOC_MAGIC, 0x0d, combo_dev_t)

【参数】

combo_dev_t 设备号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_ENABLE_SENSOR_CLOCK

【描述】

打开SENSOR的时钟。

【定义】

#define OT_MIPI_ENABLE_SENSOR_CLOCK _IOW(OT_MIPI_IOC_MAGIC, 0x10, sns_clk_source_t)

【参数】

SENSOR的时钟设备源编号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_DISABLE_SENSOR_CLOCK

【描述】

关闭SENSOR的时钟。

【定义】

#define OT_MIPI_DISABLE_SENSOR_CLOCK _IOW(OT_MIPI_IOC_MAGIC, 0x11, sns_clk_source_t)

【参数】

SENSOR的时钟设备源编号。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【解决方案差异】

解决方案

是否支持

SS928V100

支持

【需求】

头文件:ot_mipi_rx.h

【注意】

无。

OT_MIPI_SET_EXT_DATA_TYPE

【描述】

设置MIPI扩展DATA TYPE的属性。

【定义】

#define OT_MIPI_SET_EXT_DATA_TYPE _IOW(OT_MIPI_IOC_MAGIC, 0x12, ext_data_type_t)

【参数】

ext_data_type_t类型的指针。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【需求】

头文件:ot_mipi_rx.h

【注意】

  • 该接口主要用于接收sensor内嵌数据,请注意设备属性中的宽高需要加上内嵌数据的宽高(有效像素宽高+内嵌数据宽高)。

  • 该接口只适用于MIPI接入;LVDS输入配置本接口可能导致异常。

OT_MIPI_TX_SET_DEV_CFG

【描述】

设置MIPI Tx设备的属性。

【定义】

#define OT_MIPI_TX_SET_DEV_CFG _IOW(OT_MIPI_TX_IOC_MAGIC, 0x01, combo_dev_cfg_t)

【参数】

MIPI Tx设备属性。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【需求】

头文件:ot_mipi_tx.h

【注意】

  • 必须在执行OT_MIPI_TX_ENABLE前,即使能前调用此接口。

  • 执行该接口后,MIPI_TX将默认设置为LP(Lower Power)模式,LP时钟设置为:关闭。

OT_MIPI_TX_SET_CMD

【描述】

设置发送给MIPI Tx设备的命令数据。

【定义】

#define OT_MIPI_TX_SET_CMD _IOW(OT_MIPI_TX_IOC_MAGIC, 0x02, cmd_info_t)

【参数】

发送给MIPI Tx设备的命令信息。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【需求】

头文件:ot_mipi_tx.h

【注意】

  • 必须在执行OT_MIPI_TX_ENABLE前,即使能前调用此接口。

  • 必须在执行OT_MIPI_TX_SET_DEV_CFG后,即配置设备后调用此接口。

  • 此接口执行成功与否依赖硬件或lane链路的连通性,连通性异常,则返回失败。

OT_MIPI_TX_GET_CMD

【描述】

用于从外围设备读取信息。

【定义】

#define OT_MIPI_TX_GET_CMD _IOWR(OT_MIPI_TX_IOC_MAGIC, 0x04, get_cmd_info_t)

【参数】

详见get_cmd_info_t结构体说明。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【需求】

头文件:ot_mipi_tx.h

【注意】

  • 在执行OT_MIPI_TX_ENABLE后,调用此接口,存在概率读失败的情况。

  • 必须在执行OT_MIPI_TX_SET_DEV_CFG后,即配置设备后调用此接口。

  • 此接口执行成功与否依赖硬件或lane链路的连通性,连通性异常,则返回失败。

OT_MIPI_TX_ENABLE

【描述】

使能MIPI Tx设备。

【定义】

#define OT_MIPI_TX_ENABLE _IO(OT_MIPI_TX_IOC_MAGIC, 0x03)

【参数】

无。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【需求】

头文件:ot_mipi_tx.h

【注意】

  • 使能前,必须调用OT_MIPI_TX_SET_DEV_CFG对设备进行配置。

  • 此接口调用后MIPI_TX将工作于HS模式(High Speed),LP时钟设置为:打开。

OT_MIPI_TX_DISABLE

【描述】

禁用MIPI Tx设备。

【定义】

#define OT_MIPI_TX_DISABLE _IO(OT_MIPI_TX_IOC_MAGIC, 0x05)

【参数】

无。

【返回值】

返回值

描述

0

成功。

-1

失败,并设置errno。

【需求】

头文件:ot_mipi_tx.h

【注意】

  • 此接口调用后MIPI_TX将工作于LP模式(Lower Power),LP时钟设置为:关闭。

  • 设备禁用后需要使用OT_MIPI_TX_SET_DEV_CFG重新设置设备属性,才可使能设备。

数据类型

MIPI Rx相关数据类型定义如下:

  • OT_MIPI_IOC_MAGIC:MIPI Rx ioctl命令的幻数。

  • combo_dev_t:MIPI Rx设备类型。

  • SNS_MAX_RST_SOURCE_NUM:SENSOR的复位信号线个数。

  • SNS_MAX_CLK_SOURCE_NUM:SENSOR的时钟信号线个数。

  • sns_rst_source_t:SENSOR的复位信号线编号,软件上称为SENSOR的复位源。

  • sns_clk_source_t:SENSOR的时钟信号线编号,软件上称为SENSOR的时钟源。

  • MIPI_RX_MAX_DEV_NUM:MIPI Rx支持的设备数。

  • COMBO_MAX_LANE_NUM:设备最大支持的Lane数量。

  • MAX_LANE_NUM_PER_LINK:MIPI Rx一个link的Lane数。

  • MIPI_LANE_NUM:MIPI Rx的MIPI设备支持的最大Lane数。

  • LVDS_LANE_NUM:LVDS/HiSPi接口支持的Lane数量。

  • WDR_VC_NUM:定义最多支持的Virtual Chnnael数量。

  • SYNC_CODE_NUM:定义LVDS每个Virtual Channel的同步码数量。

  • MAX_EXT_DATA_TYPE_NUM:定义扩展DATE TYPE的数量。

  • lane_divide_mode_t:MIPI Rx的Lane分布。

  • input_mode_t:MIPI Rx输入接口类型。

  • mipi_data_rate_t:MIPI Rx输入速率。

  • img_rect_t:crop属性。

  • data_type_t:传输的数据类型。

  • ext_data_type_t:MIPI 扩展data type属性。

  • mipi_wdr_mode_t:MIPI WDR模式。

  • mipi_dev_attr_t:MIPI设备属性。

  • lvds_wdr_mode_t:LVDS WDR模式。

  • lvds_sync_mode_t:LVDS同步方式。

  • lvds_bit_endian_t:比特位大小端模式。

  • lvds_vsync_type_t:LVDS vsync类型。

  • lvds_vsync_attr_t:LVDS vsync参数。

  • lvds_fid_type_t:Frame identification Id类型。

  • lvds_fid_attr_t:Frame indentification Id配置信息。

  • lvds_dev_attr_t:LVDS/SubLVDS/HiSPi设备属性。

  • phy_cmv_mode_t:PHY共模电压模式。

  • phy_cmv_t:PHY共模电压配置信息。

  • combo_dev_attr_t:combo设备属性。

  • OT_MIPI_TX_IOC_MAGIC:MIPI Tx ioctl命令的幻数。

  • LANE_MAX_NUM:定义MIPI Tx支持的最大Lane数。

  • MIPI_TX_SET_DATA_SIZE:定义MIPI TX长指令支持的最大数据长度。

  • MIPI_TX_GET_DATA_SIZE:定义MIPI TX读指令支持的最大数据长度。

  • ATTRIBUTE:定义编译时对齐字节数。

  • out_mode_t:MIPI Tx输出或外设操作模式。

  • mipi_tx_work_mode_t:MIPI Tx 工作模式。

  • video_mode_t:MIPI Tx视频模式或视频格式,或包序列格式。

  • out_format_t:MIPI Tx输出数据格式。

  • sync_info_t:MIPI Tx设备同步信息。

  • combo_dev_cfg_t:MIPI Tx设备属性。

  • cmd_info_t:发送给MIPI Tx设备的命令信息。

  • get_cmd_info_t:发送给MIPI Tx设备的命令信息。

OT_MIPI_IOC_MAGIC

【说明】

MIPI Rx ioctl命令的幻数。

【定义】

#define OT_MIPI_IOC_MAGIC   'm'

【成员】

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

combo_dev_t

【说明】

MIPI Rx设备类型。

【定义】

typedef unsigned int combo_dev_t;

【解决方案差异】

解决方案

MIPI设备范围

SS928V100

[0, MIPI_RX_MAX_DEV_NUM)

【注意事项】

无。

【相关数据类型及接口】

SNS_MAX_RST_SOURCE_NUM

【说明】

SENSOR的复位信号线个数。

【定义】

#define SNS_MAX_RST_SOURCE_NUM    4

【解决方案差异】

解决方案

SENSOR复位信号线数目

SS928V100

4

【注意事项】

无。

【相关数据类型及接口】

SNS_MAX_CLK_SOURCE_NUM

【说明】

SENSOR的时钟信号线个数。

【定义】

#define SNS_MAX_CLK_SOURCE_NUM    4

【解决方案差异】

解决方案

SENSOR时钟信号线数目

SS928V100

4

【注意事项】

【相关数据类型及接口】

sns_rst_source_t

【说明】

SENSOR的复位信号线编号,软件上称为SENSOR的复位源。

【定义】

typedef unsigned int sns_rst_source_t;

【解决方案差异】

解决方案

SENSOR复位设备范围

SS928V100

[0, SNS_MAX_RST_SOURCE_NUM)

【注意事项】

每条SENSOR复位信号线可以接两个SENSOR,用户需要根据板子的连线确认SENSOR复位信号线编号。不同的芯片的SENSOR复位信号线数目请参考取值范围。

【相关数据类型及接口】

无。

sns_clk_source_t

【说明】

SENSOR的时钟信号线编号,软件上称为SENSOR的时钟源。

【定义】

typedef unsigned int sns_clk_source_t;

【解决方案差异】

解决方案

SENSOR时钟设备范围

SS928V100

[0, SNS_MAX_CLK_SOURCE_NUM)

【注意事项】

每条SENSOR时钟信号线可以接两个SENSOR,用户需要根据板子的连线确认SENSOR时钟信号线编号。不同的芯片的SENSOR复位信号线数目请参考取值范围。

【相关数据类型及接口】

MIPI_RX_MAX_DEV_NUM

【说明】

MIPI Rx支持的设备数。

【定义】

#define MIPI_RX_MAX_DEV_NUM        4

【解决方案差异】

解决方案

MIPI Rx支持的设备数

SS928V100

4

【注意事项】

SS928V100支持多个MIPI Rx设备同时使用。

【相关数据类型及接口】

COMBO_MAX_LANE_NUM

【说明】

MIPI Rx的Lane总数目。

【定义】

#define COMBO_MAX_LANE_NUM      8

【解决方案差异】

【注意事项】

【相关数据类型及接口】

MIPI_LANE_NUM

【说明】

MIPI Rx的MIPI设备支持的最大Lane数。

【定义】

#define MIPI_LANE_NUM           8

【解决方案差异】

【注意事项】

【相关数据类型及接口】

LVDS_LANE_NUM

【说明】

MIPI Rx的LVDS设备支持的最大Lane数。

【定义】

#define LVDS_LANE_NUM           8

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

WDR_VC_NUM

【说明】

定义最多支持的Virtual Chnnael数量。

【定义】

#define WDR_VC_NUM          4

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

SYNC_CODE_NUM

【说明】

定义LVDS每个Virtual Channel的同步码数量

【定义】

#define SYNC_CODE_NUM           4

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

MAX_EXT_DATA_TYPE_NUM

【说明】

定义扩展DATE TYPE的数量。

【定义】

#define MAX_EXT_DATA_TYPE_NUM   3

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

ext_data_type_t

lane_divide_mode_t

【说明】

MIPI Rx的LANE分布。

【定义】

typedef enum {
    LANE_DIVIDE_MODE_0 = 0,  /* 8lane */
    LANE_DIVIDE_MODE_1 = 1,  /* 4lane + 4lane */
    LANE_DIVIDE_MODE_2 = 2,  /* 4lane + 2lane +2lane */
    LANE_DIVIDE_MODE_3 = 3,  /* 2lane + 2lane + 2lane + 2lane */
    LANE_DIVIDE_MODE_BUTT
} lane_divide_mode_t;

【解决方案差异】

解决方案

MIPI Rx的LANE分布

SS928V100

[LANE_DIVIDE_MODE_0, LANE_DIVIDE_MODE_3]

【注意事项】

只有MIPI需要设置LANE的分布。

【相关数据类型及接口】

OT_MIPI_SET_HS_MODE

input_mode_t

【说明】

MIPI Rx输入接口类型

【定义】

typedef enum {
    INPUT_MODE_MIPI = 0x0,                        /* mipi */
    INPUT_MODE_SUBLVDS = 0x1,                    /* SUB_LVDS */
    INPUT_MODE_LVDS = 0x2,                        /* LVDS */
    INPUT_MODE_HISPI = 0x3,                        /* HISPI */
    INPUT_MODE_BUTT
} input_mode_t;

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

mipi_data_rate_t

【说明】

MIPI Rx输入速率。

【定义】

typedef enum 
{
    MIPI_DATA_RATE_X1 = 0,         /* output 1 pixel per clock */
    MIPI_DATA_RATE_X2 = 1,         /* output 2 pixel per clock */
    MIPI_DATA_RATE_BUTT
} mipi_data_rate_t;

【解决方案差异】

解决方案

是否支持MIPI_DATA_RATE_X2

SS928V100

MIPI的所有设备都支持。

【注意事项】

无。

【相关数据类型及接口】

无。

img_rect_t

【说明】

Mipi crop属性。

【定义】

typedef struct
{
    int x;
    int y;
    unsigned int width;
    unsigned int height;
} img_rect_t;

【成员】

成员名称

描述

x

Crop 起始位置x。

y

Crop 起始位置y。

width

Crop 宽度,单位:像素。

height

Crop 高度单位:像素。

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

data_type_t

【说明】

传输的数据类型。

【定义】

typedef enum
{
    DATA_TYPE_RAW_8BIT = 0,
    DATA_TYPE_RAW_10BIT,
    DATA_TYPE_RAW_12BIT,
    DATA_TYPE_RAW_14BIT,
    DATA_TYPE_RAW_16BIT,
    DATA_TYPE_YUV420_8BIT_NORMAL,
    DATA_TYPE_YUV420_8BIT_LEGACY,
    DATA_TYPE_YUV422_8BIT,
    DATA_TYPE_YUV422_PACKED,
    DATA_TYPE_BUTT
} data_type_t;

【成员】

成员名称

描述

DATA_TYPE_RAW_8BIT

8BIT的RAW数据。

DATA_TYPE_RAW_10BIT

10BIT的RAW数据。

DATA_TYPE_RAW_12BIT

12BIT的RAW数据。

DATA_TYPE_RAW_14BIT

14BIT的RAW数据。

DATA_TYPE_RAW_16BIT

16BIT的RAW数据。

DATA_TYPE_YUV420_8BIT_NORMAL

8BIT的YUV420数据,NORMAL模式。

DATA_TYPE_YUV420_8BIT_LEGACY

8BIT的YUV420数据,LEGACY模式。

DATA_TYPE_YUV422_8BIT

8BIT的YUV422数据。

DATA_TYPE_YUV422_PACKED

YUV422数据在MIPI按16bit raw打包接收。

【解决方案差异】

解决方案

支持的数据类型

SS928V100

全部支持

【注意事项】

无。

【相关数据类型及接口】

无。

ext_data_type_t

【说明】

MIPI 扩展DATE TYPE属性。

【定义】

typedef struct {
    combo_dev_t devno;
    unsigned int num;
    unsigned int ext_data_bit_width[MAX_EXT_DATA_TYPE_NUM];
    unsigned int ext_data_type[MAX_EXT_DATA_TYPE_NUM];
} ext_data_type_t;

【成员】

成员名称

描述

devno

MIPI Rx设备号

num

支持的扩展DATA TYPE数量

ext_data_bit_width

对应扩展DATA TYPE输入数据的位宽

ext_data_type

对应扩展DATA TYPE的值

【解决方案差异】

【注意事项】

【相关数据类型及接口】

OT_MIPI_SET_EXT_DATA_TYPE

mipi_wdr_mode_t

【说明】

MIPI WDR模式。

【定义】

typedef enum
{
    OT_MIPI_WDR_MODE_NONE = 0x0,
    OT_MIPI_WDR_MODE_VC   = 0x1,    /* Virtual Channel */
    OT_MIPI_WDR_MODE_DT   = 0x2,    /* Data Type */
    OT_MIPI_WDR_MODE_DOL  = 0x3,    /* DOL Mode */
    OT_MIPI_WDR_MODE_BUTT
} mipi_wdr_mode_t;

【成员】

成员名称

描述

OT_MIPI_WDR_MODE_NONE

线性模式

OT_MIPI_WDR_MODE_VC

使用Packet header中的Virtual Channel区分长短曝光帧

OT_MIPI_WDR_MODE_DT

使用Packet header中的自定义Data type区分长短曝光帧

OT_MIPI_WDR_MODE_DOL

表示DOL模式WDR,使用Packet header之后的一个pixel识别长短曝光帧

【解决方案差异】

【注意事项】

【相关数据类型及接口】

mipi_dev_attr_t

【说明】

mipi设备属性。

【定义】

typedef struct
{
    data_type_t           input_data_type;
    mipi_wdr_mode_t       wdr_mode;
    short                   lane_id[MIPI_LANE_NUM];
    union
    {
    short data_type[WDR_VC_NUM];
    };
} mipi_dev_attr_t;

【成员】

成员名称

描述

input_data_type

传输的数据类型。

lane_id

发送端(sensor)和接收端(MIPI Rx) Lane的对应关系

未使用的Lane设置为-1。

wdr_mode

MIPI WDR模式

data_type

当wdr_mode为OT_MIPI_WDR_MODE_DT需要设置data_type,表示不同曝光长度数据对应的Data Type。

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

lvds_wdr_mode_t

【说明】

LVDS WDR模式。

【定义】

typedef enum
{
    OT_WDR_MODE_NONE  = 0x0,
    OT_WDR_MODE_2F      = 0x1,
    OT_WDR_MODE_3F      = 0x2,
    OT_WDR_MODE_4F      = 0x3,
    OT_WDR_MODE_DOL_2F  = 0x4,
    OT_WDR_MODE_DOL_3F  = 0x5,
    OT_WDR_MODE_DOL_4F  = 0x6,
    OT_WDR_MODE_BUTT
} lvds_wdr_mode_t;

【成员】

成员名称

描述

OT_WDR_MODE_NONE

线性模式

OT_WDR_MODE_2F

2合一WDR

OT_WDR_MODE_3F

3合一WDR

OT_WDR_MODE_4F

4合一WDR

OT_WDR_MODE_DOL_2F

DOL模式2合一WDR

OT_WDR_MODE_DOL_3F

DOL模式3合一WDR

OT_WDR_MODE_DOL_4F

DOL模式4合一WDR

【解决方案差异】

解决方案

WDR模式

SS928V100

都支持

【注意事项】

  • DOL WDR模式需要配置为OT_WDR_MODE_DOL_2F/ OT_WDR_MODE_DOL_3F/ OT_WDR_MODE_DOL_4F。

  • Built-in WDR模式和帧合成WDR模式都需要配置为OT_WDR_MODE_NONE。

【相关数据类型及接口】

无。

lvds_sync_mode_t

【说明】

LVDS同步方式。

【定义】

typedef enum
{
    LVDS_SYNC_MODE_SOF = 0,         /* sensor SOL, EOL, SOF, EOF */
    LVDS_SYNC_MODE_SAV,             /* SAV, EAV */
    LVDS_SYNC_MODE_BUTT
} lvds_sync_mode_t;

表 1 LVDS同步方式

sync_mode

同步方式

LVDS_SYNC_MODE_SOF

SOF、EOF、SOL、EOL

请参考图1

LVDS_SYNC_MODE_SAV

invalid SAV、invalid EAV、valid SAV、valid EAV

请参考图2

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

lvds_bit_endian_t

【说明】

比特位大小端模式。

【定义】

typedef enum
{
    LVDS_ENDIAN_LITTLE  = 0x0,
    LVDS_ENDIAN_BIG     = 0x1,
    LVDS_ENDIAN_BUTT
} lvds_bit_endian_t;

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

lvds_vsync_type_t

【说明】

LVDS vsync类型。

【定义】

typedef enum
{
    LVDS_VSYNC_NORMAL   = 0x00,
    LVDS_VSYNC_SHARE     = 0x01,
    LVDS_VSYNC_HCONNECT= 0x02,
    LVDS_VSYNC_BUTT
} lvds_vsync_type_t;

【成员】

成员名称

描述

LVDS_VSYNC_NORMAL

长短曝光帧有独立的SOF-EOF、SOL-EOL或者invalid SAV-invalid EAV, valid SAV-valid EAV。

LVDS_VSYNC_SHARE

长短曝光帧共用一对SOF-EOF标识,短曝光的起始几行用固定值填充。

LVDS_VSYNC_HCONNECT

长短曝光帧共用一对SAV-EAV标识长短曝光帧之间是固定周期的消隐。

  • LVDS_VSYNC_SHARE同步方式:

SOF

Long Exposure

EOL

Horizontal Blanking

SOL

Padding

EOL

Horizontal Blanking

SOL

Short Exposure

Padding

EOF

SOV

V.BLK

EOV

-

SOV

V.BLK

EOV

-

  • LVDS_VSYNC_HCONNECT同步方式:

SAV

Long Exposure

frame

Horizontal Blanking(fix period)

V.BLK

Horizontal Blanking(fix period)

V.BLK

EAV

Horizontal Blanking

Short ExposureFrame1

Short Exposure Frame2

V.BLK

V.BLK

V.BLK

-

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

lvds_vsync_attr_t

lvds_vsync_attr_t

【说明】

LVDS vsync参数

【定义】

typedef struct
{
    lvds_vsync_type_t sync_type;
    unsigned short hblank1;
    unsigned short hblank2;
} lvds_vsync_attr_t;

【解决方案差异】

无。

【注意事项】

当sync_type为LVDS_VSYNC_HCONNECT时,需要配置hblank1和hblank2,表示Hconnect的消隐区长度。

【相关数据类型及接口】

lvds_vsync_type_t

lvds_fid_type_t

【说明】

Frame identification Id类型

【定义】

typedef enum
{
    LVDS_FID_NONE    = 0x00,
    LVDS_FID_IN_SAV   = 0x01,    /* frame identification id in SAV 4th */
    LVDS_FID_IN_DATA  = 0x02,    /* frame identification id in first data */
    LVDS_FID_BUTT
} lvds_fid_type_t;

【成员】

成员名称

描述

LVDS_FID_NONE

不使用frame identification id。

LVDS_FID_IN_SAV

FID插入在SAV第4个字段中,DOL 4个字段的同步码需要将fid_type配置为LVDS_FID_IN_SAV。

LVDS_FID_IN_DATA

FID作为Frame information column插入在同步码之后的第一个像素之前,DOL 5个字段的同步码需要将fid_type配置为LVDS_FID_IN_DATA

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

lvds_fid_attr_t

【说明】

Frame indentification Id配置信息。

【定义】

typedef struct
{
    lvds_fid_type_t fid_type;
    unsigned char output_fil;
} lvds_fid_attr_t;

【成员】

成员名称

描述

fid_type

LVDS DOL模式下的Frame identification Id类型

output_fil

DOL模式中的Frame information line紧接在V-Blanking之后输出,Frame ID是Frame information line中的第一个像素值。

Frame information line中并不包含有效的视频数据:

  • 如果output_fil设置为1,Frame information line会输出到后端设备。
  • 如果output_fil设置为0,MIPI Rx将丢弃这一行数据。

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

lvds_fid_type_t

lvds_dev_attr_t

【说明】

LVDS/SubLVDS/HiSPi设备属性。

【定义】

typedef struct
{
    data_type_t         input_data_type;
    lvds_wdr_mode_t           wdr_mode;
    lvds_sync_mode_t    sync_mode;
    lvds_vsync_attr_t   vsync_attr;
    lvds_fid_attr_t     fid_attr;
    lvds_bit_endian_t   data_endian;
    lvds_bit_endian_t   sync_code_endian;
    short                 lane_id[LVDS_LANE_NUM];
    unsigned short     sync_code[LVDS_LANE_NUM][WDR_VC_NUM][SYNC_CODE_NUM];
} lvds_dev_attr_t;

【成员】

成员名称

描述

input_data_type

传输的数据类型。

wdr_mode

WDR模式。

sync_mode

LVDS同步模式。

vsync_attr

vsync类型,当wdr_mod为DOL模式并且sync_mode为LVDS_SYNC_MODE_SAV时,需要配置vsync的类型。

fid_attr

frame identification类型,当wdr_mode为DOL模式,并且sync_mode为LVDS_SYNC_MODE_SAV时,需要配置。

data_endian

数据大小端模式。

sync_code_endian

同步码大小端模式。

lane_id

发送端(sensor)和接收端(MIPI Rx) lane的对应关系

未使用的lane设置为-1

lane id的配置方式请参考“MIPI RX Lane id如何配置”。

sync_code

每个Virtual Channel有4个同步码,根据同步模式不同,分别表示SOF/EOF/ SOL/EOL的同步码或者invalid SAV/invalid EAV/ valid SAV/valid EAV的同步码。

【解决方案差异】

无。

【注意事项】

使用该结构体,LVDS的LANE同步码同步到达。

【相关数据类型及接口】

phy_cmv_mode_t

【说明】

PHY共模电压模式。

【定义】

typedef enum
{
    PHY_CMV_GE1200MV    = 0x00,
    PHY_CMV_LT1200MV    = 0x01,
    PHY_CMV_BUTT
} phy_cmv_mode_t;

【成员】

成员名称

描述

PHY_CMV_GE1200MV

PHY共模电压大于等于1200mv。

PHY_CMV_LT1200MV

PHY共模电压小于1200 mv。

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

无。

phy_cmv_t

【说明】

PHY 共模电压配置信息。

【定义】

typedef struct
{
    combo_dev_t       devno;
    phy_cmv_mode_t  cmv_mode;
} phy_cmv_t;

【成员】

成员名称

描述

devno

MIPI Rx设备号。

cmv_mode

PHY功能电压模式。

【解决方案差异】

无。

【注意事项】

无。

【相关数据类型及接口】

combo_dev_attr_t

【说明】

combo设备属性,由于MIPI Rx能够对接CSI-2、LVDS、HiSPi等时序,所以将MIPI Rx称为combo设备。

【定义】

typedef struct
{
    combo_dev_t              devno;
    input_mode_t          input_mode;
    mipi_data_rate_t     data_rate;
    img_rect_t            img_rect;
    union
    {
        mipi_dev_attr_t     mipi_attr;
        lvds_dev_attr_t     lvds_attr;
    };
} combo_dev_attr_t;

【成员】

成员名称

描述

devno

MIPI Rx设备号

input_mode

输入接口类型。

data_rate

接口传输速率。

img_rect

图像crop区域。

mipi_attr

如果input_mode配置为INPUT_MODE_MIPI,则必须配置mipi_attr。

lvds_attr

如果input_mode配置为INPUT_MODE_SUBLVDS/ INPUT_MODE_LVDS/ INPUT_MODE_HISPI,则必须配置lvds_attr

【解决方案差异】

解决方案

本结构体

SS928V100

支持

【注意事项】

无。

【相关数据类型及接口】

无。

OT_MIPI_TX_IOC_MAGIC

【说明】

MIPI Tx ioctl命令的幻数。

【定义】

#define OT_MIPI_TX_IOC_MAGIC   't'

【成员】

【注意事项】

【相关数据类型及接口】

LANE_MAX_NUM

【说明】

定义MIPI TX支持的最大Lane数。

【定义】

#define LANE_MAX_NUM           4

【注意事项】

无。

【相关数据类型及接口】

无。

MIPI_TX_SET_DATA_SIZE

【说明】

定义MIPI TX长指令支持的最大数据长度。

【定义】

#define MIPI_TX_SET_DATA_SIZE 800

【注意事项】

无。

【相关数据类型及接口】

无。

MIPI_TX_GET_DATA_SIZE

【说明】

定义MIPI TX读指令支持的最大数据长度。

【定义】

#define MIPI_TX_GET_DATA_SIZE 160

【注意事项】

无。

【相关数据类型及接口】

无。

ATTRIBUTE

【说明】

定义编译时对齐字节数。

【定义】

#define OT_ALIGN_NUM          8
#define ATTRIBUTE             __attribute__((aligned(OT_ALIGN_NUM)))

【注意事项】

无。

【相关数据类型及接口】

无。

out_mode_t

【说明】

MIPI TX输出或外设操作模式。

【定义】

typedef enum {
    OUT_MODE_CSI            = 0x0,
    OUT_MODE_DSI_VIDEO      = 0x1,
    OUT_MODE_DSI_CMD        = 0x2,
    OUT_MODE_BUTT
} out_mode_t;

【注意事项】

无。

【相关数据类型及接口】

无。

mipi_tx_work_mode_t

【说明】

MIPI Tx 工作模式

【定义】

typedef enum {
    MIPI_TX_WORK_MODE_LP     = 0x0,
    MIPI_TX_WORK_MODE_HS     = 0x1,
    MIPI_TX_WORK_MODE_BUTT
} mipi_tx_work_mode_t;

【注意事项】

无。

【相关数据类型及接口】

无。

video_mode_t

【说明】

MIPI TX视频模式或视频格式,或包序列格式。

【定义】

typedef enum {
    BURST_MODE                      = 0x0,
    NON_BURST_MODE_SYNC_PULSES      = 0x1,
    NON_BURST_MODE_SYNC_EVENTS      = 0x2,
 
    VIDEO_DATA_MODE_BUTT
} video_mode_t;

【注意事项】

无。

【相关数据类型及接口】

无。

out_format_t

【说明】

MIPI TX输出数据格式。

【定义】

typedef enum {
    OUT_FORMAT_RGB_16BIT          = 0x0,
    OUT_FORMAT_RGB_18BIT          = 0x1,
    OUT_FORMAT_RGB_18BIT_LOOSELY  = 0x2,
    OUT_FORMAT_RGB_24BIT          = 0x3,
    OUT_FORMAT_YUV420_12BIT       = 0x4,
    OUT_FORMAT_YUV422_16BIT       = 0x5,
 
    OUT_FORMAT_YUV420_8BIT_NORMAL = 0x6,
    OUT_FORMAT_YUV420_8BIT_LEGACY = 0x7,
    OUT_FORMAT_YUV422_8BIT        = 0x8,
    OUT_FORMAT_RGB_888            = 0x9,
    OUT_FORMAT_RAW_8BIT           = 0xa,
    OUT_FORMAT_RAW_10BIT          = 0xb,
    OUT_FORMAT_RAW_12BIT          = 0xc,
    OUT_FORMAT_RAW_14BIT          = 0xd,
    OUT_FORMAT_RAW_16BIT          = 0xe,
    OUT_FORMAT_BUTT
} out_format_t;

【注意事项】

  • DSI模式(OUT_MODE_DSI_CMD,或OUT_MODE_DSI_VIDEO)支持数据格式范围:[OUT_FORMAT_RGB_16BIT, OUT_FORMAT_YUV422_16BIT]。

  • CSI模式(OUT_MODE_CSI)支持数据格式范围:[OUT_FORMAT_YUV420_8BIT_NORMAL, OUT_FORMAT_RAW_16BIT]。

【相关数据类型及接口】

无。

sync_info_t

【说明】

MIPI TX设备同步信息。

【定义】

typedef struct {
    unsigned short  hsa_pixels;
    unsigned short  hbp_pixels;
    unsigned short  hact_pixels;
    unsigned short  hfp_pixels;
 
    unsigned short  vsa_lines;
    unsigned short  vbp_lines;
    unsigned short  vact_lines;
    unsigned short  vfp_lines;
} sync_info_t;

【成员】

成员名称

描述

hsa_pixels

水平同步脉冲区像素个数,取值范围:[1, 65535]。

hbp_pixels

水平后消隐区像素个数,取值范围:[1, 65535]

hact_pixels

水平有效区像素个数,取值范围:[1, 4096]

hfp_pixels

水平前消隐区像素个数,取值范围:[1, 65535]

vsa_lines

垂直同步脉冲区行数,取值范围:[1, 256]

vbp_lines

垂直后消隐区行数,取值范围:[1, 256]

vact_lines

垂直有效区行数,取值范围:[100, 4096]

vfp_lines

垂直前隐区行数,取值范围:[1, 256]

【注意事项】

无。

【相关数据类型及接口】

无。

combo_dev_cfg_t

【说明】

MIPI TX设备属性。

【定义】

typedef struct {
    unsigned int        devno;                   /* device number */
    short               lane_id[LANE_MAX_NUM];   /* lane_id: -1 - disable */
    out_mode_t          out_mode;                /* output mode: CSI/DSI_VIDEO/DSI_CMD */
    video_mode_t        video_mode;
    out_format_t        out_format;
    sync_info_t         sync_info;
    unsigned int        phy_data_rate;           /* Mbps */
    unsigned int        pixel_clk;               /* KHz */
} combo_dev_cfg_t;

【成员】

成员名称

描述

devno

MIPI Tx设备号,仅支持设备0。

lane_id

lane个数和模式配置,取决于lane_id中非-1值的个数,仅四种模式可选,且lane个数、lane号码、lane顺序可调整:

配置方法参考本章MIPI RX Lane id如何配置小节。

1 lane模式:lane0

2 lane模式:lane0,lane1

3 lane模式:lane0,lane1,lane2

4 lane模式:lane0,lane1,lane2,lane3

建议的配置方法

1 lane模式配置成:lane_id[4] = {0, -1, -1, -1}

2 lane模式配置成:lane_id[4] = {0, 1, -1, -1}

3 lane模式,配置成:lane_id[4] = {0, 1, 2, -1}

4 lane模式,配置成:lane_id[4] = {0, 1, 2, 3}

out_mode

MIPI Tx输出模式。

video_mode

MIPI Tx视频模式。

out_format

MIPI Tx输出格式。

sync_info

MIPI Tx设备的同步信息。

phy_data_rate

MIPI Tx输出速率,输出范围请参考芯片手册“MIPI Tx章节,MIPI Tx高速模式每个通道(lane)的速率范围的描述,单位是Mbps。

取值范围:[80, 2500]

pixel_clk

像素时钟,单位为KHz。

取值范围:[3333, 1250000]

【注意事项】

无。

【相关数据类型及接口】

无。

cmd_info_t

【说明】

发送给MIPI TX设备的命令信息。

【定义】

typedef struct {
    unsigned int        devno;
    mipi_tx_work_mode_t work_mode;
    unsigned char       lp_clk_en;
    unsigned short      data_type;
    unsigned short      cmd_size;
    const unsigned char ATTRIBUTE *cmd;
} cmd_info_t;

【成员】

成员名称

描述

devno

MIPI TX设备号,仅支持设备0。

work_mode

工作模式:低功耗模式,高速模式。

lp_clk_en

低功耗模式时钟开关。

data_type

命令数据类型。

cmd_size

短指令的数据,范围:[0, 0xFFFF]。

长指令的数据长度,范围:(0, MIPI_TX_SET_DATA_SIZE],单位:字节。

:cmd置为NULL:cmd_size表示短指令的数据低八位对应数据1、高八位对应数据2

cmd置为非NULL:cmd_size表示长指令的数据长度。

cmd

长指令数据指针。

  • 设置短指令时,需置为NULL;
  • 设置长指令时,需置为非NULL。

【注意事项】

cmd成员为NULL时,将不对cmd_size成员做取值范围检查。

【相关数据类型及接口】

无。

get_cmd_info_t

【说明】

发送给MIPI TX设备的命令信息。

【定义】

typedef struct {
    unsigned int        devno;
    mipi_tx_work_mode_t work_mode;
    unsigned char       lp_clk_en;
    unsigned short      data_type;
    unsigned short      data_param;
    unsigned short      get_data_size;
    unsigned char       ATTRIBUTE *get_data;
} get_cmd_info_t;

【成员】

成员名称

描述

devno

MIPI TX设备号,仅支持设备0。

work_mode

工作模式:低功耗模式,高速模式。

lp_clk_en

低功耗模式时钟开关。

data_type

命令数据类型。

data_param

数据参数,低八比特为第一个参数,高八比特为第二个参数、不用时填0。

get_data_size

预期获取的数据字节数,范围:(0, MIPI_TX_GET_DATA_SIZE]。

get_data

获取到的数据存放地址指针,需要用户分配,不能设置为NULL。

【注意事项】

无。

【相关数据类型及接口】

无。

MIPI TX模块参数

g_smooth

g_smooth模块参数用于实现平滑过渡,使用方法如下:

在Linux操作系统下,加载MIPI TX驱动的时候可以控制是否复位MIPI TX的逻辑。

  • insmod ot_mipi_tx.ko smooth=1:加载ko时不进行逻辑复位。

  • insmod ot_mipi_tx.ko smooth=0:加载ko时进行逻辑复位。

Proc信息

MIPI_RX Proc信息

MIPI_RX正常工作状态下proc信息中宽高应该是稳定不变且和sensor输出时序的宽高匹配,并且MIPI_RX各种错误中断计数为0。如果错误中断计数不为0,请检查MIPI_RX相关属性是否配置正确。

【调试信息】

[MIPI_RX] Version: [SS928V100V1.0.0.0 B010 Release], Build Time[Jan 25 2022, 11:06:37]
-----mipi lane divide mdoe---------------------------------------------------------------------------------
  mode         lane divide
     0                   8
 
-----mipi dev attr--------------------------------------------------------------------------------------------
   devno  work_mode  data_rate           data_type  wdr_mode   img_x   img_y   img_w   img_h
       0       mipi         X1               raw12      none       0       0    3840    2160
 
-----mipi lane info-------------------------------------------------------------------------------------------
   devno                 lane_id
       0         0,  1,  2,  3, -1, -1, -1, -1
 
-----mipi phy data info------------------------------------------------------
  phy_id        lane_id           phy_data       mipi_data       lvds_data          freq
       0       0, 1, 2, 3    0x00,0x00,0x00,0x00    0x00,0x00,0x00,0x00    0x00,0x00,0x00,0x00       n/a
       1       4, 5, 6, 7    0x00,0x00,0x00,0x00    0x00,0x00,0x00,0x00    0x00,0x00,0x00,0x00       n/a
 
-----mipi detect info----------------------------------------------------
 devno vc   width  height
     0  0    1920    1080
     0  1       0       0
     0  2       0       0
     0  3       0       0
 
-----lvds detect info----------------------------------------------------
 devno vc   width  height
     0  0    3840    2160
     0  1       0       0
     0  2       0       0
     0  3       0       0
 
-----lvds lane detect info----------------------------------------------------
 devno  lane   width  height
     0     2     960    2179
     0     4     960    2179
     0     5     960    2179
     0     7     960    2179
 
-----phy cil err int info---------------------------------------------
  phy_id clk2_tmout clk_tmout lane0_tmout lane1_tmout lane2_tmout lane3_tmout clk2_esc clk_esc lane0_esc lane1_esc lane2_esc lane3_esc
       0          0         0           0           0           0           0        0       0         0         0         0         0
       1          0         0           0           0           0           0        0       0         0         0         0         0
 
-----mipi error int info1-----------------------------------------------------------
   devno  ecc2  vc0_crc  vc1_crc  vc2_crc  vc3_crc  vc0_ecc_corrct  vc1_ecc_corrct  vc2_ecc_corrct  vc3_ecc_corrct
0     0        0        0        0        0               0               0               0               0
 
-----mipi error int info2-----------------------------------------------------------
   devno  vc0_frmnum  vc1_frmnum  vc2_frmnum  vc3_frmnum  vc0_frmmmatch  vc1_frmmmatch  vc2_frmmmatch  vc3_frmmmatch
       0           0           0           0           0              0              0              0              0
 
-----mipi error int info3-----------------------------------------------------------
   devno  data_fifo_rderr  cmd_fifo_rderr  vsync  cmd_fifo_wrerr  data_fifo_wrerr
       0                0               0      0               0                0
 
-----lvds error int info1-----------------------------------------------------------
   devno  vsync  cmd_rderr  cmd_wrerr  pop_err  stat_err
       0      0          0          0        0         0
 
-----lvds error int info2-----------------------------------------------------------
   devno  link0_wrerr  link1_wrerr  link2_wrerr  link0_rderr  link1_rderr  link2_rderr
       0            0            0            0            0            0            0
 
-----lvds error int info3-----------------------------------------------------------
   devno  lane0_err  lane1_err  lane2_err  lane3_err  lane4_err  lane5_err  lane6_err  lane7_err
       0          0          0          0          0          0          0          0          0
 
-----align error int info--------------------------------------
   devno  fifo_fullerr  lane0_err  lane1_err  lane2_err  lane3_err  lane4_err  lane5_err  lane6_err  lane7_err
       0             0          0          0          0          0          0          0          0          0

【调试信息分析】

  • MIPI_Rx通过Phy接收sensor的差分数据,Phy Controller检测到同步头后,将每条lane上的数据对齐;

  • Pixel Controller解析同步信息并按照raw data的位宽将lane上面的数据合并为Pixel数据;Output模式将Pixel数据发送给后级模块。

  • Phy PhyController PixelController由sensor的pixel clk提供时钟,output模块的时钟为称为随路时钟,与后级模块的工作时钟相同。MIPI_Rx的crop功能在Pixel Controller的末端实现,所以Crop后可以降低需要的随路时钟。

图 1 MIPI数据流

【参数说明】

参数

描述

mipi lane divide mdoe

mode

MIPI Rx的lane分布模式

lane divide

MIPI_Rx详细的LANE分布。

mipi dev attr

devno

MIPI设备号

work_mode

MIPI设备工作模式:LVDS/MIPI等模式

data_rate

MIPI Rx的速率。

data_type

数据类型:RAW8 / RAW10/ RAW12/ RAW14/ RAW16 bit等类型

wdr_mode

WDR模式:

  • None:非WDR模式
  • 2To1:2合1 WDR
  • 3To1:3合1 WDR
  • 4To1:4合1 WDR
  • DOL2To1:DOL2合1WDR
  • DOL3To1:DOL3合1WDR
  • DOL4To1:DOL4合1WDR

img_x

Crop图像起始X

img_y

Crop图像起始Y

img_w

Crop图像宽度

img_h

Crop图像高度

mipi lane info

devno

MIPI设备号

lane_id

Lane ID

mipi phy data info

phy_id

PHY ID序号

lane_id

对应的Lane Id

phy_data

PHY对应的4条Lane接收到的实时数据

mipi_data

PHY对应的4条Lane检测到MIPI帧的数据包头数据

lvds_data

PHY对应的4条Lane检测到LVDS帧同步信号后的实时数据

freq

HS时钟频率测量值

mipi detect info (仅MIPI模式下可见)

devno

MIPI_Rx设备号

vc

Virtual Channel

width

MIPI控制器检测到的图像总宽度

height

MIPI控制器检测到的图像总高度

lvds detect info (仅LVDS模式下可见)

devno

MIPI_Rx设备号

vc

Virtual Channel

width

MIPI控制器检测到的图像总宽度

height

MIPI控制器检测到的图像总高度

lvds lane detect info (仅LVDS模式下可见)

devno

MIPI_Rx设备号

lane

Lane ID

width

该lane上检测到的宽度。

height

该lane上检测到的高度。

phy cil err int info

phy_id

PHY ID

clk2_tmout

Clock2 Lane 从LP切换到HS 超时

clk_tmout

Clock1 Lane 从LP切换到HS 超时

lane0_tmout

DataLane 0从LP切换到HS超时

lane1_tmout

Data Lane 1从LP切换到HS超时

lane2_tmout

Data Lane 2从LP切换到HS超时

lane3_tmout

Data Lane 3从LP切换到HS超时

clk2_esc

Clock2 Lane 切换到escape模式超时

clk_esc

Clock Lane 切换到escape模式超时

lane0_esc

Data Lane 0切换到escape模式超时

lane1_esc

Data Lane 1切换到escape模式超时

lane2_esc

Data Lane 2切换到escape模式超时

lane3_esc

Data Lane 3切换到escape模式超时

mipi error int info1 (仅MIPI模式下可见)

devno

MIPI_Rx设备号。

ecc2

Header至少2个错误,ECC无法纠错

vc0_crc

VC0通道数据的CRC错误计数。

vc1_crc

VC1通道数据的CRC错误计数。

vc2_crc

VC2通道数据的CRC错误计数。

vc3_crc

VC3通道数据的CRC错误计数。

vc0_ecc_corrct

VC0通道Header的ECC已纠正的错误计数。

vc1_ecc_corrct

VC1通道Header的ECC已纠正的错误计数。

vc2_ecc_corrct

VC2通道Header的ECC已纠正的错误计数。

vc3_ecc_corrct

VC3通道Header的ECC已纠正的错误计数。

mipi error int info2 (仅MIPI模式下可见)

devno

MIPI_Rx设备号。

vc0_frmnum

VC0的帧序错误计数

vc1_frmnum

VC1的帧序错误计数

vc2_frmnum

VC2的帧序错误计数

vc3_frmnum

VC3的帧序错误计数

vc0_frmmmatch

VC0通道的帧起始与帧结束短包不匹配计数

vc1_frmmmatch

VC1通道的帧起始与帧结束短包不匹配计数

vc2_frmmmatch

VC2通道的帧起始与帧结束短包不匹配计数

vc3_frmmmatch

VC3通道的帧起始与帧结束短包不匹配计数

mipi error int info3 (仅MIPI模式下可见)

devno

MIPI_Rx设备号。

data_fifo_rderr

MIPI CTRL读数据FIFO中断计数

cmd_fifo_rderr

MIPI CTRL读命令FIFO中断计数

vsync

MIPI CTR vsync中断计数

cmd_fifo_wrerr

MIPI CTRL写命令FIFO中断计数

data_fifo_wrerr

MIPI CTRL写数据FIFO中断计数

lvds error int info1 (仅LVDS模式下可见)

devno

MIPI设备号

vsync

lvds vsync中断计数

cmd_rderr

lvds CMD_FIFO读错误中断计数

cmd_wrerr

lvds CMD_FIFO写错误中断计数

pop_err

lvds读取line_buf错误中断计数

stat_err

lvds各lane同步错误中断计数

lvds error int info2 (仅LVDS模式下可见)

devno

MIPI设备号

link0_wrerr

link0写FIFO错误中断计数

link1_wrerr

link1写FIFO错误中断计数

link2_wrerr

link2写FIFO错误中断计数

link0_rderr

link0读FIFO错误中断计数

link1_rderr

link1读FIFO错误中断计数

link2_rderr

link2读FIFO错误中断计数

lvds error int info3 (仅LVDS模式下可见)

devno

MIPI设备号

lane0_err

Lane0同步错误中断计数

lane1_err

Lane1同步错误中断计数

lane2_err

Lane2同步错误中断计数

lane3_err

Lane3同步错误中断计数

lane4_err

Lane4同步错误中断计数

lane5_err

Lane5同步错误中断计数

lane6_err

Lane6同步错误中断计数

lane7_err

Lane7同步错误中断计数

align error int info

devno

MIPI设备号

fifo_fullerr

FIFO溢出

lane0_err

Lane0 FIFO溢出

lane1_err

Lane1 FIFO溢出

lane2_err

Lane2 FIFO溢出

lane3_err

Lane3 FIFO溢出

lane4_err

Lane4 FIFO溢出

lane5_err

Lane5 FIFO溢出

lane6_err

Lane6 FIFO溢出

lane7_err

Lane7 FIFO溢出

MIPI_TX Proc信息

MIPI_TX的proc信息主要有:MIPI_TX设备模块参数、MIPI_TX设备配置信息、MIPI_TX时序配置信息、MIPI_TX设备状态信息。

【调试信息】

[MIPI_TX] Version: [SS928V100V1.0.0.0 B010 Release], Build Time[Jan 25 2022, 11:07:02]
----------mipi_tx module config------------------------
  smooth
       0
 
---------- mipi_tx dev config---------------------------
   devno   lane0   lane1   lane2   lane3    output_mode  phy_data_rate pixel_clk(KHz)     video_mode     output_fmt
0       0       1       2       3              1            945         148500              0         2
 
---------- mipi_tx sync config---------------------------
          hact           hbp           hfp           hsa          vact           vbp           vfp           vsa
          1080            20           130             8          1920            26            16            10
 
---------- mipi_tx dev status---------------------------
width  height horiall vertall hbp hsa vsa
1080    1920    1237    1972     20   8   10

【调试信息分析】

MIPI_TX模块参数、MIPI_TX设备配置信息、MIPI_TX时序配置信息等为设备启动前通过接口配置的信息;MIPI_TX设备状态信息是设备运行时检测到的部分时序信息:有效宽高、水平总宽度、垂直总高度。

【参数说明】

参数

描述

mipi_tx module config

smooth

平滑过渡标记:

0:关闭。

1:开启。

mipi_tx dev config

devno

设备号。

lane0

lane1

lane2

lane3

>=0:lane号码。

-1:禁用。

output_mode

0: csi mode

1: dsi video mode

2: dsi command mode

phy_data_rate

Phy数据率。

pixel_clk(KHz)

像素时钟(单位KHz)。

video_mode

0: BURST_MODE

1: NON_BURST_MODE_SYNC_PULSES

2: NON_BURST_MODE_SYNC_EVENTS

output_fmt

0: OUT_FORMAT_RGB_16BIT

1: OUT_FORMAT_RGB_18BIT

2: OUT_FORMAT_RGB_18BIT_LOOSELY

3: OUT_FORMAT_RGB_24BIT

4: OUT_FORMAT_YUV420_12BIT

5: OUT_FORMAT_YUV422_16BIT

6: OUT_FORMAT_YUV420_8BIT_NORMAL

7: OUT_FORMAT_YUV420_8BIT_LEGACY

8: OUT_FORMAT_YUV422_8BIT

9: OUT_FORMAT_RGB_888

10: OUT_FORMAT_RAW_8BIT

11: OUT_FORMAT_RAW_10BIT

12: OUT_FORMAT_RAW_12BIT

13: OUT_FORMAT_RAW_14BIT

14: OUT_FORMAT_RAW_16BIT

mipi_tx sync config

hact

水平有效区。

hbp

水平后消隐区。

hfp

水平前消隐区。

hsa

水平同步脉冲区。

vact

垂直有效区。

vbp

垂直后消隐区。

vfp

垂直前消隐区。

vsa

垂直同步脉冲区。

mipi_tx dev status

width

检测到的宽。

height

检测到的高。

horiall

水平总宽。

vertall

垂直总高。

hbp

水平前肩。

hsa

水平同步脉冲个数。

vsa

垂直同步脉冲个数。

FAQ

MIPI具体规格请参考芯片手册。

MIPI RX Lane id如何配置

Lane id的配置对应mipi_dev_attr_t中的short lane_id[MIPI_LANE_NUM],其中lane_id数组的索引号表示的是SENSOR的LANE ID,lane_id数组的值表示的是MIPI的LANE ID。

对接sensor时,未使用的lane将其对应的lane_id配置为-1。配置lane_id还可以调整数据通道顺序,根据硬件单板与实际sensor输出通道的对应关系调整lane_id的配置。

下面举例进行说明,例如MIPI与SENSOR的引脚硬件连接如表1所示。

表 1 SENSOR与MIPI_Rx管脚关系

MIPI Lane管脚

SENSOR管脚

MIPI_RX1_D0

Lane 0

MIPI_RX1_D1

Lane 1

MIPI_RX1_D2

Lane 2

MIPI_RX1_D3

Lane 3

MIPI的最大Lane数为8,我们认为SENSOR的Lane数目最多8个,由于sensor实际只有4个Lane,只输出数据到MIPI的4个Lane,需要将SENSOR未连接的或者不存在的Lane的lane_id配置为-1,所以lane_id配置如下:

MIPI TX Lane id如何配置

Lane id的配置对应combo_dev_cfg_t中的short lane_id[LANE_MAX_NUM],其中lane_id数组的索引号即数组下标表示的是MIPI TX对端设备的LANE ID,lane_id数组的值表示的是MIPI TX的LANE ID。

对接屏幕时,未使用的lane将其对应的lane_id配置为-1。配置lane_id还可以调整数据通道顺序,根据硬件单板与实际屏幕输出通道的对应关系调整lane_id的配置。

下面举例进行说明,例如MIPI TX与屏幕的引脚硬件连接如表1所示。

表 1 4lane屏幕与MIPI_TX管脚关系

MIPI TX Lane管脚

屏幕管脚

MIPI_TX_D2

dev_lane0

MIPI_TX_D3

dev_lane1

MIPI_TX_D0

dev_lane2

MIPI_TX_D1

dev_lane3

MIPI TX的最大Lane数为4,屏幕实际可能有4、2个Lane,只使用到MIPI TX的4个Lane或2个lane,需要将屏幕端未连接的或者不存在的Lane的lane_id配置为-1,所以4lane屏幕时,lane_id配置如下:

表 2 2lane屏幕与MIPI_TX管脚关系

MIPI TX Lane管脚

屏幕管脚

MIPI_TX_D1

dev_lane0

MIPI_TX_D0

dev_lane1

MIPI_TX_D2

未连接

MIPI_TX_D3

未连接

2lane屏幕时,lane_id配置如下:

MIPI频率说明

MIPI Lane频率与VI频率关系

使用MIPI多个Lanes进行数据传输,MIPI Lane的传输频率与VI处理频率如何对应,每一Lane可传输的最高速率如何计算?

  • MIPI_Rx使用多Lane接收数据,会转成内部时序,送给VI模块进行处理,多Lane传输的数据总量不变,有这样的计算公式:

    VI_Freq * Pix_Width = Lane_Num * MIPI_Freq

  • 其中,VI_Freq为VI的工作时钟, Pix_Width为像素位宽,Lane_Num为传输lane个数,MIPI_Freq为一个lane能接收的最大频率。

  • 下面以VI工作频率为250M,MIPI数据为RAW 12, 4Lane传输为例进行说明:

    MIPI_Freq = (250 * 12) / 4 = 750

    即每个Lane最高频率为750MHz