2. MIPI 使用指南

2.1. 概述

MIPI Rx可接收差分与DC(TTL)接口数据, 并将数据转换成pixel数据后传给下一级的ISP模块。 差分讯号支持SubLVDS(Sub Low-Voltage Differential Signal), MIPI-CSI与HiSPi(High-Speed Serial Pixel Interface)等视频输入。DC讯号支持Sensor RAW12, BT1120, BT656与BT601。

2.2. 重要概念

  • MIPI

移动行业处理器接口-Mobile Industry Processor Interface,MIPI特指物理层使用D-PHY传输规范并使用CSI-2为协议层的通信接口。

  • Lane

物理层用于连接发送端和接收端的一对高速差分线。一个Lane可传送时钟或数据。1C4D指一个时钟Lane及4个资料Lane。

  • LVDS

低压差分信号(Low Voltage differential Signaling),这里的LVDS泛指LVDS发展的sub-LVDS与HiSPi,通过同步码区分消隐区和有效数据。

  • 同步码

MIPI-CSI利用标准的短包(Short Packet)当做同步讯号。 LVDS讯号利用同包码(Sync Code)作为同步讯号。 LVDS有两种同步模式:

  • 使用SOF/EOF表示一帧的开始与结束。

  • 使用SOL/EOL表示行的开始与结束。

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

_images/1-1.png
  • 使用SAV invalid与EAV invalid表示VBLANK的开始与结束。 使用SAV valid与EAV valid表示有效数据(information line, H.OB与pixel data)的开始与结束。

图 1‑2 SAV/EAV同步方式

_images/1-2.png
  • DOI

SONY的交错式WDR模式,全称为Digital Overlap。

2.3. 功能描述

MIPI RX支持一路最大4 lanes或两路最大2 lanes的MIPI-CSI,sub-LVDS 与HiSPi差分视频输入接口,接口支持lane互换与差分讯号的PN互换。注意若使用两路差分讯号输入,脚位MIPIRX#必须0到2同一组输入,3到5同一组输入。MIPI RX也支持sensor TTL,BT1120,BT656与BT601等平行输入接口,支持除了Clock以外的lane功能互换。 具体的Lane分布如下表:

表 1‑1 支持BT接口分布表. BGA封装支持VI0~VI2, QFN封装支持VI0.

VIO

PAD NAME

VI1

PAD NAME

VI2

PAD NAME

VIO_CLK

MIPIRX4N

VI1_CLK

VIVO_CLK

VI2_CLK

VIDO_CLK

VI0_D[0]

MIPIRX4P

VI1_D[0]

VIVO_D0

VI2_D[0]

VIVO_D0

VI0_D[1]

MIPIRX3N

VI1_D[1]

VIVO_D1

VI2_D[1]

VIVO_D1

VI0_D[2]

MIPIRX3P

VI1_D[2]

VIVO_D2

VI2_D[2]

VIVO_D2

VI0_D[3]

MIPIRX2N

VI1_D[3]

VIVO_D3

VI2_D[3]

VIVO_D3

VI0_D[4]

MIPIRX2P

VI1_D[4]

VIVO_D4

VI2_D[4]

VIVO_D4

VI0_D[5]

MIPIRX1N

VI1_D[5]

VIVO_D5

VI2_D[5]

VIVO_D5

VI0_D[6]

MIPIRX1P

VI1_D[6]

VIVO_D6

VI2_D[6]

VIVO_D6

VI0_D[7]

MIPIRX0N

VI1_D[7]

VIVO_D7

VI2_D[7]

VIVO_D7

VI0_D[8]

MIPIRX0P

VI1_D[8]

VIVO_D8

VI0_D[9]

MIPI_TXM0

VI1_D[9]

VIVO_D9

VI0_D[10]

MIPI_TXP0

VI1_D[10]

VIVO_D10

VI0_D[11]

MIPI_TXM1

VI1_D[11]

MIPIRX5N

VI0_D[12]

MIPI_TXP1

VI1_D[12]

MIPIRX5P

VI0_D[13]

MIPI_TXM2

VI1_D[13]

MIPIRX4N

VI0_D[14]

MIPI_TXP2

VI1_D[14]

MIPIRX4P

VI1_D[15]

MIPIRX3N

VI1_D[16]

MIPIRX3P

VI1_D[17]

MIPIRX2N

VI1_D[18]

MIPIRX2P

MIPI RX支持MIPI-CSI的解多任务 (CSI Demux),可接收不同channel ID的信道数据。

图 1-3 MIPI-CSI 的channel ID

_images/1-3.png

MIPI RX支持BT接口的解多任务 (BT Demux),输入端将不同信道的数据以BT656字节交错的格式打包,MIPI RX可还原各通道再以对应的同步码解出有效数据。注意此模式只支持单沿取样(SDR)。

图 1‑4 BT demux模式支持的输入

_images/1-4.png

2.4. API 参考

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

MIPI Tx提供对接显示屏、级联的功能。

其中单系统提供了ioctl接口,可通过传输以下相关命令进行相应的配置:

双系统提供了CVI_MSG_SendSync接口,可通过传输以下相关命令进行相应的配置:

2.4.1. CVI_MIPI_SET_HS_MODE

【描述】

相关功能被CVI_MIPI_SET_DEV_ATTR取代。

2.4.2. CVI_MIPI_SET_DEV_ATTR

【描述】

设置MIPI和并口设备属性。

【参数】

#define CVI_MIPI_SET_DEV_ATTR _IOW(CVI_MIPI_IOC_MAGIC, 0x01, struct combo_dev_attr_t)

【定义】

struct combo_dev_attr_t类型的指针。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

  • 配置CVI_MIPI_SET_DEV_ATTR之前, 需要使用ISP接口打开MIPI_RX时钟. 详情请见ISP相关文件。

  • 除了配置CVI_MIPI_SET_DEV_ATTR之前, 还需要配置以下接口。

  • 复位MIPI: 接口为CVI_MIPI_RESET_MIPI。

  • 打开Sensor的时钟: 接口为CVI_MIPI_ENABLE_SENSOR_CLOCK

  • 复位Sensor: 接口为CVI_MIPI_RESET_SENSOR

  • 撤销复位Sensor: 接口为CVI_MIPI_UNRESET_SENSOR

  • 推荐的配置流程如下:

    1. 打开ISP时钟。

    2. 复位对接的Sensor。

    3. 复位MIPI Rx。

    4. 配置MIPI Rx设备属性。

    5. 打开Sensor所连接的时钟。

    6. 撤销复位对接的Sensor。

  • 推荐的退出程序如下:

    1. 复位对接的Sensor。

    2. 关闭Sensor所连接的时钟。

    3. 复位MIPI Rx。

    4. 关闭ISP时钟。

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

【相关数据类型及接口】

  • CVI_MIPI_RESET_MIPI

  • CVI_MIPI_ENABLE_SENSOR_CLOCK关闭ISP时钟。

  • CVI_MIPI_DISABLE_SENSOR_CLOCK

  • CVI_MIPI_RESET_SENSOR

  • CVI_MIPI_UNRESET_SENSOR

2.4.3. CVI_MIPI_RESET_SENSOR

【描述】

复位sensor

【定义】

#define CVI_MIPI_RESET_SENSOR _IOW(CVI_MIPI_IOC_MAGIC, 0x05, unsigned int)

【参数】

unsigned int。 Sensor复位信号线编号。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

  • Sensor复位信号绑定在对应的dts。

mipi_rx: cif
{
  compatible = "cvitek,cif";
  reg = <0x0 0x0a0c2000 0x0 0x2000>, <0x0 0x0a0d0000 0x0 0x1000>,<0x0 0x0a0c4000 0x0 0x2000>;
  reg-names = "csi_mac0", "csi_wrap0", "csi_mac1";
  interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>,
               <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
  interrupt-names = "csi0", "csi1";
  snsr-reset = <&porta 2 GPIO_ACTIVE_LOW>, <&porta 2 GPIO_ACTIVE_LOW>;
  resets = <&rst RST_CSIPHY0>, <&rst RST_CSIPHY1>,
         <&rst RST_CSIPHY0RST_APB>, <&rst RST_CSIPHY1RST_APB>;
  reset-names = "phy0", "phy1", "phy-apb0", "phy-apb1";
  clocks = <&clk CV181X_CLK_CAM0>, <&clk CV181X_CLK_CAM1>, <&clk CV181X_CLK_SRC_VIP_SYS_2>;
  clock-names = "clk_cam0", "clk_cam1", "clk_sys_2";
};

2.4.4. CVI_MIPI_UNRESET_SENSOR

【描述】

撤销复位sensor。

【定义】

#define CVI_MIPI_UNRESET_SENSOR _IOW(CVI_MIPI_IOC_MAGIC, 0x06, unsigned int)

【参数】

unsigned int。 Sensor复位信号线编号。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

  • Sensor复位信号绑定在对应的dts。

mipi_rx: cif
  {
    compatible = "cvitek,cif";
    reg = <0x0 0x0a0c2000 0x0 0x2000>, <0x0 0x0a0d0000 0x0 0x1000>,
          <0x0 0x0a0c4000 0x0 0x2000>;
    reg-names = "csi_mac0", "csi_wrap0", "csi_mac1";
    interrupts = <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>,
                  <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>;
    interrupt-names = "csi0", "csi1";
    snsr-reset = <&porta 2 GPIO_ACTIVE_LOW>, <&porta 2 GPIO_ACTIVE_LOW>;
    resets = <&rst RST_CSIPHY0>, <&rst RST_CSIPHY1>,
            <&rst RST_CSIPHY0RST_APB>, <&rst RST_CSIPHY1RST_APB>;
    reset-names = "phy0", "phy1", "phy-apb0", "phy-apb1";
    clocks = <&clk CV181X_CLK_CAM0>, <&clk CV181X_CLK_CAM1>, <&clk CV181X_CLK_SRC_VIP_SYS_2>;
    clock-names = "clk_cam0", "clk_cam1", "clk_sys_2";
  };

2.4.5. CVI_MIPI_RESET_MIPI

【描述】

复位MIPI_Rx。

【定义】

#define CVI_MIPI_RESET_MIPI _IOW(CVI_MIPI_IOC_MAGIC, 0x07, unsigned int)

【参数】

unsigned int。 MIPI_Rx设备号。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

2.4.6. CVI_MIPI_ENABLE_SENSOR_CLOCK

【描述】

打开Sensor的时钟。

【定义】

#define CVI_MIPI_ENABLE_SENSOR_CLOCK _IOW(CVI_MIPI_IOC_MAGIC, 0x10, unsigned int)

【参数】

unsigned int。 MIPI_Rx设备号。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

2.4.7. CVI_MIPI_DISABLE_SENSOR_CLOCK

【描述】

关闭Sensor的时钟。

【定义】

#define CVI_MIPI_DISABLE_SENSOR_CLOCK _IOW(CVI_MIPI_IOC_MAGIC, 0x11, unsigned int)

【参数】

unsigned int。 MIPI_Rx设备号。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

2.4.8. CVI_MIPI_SET_CROP_TOP

【描述】

舍弃每帧中的首N条资料

【定义】

#define CVI_MIPI_SET_WDR_MANUAL _IOW(CVI_MIPI_IOC_MAGIC, 0x21, struct crop_top_s)

【参数】

struct crop_top_s

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

2.4.9. CVI_MIPI_SET_WDR_MANUAL

【描述】

打开WDR手动模式。

【定义】

#define CVI_MIPI_SET_WDR_MANUAL _IOW(CVI_MIPI_IOC_MAGIC, 0x21, struct manual_wdr_s)

【参数】

struct manual_wdr_s

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

2.4.10. CVI_MIPI_SET_LVDS_FP_VS

【描述】

设定sub-LVDS中VSYNC生成的时间点。

【定义】

#define CVI_MIPI _SET_LVDS_FP_VS _IOW(CVI_MIPI_IOC_MAGIC, 0x22, struct vsync_gen_s)

【参数】

struct vsync_gen_s

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_vip_cif.h

【注意】

2.4.11. CVI_VIP_MIPI_TX_SET_DEV_CFG

【描述】

设置MIPI Tx设备的属性。

【定义】

#define CVI_VIP_MIPI_TX_SET_DEV_CFG _IOW(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x01, struct combo_dev_cfg_s)

【参数】

MIPI Tx设备属性结构体,详见combo_dev_cfg_s结构体说明。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.12. MSG_CMD_MIPI_TX_SET_DEV_CFG

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_SET_DEV_CFG相同。

【定义】

typedef enum tagMSG_MIPI_TX_CMD_E {
    MSG_CMD_MIPI_TX_SET_DEV_CFG = 0,
    MSG_CMD_MIPI_TX_SET_CMD,
    MSG_CMD_MIPI_TX_GET_CMD,
    MSG_CMD_MIPI_TX_ENABLE,
    MSG_CMD_MIPI_TX_DISABLE,
    MSG_CMD_MIPI_TX_SET_HS_SETTLE,
    MSG_CMD_MIPI_TX_GET_HS_SETTLE,
    MSG_CMD_MIPI_TX_BUFF
} MSG_MIPI_TX_CMD_E;

双系统后续命令的定义都来自该枚举,不再叙述。

2.4.13. CVI_VIP_MIPI_TX_GET_CMD

【描述】

从MIPI Tx设备读取信息。

【定义】

#define CVI_VIP_MIPI_TX_GET_CMD _IOWR(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x04, struct get_cmd_info_s)

【参数】

详见get_cmd_info_s结构体说明

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.14. MSG_CMD_MIPI_TX_GET_CMD

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_GET_CMD相同。

【定义】

见MSG_CMD_MIPI_TX_SET_DEV_CFG命令的定义说明。

2.4.15. CVI_VIP_MIPI_TX_SET_CMD

【描述】

设备发送命令给MIPI Tx设备。

【定义】

单系统:

#define CVI_VIP_MIPI_TX_SET_CMD _IOW(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x02, struct cmd_info_s)

【参数】

详见cmd_info_s 结构体说明。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.16. MSG_CMD_MIPI_TX_SET_CMD

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_SET_CMD相同。

【定义】

见MSG_CMD_MIPI_TX_SET_DEV_CFG命令的定义说明。

2.4.17. CVI_VIP_MIPI_TX_ENABLE

【描述】

启用MIPI Tx设备。

【定义】

#define CVI_VIP_MIPI_TX_ENABLE _IO(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x03)

【参数】

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.18. MSG_CMD_MIPI_TX_ENABLE

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_ENABLE相同。

【定义】

见MSG_CMD_MIPI_TX_SET_DEV_CFG命令的定义说明。

2.4.19. CVI_VIP_MIPI_TX_DISABLE

【描述】

禁用MIPI Tx设备。

【定义】

#define CVI_VIP_MIPI_TX_DISABLE _IO(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x05)

【参数】

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.20. MSG_CMD_MIPI_TX_DISABLE

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_DISABLE相同。

【定义】

见MSG_CMD_MIPI_TX_SET_DEV_CFG命令的定义说明。

2.4.21. CVI_VIP_MIPI_TX_SET_HS_SETTLE

【描述】

设定MIPI Tx在HS mode下的settle timing。

【定义】

#define CVI_VIP_MIPI_TX_SET_HS_SETTLE _IOW(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x06, struct hs_settle_s)

【参数】

详见hs_settle_s结构体说明。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.22. MSG_CMD_MIPI_TX_SET_HS_SETTLE

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_SET_HS_SETTLE相同。

【定义】

见MSG_CMD_MIPI_TX_SET_DEV_CFG命令的定义说明。

2.4.23. CVI_VIP_MIPI_TX_GET_HS_SETTLE

【描述】

取得MIPI Tx在HS mode下的settle timing。

【定义】

#define CVI_VIP_MIPI_TX_GET_HS_SETTLE _IOWR(CVI_VIP_MIPI_TX_IOC_MAGIC, 0x06, struct hs_settle_s)

【参数】

详见hs_settle_s结构体说明。

【返回值】

返回值

描述

0

成功

-1

失败,并设置errno

【处理器差异】

【需求】

头文件: cvi_mipi_tx.h

【注意】

2.4.24. MSG_CMD_MIPI_TX_GET_HS_SETTLE

该双系统命令的描述、参数、返回值、处理器差异、需求、注意项皆与单系统命令CVI_VIP_MIPI_TX_GET_HS_SETTLE相同。

【定义】

见MSG_CMD_MIPI_TX_SET_DEV_CFG命令的定义说明。

2.5. 数据类型

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

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

2.5.1. CVI_MIPI_IOC_MAGIC

【说明】

MIPI Rx ioctl命令的幻数

【定义】

#define CVI_MIPI_IOC_MAGIC     'm'

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.2. MIPI_LANE_NUM

【说明】

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

【定义】

#define MIPI_LANE_NUM   4

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.3. WDR_VC_NUM

【说明】

定义最多支持的Virtual Channel数量

【定义】

#define WDR_VC_NUM   2

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.4. SYNC_CODE_NUM

【说明】

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

【定义】

#define SYNC_CODE_NUM   4

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.5. BT_DEMUX_NUM

【说明】

定义使用bt demux功能时支持最大的信道数量。

【定义】

#define BT_DEMUX_NUM   4

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.6. MIPI_DEMUX_NUM

【说明】

定义使用mipi demux功能时支持最大的virtual channel数量。

【定义】

#define MIPI_DEMUX_NUM   4

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.7. input_mode_e

【说明】

MIPI Rx输入接口类型。

【定义】

enum input_mode_e
  {
      INPUT_MODE_MIPI = 0,
      INPUT_MODE_SUBLVDS,
      INPUT_MODE_HISPI,
      INPUT_MODE_CMOS,
      INPUT_MODE_BT1120,
      INPUT_MODE_BT601_19B_VHS,
      INPUT_MODE_BT656_9B,
      INPUT_MODE_CUSTOM_0,
      INPUT_MODE_BT_DEMUX,
      INPUT_MODE_BUTT
  };

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.8. img_size_s

【说明】

MIPI Rx输入数据每帧的大小。

【定义】

struct img_size_s {
      unsigned int    width;
      unsigned int    height;
};

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.9. rx_mac_clk_e

【说明】

MAC 的支持工作时钟。

【定义】

enum rx_mac_clk_e {
      RX_MAC_CLK_200M = 0,
 RX_MAC_CLK_400M,
      RX_MAC_CLK_500M,
 RX_MAC_CLK_600M,
 RX_MAC_CLK_BUTT,
};

【处理器差异】

无。

【注意事项】

MAC时钟与支持的MIPI时钟关系请参考1.7.2。

【相关数据类型及接口】

2.5.10. cam_pll_freq_e

【说明】

MIPI-RX输出的Sensor参考时钟。

【定义】

enum cam_pll_freq_e {
   CAMPLL_FREQ_NONE = 0,
   CAMPLL_FREQ_37P125M,
   CAMPLL_FREQ_25M,
   CAMPLL_FREQ_27M,
  CAMPLL_FREQ_24M,
  CAMPLL_FREQ_26M,
   CAMPLL_FREQ_NUM
};

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.11. mclk_pll_s

【说明】

MIPI-RX输出的Sensor参考时钟设定。

【定义】

struct mclk_pll_s {
   unsigned int      cam;
   enum cam_pll_freq_e   freq;
};

【成员】

成员

描述

cam

0: 输出为CAM_MCLK0 1: 输出为CAM_MCLK1

freq

输出的Sensor参考时钟

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.12. raw_data_type_e

【说明】

MIPI Rx输入数据格式。

【定义】

enum raw_data_type_e {
      RAW_DATA_8BIT = 0,
      RAW_DATA_10BIT,
      RAW_DATA_12BIT,
      YUV422_8BIT,    /* MIPI-CSI only */
      YUV422_10BIT,   /* MIPI-CSI only*/
      RAW_DATA_BUTT
};

【处理器差异】

无。

【注意事项】

YUV422_8BIT与YUV422_10BIT只支持MIPI-CSI格式。

【相关数据类型及接口】

2.5.13. mipi_wdr_mode_e

【说明】

MIPI-CSI WDR模式。

【定义】

enum mipi_wdr_mode_e {
      CVI_MIPI_WDR_MODE_NONE = 0,
      CVI_MIPI_WDR_MODE_VC,
      CVI_MIPI_WDR_MODE_DT,
      CVI_MIPI_WDR_MODE_DOL,
      CVI_MIPI_WDR_MODE_MANUAL,  /* SOI case */
      CVI_MIPI_WDR_MODE_BUTT
};

【成员】

成员

描述

CVI_MIPI_WDR_MODE_NONE

线性模式

CVI_MIPI_WDR_MODE_VC

MIPI-CSI Virtual Channel模式

CVI_MIPI_WDR_MODE_DT

MIPI-CSI Data Type模式

CVI_MIPI_WDR_MODE_DOL

Sony DOL LI模式

CVI_MIPI_WDR_MODE_MANUAL

WDR手动模式

【处理器差异】

无。

【注意事项】

  • CVI_MIPI_WDR_MODE_VC适用于使用MIPI-CSI Virtual Channel ID分辨长曝线与短曝线的Sensor。

  • CVI_MIPI_WDR_MODE_DT适用于使用MIPI-CSI Data Type ID分辨长曝线与短曝线的Sensor。 注意注意长曝与短曝必须在同一帧开始与结束。

  • CVI_MIPI_WDR_MODE_DOL适用于使用SONY MIPI-CSI Line Information模式。

  • CVI_MIPI_WDR_MODE_MANUAL使用自定义的规则决定长曝线与短曝线。

【相关数据类型及接口】

2.5.14. wdr_mode_e

【说明】

Sub-LVDS/HISPI WDR模式。

【定义】

enum wdr_mode_e {
      CVI_WDR_MODE_NONE = 0,
      CVI_WDR_MODE_2F,
      CVI_WDR_MODE_3F,
      CVI_WDR_MODE_DOL_2F,
      CVI_WDR_MODE_DOL_3F,
      CVI_WDR_MODE_DOL_BUTT
};

【成员】

成员

描述

CVI_WDR_MODE_NONE

线性模式

CVI_WDR_MODE_2F

一般双曝WDR

CVI_WDR_MODE_3F

一般三曝WDR

CVI_WDR_MODE_DOL_2F

Sony DOL-2 WDR

CVI_WDR_MODE_DOL_3F

Sony DOL-3 WDR

【处理器差异】

无。

【注意事项】

  • CVI_WDR_MODE_2F适用于一般MIPI-CSI/HiSPi的交错式WDR。

  • CVI_WDR_MODE_DOL_2F适合用Sony Sub-LVDS DOL-2 WDR

  • CV181x不支援CVI_WDR_MODE_3F与CVI_WDR_MODE_DOL_3

  • CV180X不支持WDR mode

【相关数据类型及接口】

2.5.15. lvds_sync_mode_e

【说明】

LVDS同步模式。

【定义】

enum lvds_sync_mode_e {
      LVDS_SYNC_MODE_SOF = 0,
      LVDS_SYNC_MODE_SAV,
      LVDS_SYNC_MODE_BUTT
};

【成员】

成员

描述

LVDS_SYNC_MODE_SOF

SOF, EOF, SOL, EOL。 请参考图1-1

LVDS_SYNC_MODE_SAV

Invalid SAV, invalid EAV, valid SAV, valid EAV。 请参考图1-2

【处理器差异】

无。

【注意事项】

  • LVDS_SYNC_MODE_SOF适用于HiSPi Packetize-SP模式。

  • LVDS_SYNC_MODE_SAV适用于sub-LVDS与HiSPi Streaming-SP模式

  • 当输入为INPUT_MODE_HISPI并且同步模式为LVDS_SYNC_MODE_SAV。 MIPI-Rx切换到HiSPi Streaming-SP模式。

【相关数据类型及接口】

2.5.16. lvds_bit_endian

【说明】

比特位大小端模式。

【定义】

enum lvds_bit_endian {
        LVDS_ENDIAN_LITTLE = 0,
        LVDS_ENDIAN_BIG,
        LVDS_ENDIAN_BUTT
};

【处理器差异】

无。

【注意事项】

无。

【相关数据类型及接口】

2.5.17. lvds_vsync_type_e

【说明】

LVDS 在WDR模式的同步方式。

【定义】

enum lvds_vsync_type_e {
        LVDS_VSYNC_NORMAL = 0,
        LVDS_VSYNC_SHARE,
        LVDS_VSYNC_HCONNECT,
        LVDS_VSYNC_BUTT
};

【成员】

成员

描述

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标识,长短曝光帧之间是固定周期的消隐。

图 1‑3 LVDS_VSYNC_NORMAL同步方式.

_images/1-3LVDS_VSYNC_NORMAL.png

图 1‑4 LVDS_VSYNC_HCONNECT同步方式.

_images/1-4LVDS_VSYNC_HCONNECT.png

【处理器差异】

无。

【注意事项】

  • LVDS_VSYNC_NORMAL适用于SONY sub-LVDS DOL-2 pattern 1与HiSPi Packtized-SP WDR模式。

  • LVDS_VSYNC_SHARE适用于HiSPi Streaming-SP WDR模式。

  • LVDS_VSYNC_HCONNECT适用于SONY sub-LVDS DOL-2 pattern 2。

【相关数据类型及接口】

2.5.18. lvds_fid_type_e

【说明】

LVDS frame identification ID类型。

【定义】

enum lvds_fid_type_e {
      LVDS_FID_NONE = 0,
      LVDS_FID_IN_SAV,
      LVDS_FID_BUTT,
};

【成员】

成员

描述

LVDS_FID_NONE

不使用frame identification id。

LVDS_FID_IN_SAV

FID插入在SAV第4个字段中。

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.19. lvds_fid_type_s

【说明】

LVDS frame identification ID类型。

【定义】

struct lvds_fid_type_s {
        enum lvds_fid_type_e            fid;
};

【成员】

成员

描述

fid

LVDS DOL模式下的frame identification类型

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.20. lvds_vsync_type_s

【说明】

LVDS WDR同步参数。

【定义】

struct lvds_vsync_type_s {
        enum lvds_vsync_type_e  sync_type;
        unsigned short                  hblank1;
        unsigned short                  hblank2;
};

【处理器差异】

无。

【注意事项】

  • 当sync_type为LVDS_VSYNC_HCONNECT时, 需要配置hblank1和hblank2,表示长短曝间的消隠区长度。

【相关数据类型及接口】

2.5.21. lvds_dev_attr_s

【说明】

LVDS/SubLVDS/HiSPi设备属性。

【定义】

struct lvds_dev_attr_s {
        enum wdr_mode_e                 wdr_mode;
        enum lvds_sync_mode_e           sync_mode;
        enum raw_data_type_e            raw_data_type;
        enum lvds_bit_endian            data_endian;
        enum lvds_bit_endian            sync_code_endian;
        short                           lane_id[MIPI_LANE_NUM+1];
        short   sync_code[MIPI_LANE_NUM][WDR_VC_NUM+1][SYNC_CODE_NUM];
        struct lvds_vsync_type_s        vsync_type;
        struct lvds_fid_type_s          fid_type;
        char                            pn_swap[MIPI_LANE_NUM+1];
};

【成员】

成员

描述

wdr_mode

WDR模式

sync_mode

LVDS同步模式

raw_data_type

传输的数据类型

data_endian

数据大小端模式

sync_code_endian

同步码大小端模式

lane_id

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

sync_code

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

vsync_type

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

fid_type

frame identification类型

pn_swap

Positive/negative line 是否交换

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.22. dphy_s

【说明】

MIPI RX DPHY 属性。

【定义】

struct mipi_dev_attr_s {
        unsigned char           enable;
        unsigned char           hs_settle;
};

【成员】

成员

描述

enable

开启MIPI RX DPHY属性设定

hs_settle

hs settle time

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.23. mipi_demux_info_s

【说明】

MIPI CSI使用Virtual Channel 解多任务的属性设定。

【定义】

struct mipi_demux_info_s {
      unsigned int                    demux_en;
      unsigned char                   vc_mapping[MIPI_DEMUX_NUM];
};

【成员】

成员

描述

demux_en

开启mipi virtual channel 解多任务

vc_mapping

设定ISP channel 与mipi virtual channel对应关系. 例如vc_mapping = {0, 2, 3, 1}, ISP ch0代表vc=0; ch1代表vc=2; ch2代表vc=3; ch3代表vc=1.

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.24. mipi_dev_attr_s

【说明】

MIPI-CSI设备属性。

【定义】

struct mipi_dev_attr_s {
        enum raw_data_type_e            raw_data_type;
        short                           lane_id[MIPI_LANE_NUM+1];
        enum mipi_wdr_mode_e           wdr_mode;
        short                           data_type[WDR_VC_NUM];
        char                            pn_swap[MIPI_LANE_NUM+1];
};

【成员】

成员

描述

wdr_mode

WDR模式

raw_data_type

传输的数据类型

lane_id

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

data_type

当WDR模式为CVI_MIPI_WDR_MODE_DT时, 每个WDR frames对应的data type。

pn_swap

Positive/negative line 是否交换。

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.25. manaul_wdr_attr_s

【说明】

手动WDR模式参数。

【定义】

struct manaul_wdr_attr_s {
        unsigned int                    manual_en;
        unsigned short                  l2s_distance;
        unsigned short                  lsef_length;
        unsigned int                    discard_padding_lines;
        unsigned int                    update;
};

【成员】

成员

描述

manual_en

手动WDR开关

l2s_distance

一帧中首条长曝到首列短曝的距离, 单位为行数。

lsef_length

长曝/短曝的行数。

discard_padding_lines

Sensor是否有把padding行当有效行输出。

update

是否强制更新设定。 若否, 设定会等下一张的同步讯号来才更新。

【处理器差异】

无。

【注意事项】

  • HiSPi输入并且sync_type为LVDS_VSYNC_SHARE时,需打开手动WDR模式并设定参数。

  • MIPI-CSI输入并且wdr mode为CVI_MIPI_WDR_MODE_MANUAL时,需打开手动WDR模式并设定参数。

【相关数据类型及接口】

2.5.26. ttl_pin_func_e

【说明】

TTL/BT接口的配置功能.

【定义】

enum ttl_pin_func_e {
      TTL_PIN_FUNC_VS,
      TTL_PIN_FUNC_HS,
      TTL_PIN_FUNC_VDE,
      TTL_PIN_FUNC_HDE,
      TTL_PIN_FUNC_D0,
      TTL_PIN_FUNC_D1,
      TTL_PIN_FUNC_D2,
      TTL_PIN_FUNC_D3,
      TTL_PIN_FUNC_D4,
      TTL_PIN_FUNC_D5,
      TTL_PIN_FUNC_D6,
      TTL_PIN_FUNC_D7,
      TTL_PIN_FUNC_D8,
      TTL_PIN_FUNC_D9,
      TTL_PIN_FUNC_D10,
      TTL_PIN_FUNC_D11,
      TTL_PIN_FUNC_D12,
      TTL_PIN_FUNC_D13,
      TTL_PIN_FUNC_D14,
      TTL_PIN_FUNC_D15,
      TTL_PIN_FUNC_NUM,
};

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.27. ttl_src_e

【说明】

TTL/BT接口输入来源.

【定义】

enum ttl_src_e {
      TTL_VI_SRC_VI0 = 0,
      TTL_VI_SRC_VI1,
      TTL_VI_SRC_VI2,         /* BT demux */
      TTL_VI_SRC_NUM
};

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

参考表1-1.

2.5.28. bt_demux_mode_e

【说明】

BT解多任务模式的信道数量。

【定义】

enum bt_demux_mode_e {
      BT_DEMUX_DISABLE = 0,
      BT_DEMUX_2,
      BT_DEMUX_3,
      BT_DEMUX_4,
};

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.29. bt_demux_sync_s

【说明】

BT解多任务模式的同步码设定。

【定义】

struct bt_demux_sync_s {
      unsigned char           sav_vld;
      unsigned char           sav_blk;
      unsigned char           eav_vld;
      unsigned char           eav_blk;
};

【成员】

成员

描述

sav_vld

有效数据区间的SAV

sav_blk

空白区间的SAV

eav_vld

有效数据区间的EAV

eav_blk

空白区间的EAV

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.30. bt_demux_attr_s

【说明】

BT解多任务模式的属性设定。

【定义】

struct bt_demux_attr_s {
      signed char                     func[TTL_PIN_FUNC_NUM];
      unsigned short                  v_fp;
      unsigned short                  h_fp;
      unsigned short                  v_bp;
      unsigned short                  h_bp;
      enum bt_demux_mode_e            mode;
      unsigned char                   sync_code_part_A[3];    /* sync code 0~2 */
      struct bt_demux_sync_s          sync_code_part_B[BT_DEMUX_NUM]; /* sync code 3 */
      char                            yc_exchg;
};

【成员】

成员

描述

func

BT接口对应输入源TTL_VI_SRC_VI2的lane number. Index为BT逻辑功能, value请参考表1-1. 例如, func[TTL_PIN_FUNC_D0] = 5, 代表BT讯号的D0接到VI2_D[5], 即pad name VIVO_D5。

v_fp

垂直方向的front porch

h_fp

水平方向的front porch

v_bp

垂直方向的back porch

h_bp

水平方向的back porch

mode

BT解多任务模式的信道数量

sync_code_part_A

BT解多任务模式的0~2同步码

sync_code_part_B

BT解多任务模式的同步码3

yc_exchg

BIT0~BIT3分别代表CH0~CH3的Y Cb/Cr bytes顺序互换. 1 为互换, 0 为不互换.

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.31. ttl_dev_attr_s

【说明】

TTL/BT接口的属性设定。

【定义】

struct ttl_dev_attr_s {
      enum ttl_src_e                  vi;
      signed char                     func[TTL_PIN_FUNC_NUM];
      unsigned short                  v_bp;
      unsigned short                  h_bp;
};

【成员】

成员

描述

vi

TTL/BT接口的输入来源, 允许值为TTL_VI_SRC_VI0或TTL_VI_SRC_VI1

func

BT接口对应输入源的lane number. Index为BT逻辑功能, value请参考表1-1. 例如, vi = TTL_VI_SRC_VI1时, func[TTL_PIN_FUNC_D0] = 5, 代表BT讯号的D0接到VI1_D[5], 即pad name VIVO_D5.

v_bp

垂直方向的back porch

h_bp

水平方向的back porch

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.32. combo_dev_attr_s

【说明】

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

【定义】

struct combo_dev_attr_s {
       enum input_mode_e            input_mode;
       enum rx_mac_clk_e             mac_clk;
       struct mclk_pll_s                mclk;
       union {
               struct mipi_dev_attr_s  mipi_attr;
               struct lvds_dev_attr_s  lvds_attr;
               struct ttl_dev_attr_s   ttl_attr;
               struct bt_demux_attr_s  bt_demux_attr;
       };
       unsigned int                  devno;
       struct img_size_s              img_size;
       struct manaul_wdr_attr_s        wdr_manu;
};

【成员】

成员

描述

input_mode

输入接口类型

mac_clk

MIPI RX MAC时钟设定

mclk

MIPI RX输出的Sensor参考时钟设定

mipi_attr

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

lvds_attr

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

devno

MIPI-Rx设备号

img_size

输入帧大小

wdr_manu

手动WDR属性

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.33. crop_top_s

【说明】

舍弃开头的行资料。

【定义】

struct crop_top_s {
        unsigned int                    devno;
        unsigned int                    crop_top;
        unsigned int                    update;
};

【成员】

成员

描述

devno

MIPI-Rx设备号

crop_top

开头要拾弃的行数

update

是否强制更新设定。 若否, 设定会等下一张的同步讯号来才更新。

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.34. manual_wdr_s

【说明】

手动WDR模式设定。

【定义】

struct manual_wdr_s {
        unsigned int                  devno;
        struct manaul_wdr_attr_s        attr;
};

【成员】

成员

描述

devno

MIPI-Rx设备号

attr

手动WDR属性

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.35. vsync_gen_s

【说明】

手动WDR模式设定。

【定义】

struct vsync_gen_s {
        unsigned int                    devno;
        unsigned int                    distance_fp;
};

【成员】

成员

描述

devno

MIPI-Rx设备号

distance_fp

当input_mode为INPUT_MODE_SUBLVDS时,产生垂直同步信号的时间点。

【处理器差异】

无。

【注意事项】

  • Sub-LVDS不自带垂直同步信号,所以MIPI-Rx须自行生成送给ISP。 distance_fp 可调整垂直同步时间点以达到加大front porch的作用。

【相关数据类型及接口】

2.5.36. LANE_MAX_NUM

【说明】

一个MIPI Tx设备支持的最大Lane数。

【定义】

#define MIPI_LANE_NUM   4

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.37. output_mode_e

【说明】

MIPI Tx输出模式。

【定义】

enum output_mode_e
{
  OUTPUT_MODE_CSI             = 0x0,      /* csi mode */ OUTPUT_MODE_DSI_VIDEO      = 0x1,      /* dsi video mode */
  OUTPUT_MODE_DSI_CMD       = 0x2,      /* dsi command mode */
  OUTPUT_MODE_BUTT
} output_mode_t;

【处理器差异】

【注意事项】

【相关数据类型及接口】

2.5.38. video_mode_e

【说明】

MIPI Tx视频模式。

【定义】

enum video_mode_e {
   BURST_MODE                      = 0x0,
   NON_BURST_MODE_SYNC_PULSES      = 0x1,
   NON_BURST_MODE_SYNC_EVENTS      = 0x2,
};

【处理器差异】

【注意事项】

【相关数据类型及接口】

2.5.39. output_format_e

【说明】

LVDS 在WDR模式的同步方式。

【定义】

enum output_format_e {
   OUT_FORMAT_RGB_16_BIT          = 0x0,
   OUT_FORMAT_RGB_18_BIT          = 0x1,
   OUT_FORMAT_RGB_24_BIT          = 0x2,
   OUT_FORMAT_RGB_30_BIT          = 0x3,
   OUT_FORMAT_YUV420_8_BIT_NORMAL = 0x4,
   OUT_FORMAT_YUV420_8_BIT_LEGACY = 0x5,
   OUT_FORMAT_YUV422_8_BIT        = 0x6,

   OUT_FORMAT_BUTT
};

【处理器差异】

处理器差异

是否支持

CV181x

不支持YUV420

CV180x

不支持YUV420

【注意事项】

【相关数据类型及接口】

2.5.40. sync_info_s

【说明】

MIPI Tx设备同步信息。

【定义】

struct sync_info_s {
   unsigned short  vid_hsa_pixels;
   unsigned short  vid_hbp_pixels;
   unsigned short  vid_hfp_pixels;
   unsigned short  vid_hline_pixels;
   unsigned short  vid_vsa_lines;
   unsigned short  vid_vbp_lines;
   unsigned short  vid_vfp_lines;
   unsigned short  vid_active_lines;
   unsigned short  edpi_cmd_size;
   bool            vid_vsa_pos_polarity;
   bool            vid_hsa_pos_polarity;
};

【成员】

成员

描述

vid_hsa_pixels

Horizontal sync-pluse像素个数

vid_hbp_pixels

Horizontal back-porch像素个数

vid_hfp_pixels

Horizontal front-porch像素个数

vid_hline_pixels

Horizontal image active像素个数

vid_vsa_lines

Vertical sync-pluse行数

vid_hbp_pixels

Vertical back-porch行数

vid_hbp_pixels

Vertical front-porch行数

vid_active_pixels

Vertical image active行数

edpi_cmd_size

写内存命令字节数。video mode时该值无效,command mode时该值设为hact。

vid_vsa_pos_polarity;

Horizontal sync-pluse polarity

vid_hsa_pos_polarity;

Vertical sync-pluse polarity

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

2.5.41. combo_dev_cfg_s

【说明】

MIPI Tx设备属性。

【定义】

struct combo_dev_cfg_s {
    unsigned int            devno;
    enum mipi_tx_lane_id    lane_id[LANE_MAX_NUM];
    enum output_mode_e      output_mode;
    enum video_mode_e       video_mode;
    enum output_format_e    output_format;
    struct sync_info_s      sync_info;
    unsigned int            phy_data_rate;
    unsigned int            pixel_clk;
    bool                    lane_pn_swap[LANE_MAX_NUM];
};

【成员】

成员

描述

devno

devno

lane_id

发送端(vo)和接收端(MIPI Tx) Lane的对应关系;未使用的Lane设置为-1。

output_mode

MIPI Tx输出模式。

video_mode

MIPI Tx视频模式。

output_format

MIPI Tx输出格式。

sync_info

MIPI Tx设备的同步信息。

phy_data_rate

MIPI Tx输出速率,MIPI Tx高速模式每个信道(lane)的速率范围的描述。

pixel_clk

像素时钟。单位为KHz

lane_pn_swap

Lane设置上是否P/N要互换

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

CVI_VIP_MIPI_TX_SET_DEV_CFG, MSG_CMD_MIPI_TX_SET_DEV_CFG

2.5.42. cmd_info_s

【说明】

给MIPI Tx设备初始化信息。

【定义】

struct cmd_info_s {
    unsigned int        devno;
    unsigned short      data_type;
    unsigned short      cmd_size;
#ifdef __arm__
    unsigned char       *cmd;
    unsigned int       padding;
#else
    unsigned char       *cmd;
#endif
};

【成员】

成员

描述

devno

MIPI Tx设备号

data_type

命令数据类型

cmd_size

命令数据字节数,范围:(0,128)。

cmd_data

命令数据地址指针,需要用户分配。

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

CVI_VIP_MIPI_TX_SET_CMD, MSG_CMD_MIPI_TX_SET_CMD

2.5.43. get_cmd_info_s

【说明】

从MIPI Tx设备取回信息。

【定义】

struct get_cmd_info_s {
    unsigned int        devno;
    unsigned short      data_type;
    unsigned short      data_param;
    unsigned short      get_data_size;
#ifdef __arm__
    unsigned int        padding1;
    unsigned char       *get_data;
    unsigned int        padding2;
#else
    unsigned int        padding1;
    unsigned char       *get_data;
#endif
};

【成员】

成员

描述

devno

MIPI Tx设备号

data_type

命令数据类型

data_param

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

get_data_size

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

get_data

获取到的数据存放地址指针,需要用户分配。

【处理器差异】

无。

【注意事项】

【相关数据类型及接口】

CVI_VIP_MIPI_TX_GET_CMD, MSG_CMD_MIPI_TX_GET_CMD

2.5.44. hs_settle_s

【说明】

MIPI Tx设备HS mode下的settle信息。

【定义】

struct hs_settle_s {
    unsigned char       prepare;
    unsigned char       zero;
    unsigned char       trail;
};

【成员】

成员

描述

prepare

为LP->HS后的前置准备T数

zero

在进入HS后,在输出数据前为0的T数

trail

在HS->LP时,要结束HS前,数据结束后额外的T数

【处理器差异】

无。

【注意事项】

_images/_hs_settle_s.png

【相关数据类型及接口】

2.6. Proc信息

2.6.1. MIPI_RX Proc信息

MIPI_Rx在正常工作下proc信息中的各种错误中断计数应为0。 若否,请检查MIPI_Rx相关属性是否配置正确。

【调试信息】

Module: [MIPI_RX], Build Time[#1 SMP PREEMPT Thu Apr 29 11:18:57 CST 2021]

------------Combo DEV ATTR--------------
 Devno  WorkMode  DataType   WDRMode         LinkId        PN Swap  SyncMode  DataEndian  SyncCodeEndian
     0      MIPI     RAW12      NONE  2, 3, 1, 4, 0  1, 1, 1, 1, 1       N/A         N/A             N/A

------------MIPI info-------------------
Devno EccErr CrcErr HdrErr WcErr fifofull   decode
   0      0      0      0     2        0    raw12
Physical:       D0       D1       D2       D3       D4       D5
                 0        0        0        0        0        0
 Digital:       D0       D1       D2       D3    CK_HS  CK_ULPS  CK_STOP   CK_ERR   Deskew
           hs_idle  hs_idle  hs_idle  hs_idle        1        0        0        0     idle

【调试信息分析】

  • MIPI Rx通过PHY Wrapper接收Sensor的MIPI-CSI/SubLVDS/HiSPi/TTL讯号, 由MAC内对应的接口进行同步头检测与对齐。

  • MAC将各Lane的数据合并成Pixel数据, 并将数据发送给后级的ISP。

  • PHY Wrapper由sensor的pixel clock提供时钟。 MAC内的时钟与后级的ISP相同。

  • 若要操作数据的Crop, 可由后级的ISP来调试。

图 1‑5数据示例图

_images/1-5.png

【参数说明】

参数

描述

MIPI DEV ATTR

Devno

MIPI设备号

WorkMode

MIPI设备工作模式: MIPI/ SUBLVDS/HISPI/CMOS等模式

DataType

RAW8/RAW10/RAW12等类型

WDRMode

WDR模式:
  • NONE

  • VC

  • DT

  • DOL

  • MANUAL

LaneId

Lane id

PN Swap

PN 讯号交换

LVDS DEV ATTR

Devno

MIPI设备号

WorkMode

MIPI设备工作模式: MIPI/ SUBLVDS/HISPI/CMOS等模式

DataType

RAW8/RAW10/RAW12等类型

WDRMode

WDR模式:
  • NONE

  • 2To1

  • 3To1

  • DOL2To1

  • DOL3To1

LaneId

Lane id

PN Swap

PN 讯号交换

SyncMode

LVDS的同步码模式:
  • SOF

  • SAV

DataEndian

Data的比特位大小端模式

SyncCodeEndian

同步码的比特位大小端模式

MIPI Info (仅MIPI模式可见)

Devno

MIPI设备号

EccErr

ECC错误的中断计数

CrcErr

CRC错误的中断计数

HdrErr

HDR Flag错误的中断计数

WcErr

Word Count错误的中断计数

fifofull

Fifofull 的中断计数

Physical: D0

MIPIRX_PAD0 收到的资料

Physical: D1

MIPIRX_PAD1 收到的资料

Physical: D2

MIPIRX_PAD2 收到的资料

Physical: D3

MIPIRX_PAD3 收到的资料

Physical: D4

MIPIRX_PAD4 收到的资料

Physical: D5

MIPIRX_PAD5 收到的资料

Digital: D0

Sensor data lane 0 state

Digital: D1

Sensor data lane 1 state

Digital: D2

Sensor data lane 2 state

Digital: D3

Sensor data lane 3 state

CK_HS/CK_ULPS/CK_STOP/CK_ERR

Sensor clock lane state

Deskew

Deskew 结果

2.7. FAQ

2.7.1. 1.6.1. Land id如何配置

Land id的配置对应mipi_dev_attr_s中的short lane_id[MIPI_LANE_NUM+1]或者lvds_dev_attr_s中 的short lane_id[MIPI_LANE_NUM+1],其中lane_id数组的索引号表示的是Sensor的Lane ID,索引号 0表示sensor clock,索引号1表示sensor lane 0。 land_id数组的值表示的是MIPI-Rx的Lane ID, 0表示MIPIRX1_PAD0,1表示MIPIRX1_PAD1。未使用的lane将其对应的lane_id配置为-1。

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

SENSOR管脚

MIPI Lane管脚

Clock Lane (index = 0)

MIPIRX1_PAD0 (value = 0)

Lane 0 (index = 1)

MIPIRX1_PAD1 (value = 1)

Lane 1 (index = 2)

MIPIRX1_PAD2 (value = 2)

Lane 2 (index = 3)

MIPIRX1_PAD3 (value = 3)

Lane 3 (index = 4)

MIPIRX1_PAD4 (value = 4)

MIPI的最大Lane数加上Clock为5,所以lane_id配置如下:

//索引sensor_clk,   sensor_lane0,  sensor_lane1,  sensor_lane2,    sensor_lane3
//          ↓               ↓            ↓            ↓               ↓
land_id={MIPIRX1_PAD0  MIPIRX1_PAD1  MIPIRX1_PAD2  MIPIRX1_PAD3 MIPIRX1_PAD4 }

2.7.2. MIPI频率说明

使用以下公式计算MIPI每Lane最高频率与VI MAC的工作频率:

MAC_Freq * pixel_width = lane_num * MIPI_Freq * 2。 其中MAC_Freq为VI MAC的工作频率,pixel_width为像素位宽,lane_num为MIPI lane个数,MIPI_Freq为每条lane的工作频率。 若MAC clock为400M,pixel_width = 12,lane_num = 4, 可支持最快MIPI_Freq = 400 * 12 / ( 4 * 2) = 600MHz。

2.7.3. Manual WDR模式使用说明

当手动WDR模式打开后,MIPI-Rx会把收下来的数据以行为单位,遵遁以下规则分配给长曝帧与短曝帧。

  • l2s_distance: 从第一行到第l2s_distance行都是长曝数据,第l2s_distance+1行开始长曝与短曝交错分配。

  • lsef_length: 第lsef_length+1行开始都是短曝帧数据。 直到下个垂直同步信号为止。

  • 当discard_padding_lines=1时,1到l2s_distance行分配方式为{长-ignore-长-ignore …},第l2s_distance+1到lsef_length行分配方式为{长-短-长-短 …}。第lsef_length+1行到下个垂直同步信号分配方式为{短-ignore-短-ignore …}。

_images/1.6.3.png
  • 当discard_padding_lines=0时,1到l2s_distance行分配方式为{长-长-长 …},第l2s_distance+1到lsef_length行分配方式为{长-短-长-短 …}。第lsef_length+1行到下个垂直同步信号分配方式为{短-短-短 …}。

_images/1.6.3-2.png
  • MIPI-Rx必须确保发送给ISP的长曝帧与短曝帧行数是一致的。

  • 调整sensor短曝长度,有可能l2s_distance需要一起调整。

  • 有些sensor可能会在送完短曝有效数据后带dummy行。 这会造成长曝与短曝的行数不一致。 可将l2s_distance设成0,lsef_length设成最大值0x1FFF,discard_padding_lines为1即收下两张带有效与dummy数据的长短曝,再用ISP crop有效位置即可。

_images/1.6.3-3.png