MIPI 使用指南
前言
与本文档相对应的产品版本如下。
说明:
- 未有特殊说明,Hi3516DV500与Hi3519DV500、Hi3516CV608与Hi3516CV610内容完全一致。
- Hi3516CV610、Hi3511CV100不支持MIPI_TX。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
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_TX 接口的应用层支持MIPI DSI、MIPI CSI-2协议的发送,物理层支持MIPI D-PHY-V1.2串行输出。
The Display Serial Interface(DSI)接口是移动行业处理器接口联盟(Mobile Industry Processor Interface alliance, MIPI联盟)定义的一种高速串行接口,主要用于处理器和显示模块之间的连接。Camera Serial Interface 2(CSI-2)是MIPI联盟定义的另一种高速接口,主要用于图像采集模块和处理器之间的连接。
说明:
Hi3516CV610、Hi3511CV100不支持MIPI_TX。
重要概念
-
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有两种同步方式:
-
DOL
DOL的全称是Digital Overlap,指SONY的WDR功能。
功能描述
MIPI_RX是一个支持多种差分视频输入接口的采集单元,通过combo-PHY接收MIPI/LVDS/sub-LVDS/HiSPI/DC接口的数据,通过不同的功能模式配置,MIPI_RX可以支持多种速度和分辨率的数据传输需求,支持多种外部输入设备。最大支持Lane个数如表1所示。
表 1 最大支持Lane的个数
MIPI_RX能同时对接多个sensor,最多对接sensor的数目如表2所示。
表 2 最大对接sensor或mipi csi发送器数目
MIPI_RX最大能同时对接不同数量的sensor或mipi csi发送器,每个sensor或mipi csi发送器需要的Lane也不尽相同。因此用户需要确定MIPI_RX的LANE分布模式。具体的Lane分布模式请参见表3。
表 3 MIPI_RX Lane分布模式
MIPI_RX具体的Lane管脚连接请参见表4。
表 4 MIPI_RX Lane管脚关系图
功能宏配置指南
MIPI_RX提供功能宏。配置方式如下:
- 配置路径:smp/a7_linux/source、smp/a7_linux/source/out/include
- 配置文件:cfg.mak、autoconf.h
例如:
LVDS默认配置:
- cfg.mak: export CONFIG_OT_MIPIRX_LVDS_SUPPORT=y
- autoconf.h: #define CONFIG_OT_MIPIRX_LVDS_SUPPORT 1
若想关掉LVDS功能:
- 把cfg.mak里改为# CONFIG_OT_MIPIRX_LVDS_SUPPORT is not set(注意前面加#)
-
把autoconf.h里#define CONFIG_OT_MIPIRX_LVDS_SUPPORT 1整行删除。
CONFIG_OT_MIPIRX_LVDS_SUPPORT
【描述】
配置LVDS功能宏。
【解决方案差异】
【注意】
确认不需要支持LVDS场景时,可将此功能宏去使能,可以带来code size优化,如果不需要优化,可忽略。
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的属性。
- OT_MIPI_SET_PHY_SPEED_MODE:设置设备PHY速率模式。
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_TX_SET_PN_SWAP:配置MIPI_TX配置PN互换。
OT_MIPI_SET_DEV_ATTR
【描述】
设置MIPI_RX设备属性。
【语法】
【参数】
combo_dev_attr_t类型的指针。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件: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。
-
推荐的配置流程如下:
- 设置模式。
- 打开多路MIPI时钟。
- 复位多路sensor所对接的MIPI_RX。
- 打开多路sensor所连接的时钟。
- 复位对接的所有sensor。
- 配置MIPI_RX设备属性。
- 撤销复位多路sensor所对接的MIPI_RX。
- 撤销复位对接的所有sensor。
-
推荐的退出流程如下:
- 复位多路对接的sensor。
- 关闭多路sensor所连接的时钟。
- 复位多路sensor所对接的MIPI_RX。
- 清除多路sensor所对接的MIPI_RX设备的配置。
- 关闭多路MIPI时钟。
-
操作SENSOR复位信号线和时钟信号线会对所连接到该信号线的所有sensor都产生效果。
【相关数据类型及接口】
- OT_MIPI_SET_HS_MODE
- OT_MIPI_RESET_SENSOR
- OT_MIPI_UNRESET_SENSOR
- OT_MIPI_RESET_MIPI
- OT_MIPI_UNRESET_MIPI
OT_MIPI_SET_HS_MODE
【描述】
设置MIPI_RX的Lane分布模式。
【语法】
【参数】
lane_divide_mode_t类型的指针。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
在接多路sensor输入时,建议在初始时根据硬件连接对整个lane分布进行全局的lane分布模式的设定,在之后的多路sensor采集过程中不能再调用此接口,否则可能对其他sensor采集有影响。
OT_MIPI_SET_PHY_CMVMODE
【描述】
设置共模电压模式。
【语法】
【参数】
phy_cmv_t类型的指针。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_RESET_SENSOR
【描述】
复位sensor。
【语法】
【参数】
sns_rst_source_t SENSOR复位信号线编号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_UNRESET_SENSOR
【描述】
撤销复位sensor。
【语法】
【参数】
sns_rst_source_t SENSOR复位信号线编号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_RESET_MIPI
【描述】
复位MIPI_Rx。
【语法】
【参数】
combo_dev_t设备号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_UNRESET_MIPI
【描述】
撤销复位MIPI_Rx。
【语法】
【参数】
combo_dev_t设备号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_ENABLE_MIPI_CLOCK
【描述】
打开MIPI设备的时钟。
【语法】
【参数】
combo_dev_t 设备号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_DISABLE_MIPI_CLOCK
【描述】
关闭MIPI设备的时钟。
【语法】
【参数】
combo_dev_t 设备号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_ENABLE_SENSOR_CLOCK
【描述】
打开sensor的时钟。
【语法】
【参数】
sensor的时钟设备源编号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_DISABLE_SENSOR_CLOCK
【描述】
关闭sensor的时钟。
【语法】
【参数】
sensor的时钟设备源编号。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
无。
OT_MIPI_SET_EXT_DATA_TYPE
【描述】
设置MIPI扩展DATA TYPE的属性。
【语法】
【参数】
ext_data_type_t类型的指针。
【返回值】
失败,其值参见错误码。 |
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
- 该接口主要用于接收sensor内嵌数据,请注意设备属性中的宽高需要加上内嵌数据的宽高(有效像素宽高+内嵌数据宽高)。
- 该接口只适用于MIPI接入;LVDS输入配置本接口可能导致异常。
- 需要先配置设备属性(详见OT_MIPI_SET_DEV_ATTR)后再配置该接口。
OT_MIPI_SET_PHY_SPEED_MODE
【描述】
设置设备PHY速率模式。
【语法】
【参数】
phy_speed_t 类型的指针。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_rx.h
【注意】
- 此接口用于单lane速率大于1.5Gbps时使用,默认小于等于1.5Gbps无需配置。
- 该接口需要在OT_MIPI_SET_DEV_ATTR设置设备属性后调用。
OT_MIPI_TX_SET_DEV_CFG
【描述】
设置MIPI_TX设备的属性。
【语法】
【参数】
MIPI Tx设备属性。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_tx.h
【注意】
- 必须在执行OT_MIPI_TX_ENABLE前调用此接口。
- 非连续时钟相比于连续时钟带宽要求会略高,因此Hi3519DV500上,配置非连续时钟可能达不到4K30时序。
- 执行该接口后,MIPI_TX将默认设置为LP(Lower Power)模式,LP时钟设置为:关闭。
OT_MIPI_TX_SET_CMD
【描述】
设置发送给MIPI_TX设备的命令数据。
【语法】
【参数】
发送给MIPI Tx设备的命令信息。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_tx.h
【注意】
- 在执行OT_MIPI_TX_ENABLE后,调用此接口,存在概率写失败的情况。
- 必须在执行OT_MIPI_TX_SET_DEV_CFG后,即配置设备后调用此接口。
- 此接口执行成功与否依赖硬件或lane链路的连通性,连通性异常,则返回失败。
OT_MIPI_TX_GET_CMD
【描述】
用于从外围设备读取信息。
【语法】
【参数】
详见get_cmd_info_t结构体说明。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_tx.h
【注意】
- 在执行OT_MIPI_TX_ENABLE后,调用此接口,存在概率读失败的情况。
- 必须在执行OT_MIPI_TX_SET_DEV_CFG后,即配置设备后调用此接口。
- 此接口执行成功与否依赖硬件或lane链路的连通性,连通性异常,则返回失败。
OT_MIPI_TX_ENABLE
【描述】
使能MIPI_TX设备。
【语法】
【参数】
无。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_tx.h
【注意】
- 使能前,必须调用OT_MIPI_TX_SET_DEV_CFG对设备进行配置。
- 此接口调用后MIPI_TX将工作于HS模式(High Speed),LP时钟设置为:打开。
OT_MIPI_TX_DISABLE
【描述】
禁用MIPI_TX设备。
【语法】
【参数】
无。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_tx.h
【注意】
- 此接口调用后MIPI_TX将工作于LP模式(Lower Power),LP时钟设置为:关闭。
- 设备禁用后需要使用OT_MIPI_TX_SET_DEV_CFG重新设置设备属性,才可使能设备。
OT_MIPI_TX_SET_PN_SWAP
【描述】
配置MIPI_TX配置PN互换。
【语法】
【参数】
详见combo_dev_pn_swap_t结构体说明。
【返回值】
【解决方案差异】
【需求】
头文件:ot_mipi_tx.h
【注意】
- 此接口在OT_MIPI_TX_SET_DEV_CFG配置之后,使用OT_MIPI_TX_ENABLE使能之前调用。
- PN互换状态在MIPI_TX去使能后PN状态恢复为默认。
数据类型
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 Channel数量。
- SYNC_CODE_NUM:定义LVDS每个Virtual Channel的同步码数量。
- MAX_EXT_DATA_TYPE_NUM:定义扩展DATA TYPE的数量。
- lane_divide_mode_t:MIPI_RX的Lane分布。
- input_mode_t:MIPI_RX输入接口类型。
- mipi_data_rate_t:MIPI_RX输入速率。
- img_rect_t:Mipi 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 identification 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设备同步信息。
- continue_mode_t:MIPI_TX连续时钟模式。
- combo_dev_cfg_t:MIPI_TX设备属性。
- cmd_info_t:发送给MIPI_TX设备的命令信息。
- get_cmd_info_t:MIPI_TX发送给接收端设备的命令信息以及回读的数据信息。
- MIPI_LANE_NUM_PER_DEV:定义MIPI_TX 支持的Lane长度。
- combo_dev_pn_swap_t:MIPI_TX数据lane PN互换属性信息。
- phy_speed_mode_t:PHY速率模式。
- phy_speed_t:PHY速率配置信息。
- mipirx_phy_speed_mode_t:PHY速率模式(仅Hi3511CV100支持)。
-
phy_speed_t:PHY速率配置信息(仅Hi3511CV100支持)。
OT_MIPI_IOC_MAGIC
【说明】
MIPI_RX ioctl命令的幻数。
【定义】
【成员】
无
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
无
combo_dev_t
【说明】
MIPI_RX设备号。
【定义】
【解决方案差异】
[0, MIPI_RX_MAX_DEV_NUM) |
|
[0, MIPI_RX_MAX_DEV_NUM) |
|
[0, MIPI_RX_MAX_DEV_NUM) |
【注意事项】
无。
【相关数据类型及接口】
SNS_MAX_RST_SOURCE_NUM
【说明】
sensor的复位信号线个数。
【定义】
【解决方案差异】
【注意事项】
无。
【相关数据类型及接口】
无
SNS_MAX_CLK_SOURCE_NUM
【说明】
sensor的时钟信号线个数。
【定义】
【解决方案差异】
【注意事项】
无
【相关数据类型及接口】
无
sns_rst_source_t
【说明】
sensor的复位信号线编号,软件上称为sensor的复位源。
【定义】
【解决方案差异】
【注意事项】
每条sensor复位信号线可以接两个sensor,用户需要根据板子的连线确认sensor复位信号线编号。不同的芯片的sensor复位信号线数目请参考取值范围。
【相关数据类型及接口】
无。
sns_clk_source_t
【说明】
sensor的时钟信号线编号,软件上称为SENSOR的时钟源。
【定义】
【解决方案差异】
【注意事项】
每条sensor时钟信号线可以接两个sensor,用户需要根据板子的连线确认sensor时钟信号线编号。不同的芯片的sensor复位信号线数目请参考取值范围。
【相关数据类型及接口】
MIPI_RX_MAX_DEV_NUM
【说明】
MIPI_RX支持的设备数。
【定义】
【解决方案差异】
【注意事项】
Hi3519DV500支持多个MIPI_RX设备同时使用。
【相关数据类型及接口】
无
COMBO_MAX_LANE_NUM
【说明】
MIPI_RX的Lane总数目。
【定义】
【解决方案差异】
【注意事项】
无
【相关数据类型及接口】
无
MAX_LANE_NUM_PER_LINK
【说明】
MIPI_RX一个link的Lane数。
【定义】
【解决方案差异】
无
【注意事项】
这里的link是软件概念,软件上把一个逻辑的link拆分成了2个软件的link。
【相关数据类型及接口】
无
MIPI_LANE_NUM
【说明】
MIPI_RX的MIPI设备支持的最大Lane数。
【定义】
【解决方案差异】
【注意事项】
无
【相关数据类型及接口】
无
LVDS_LANE_NUM
【说明】
MIPI_RX的LVDS设备支持的最大Lane数。
【定义】
【解决方案差异】
【注意事项】
无。
【相关数据类型及接口】
无。
WDR_VC_NUM
【说明】
定义最多支持的Virtual Channel数量。
【定义】
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
无。
SYNC_CODE_NUM
【说明】
定义LVDS每个Virtual Channel的同步码数量
【定义】
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
无。
MAX_EXT_DATA_TYPE_NUM
【说明】
定义扩展DATA TYPE的数量。
【定义】
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
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_4 = 4, /* 2lane + 2lane + 4lane */
LANE_DIVIDE_MODE_BUTT
} lane_divide_mode_t;
【解决方案差异】
【注意事项】
-
只有MIPI需要设置Lane的分布。
-
Hi3516DV500、Hi3516CV610和Hi3511CV100中,LANE_DIVIDE_MODE_0表示4lane,LANE_DIVIDE_MODE_1表示 2lane + 2lane接入。
【相关数据类型及接口】
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;
【解决方案差异】
【注意事项】
无。
【相关数据类型及接口】
无。
img_rect_t
【说明】
Mipi 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_16BIT,DATA_TYPE_YUV420_8BIT_LEGACY,DATA_TYPE_YUV422_PACKED不支持,其余都支持 |
|
【注意事项】
对于Hi3511CV100,VI的YUV420、YUV422在mipi中要配置成RAW16。
【相关数据类型及接口】
无。
ext_data_type_t
【说明】
MIPI 扩展DATA TYPE属性。
【定义】
typedef struct {
combo_dev_t devno;
unsigned int num;
unsigned int ext_data_bit_width[[MAX_EXT_DATA_TYPE_NUM](#ZH-CN_TOPIC_0000001338996354)];
unsigned int ext_data_type[[MAX_EXT_DATA_TYPE_NUM](#ZH-CN_TOPIC_0000001338996354)];
} ext_data_type_t;
【成员】
对应扩展DATA TYPE输入数据的位宽,可支持8bit/10bit/12bit/14bit/16bit, 当设置为0时,表示使用embedded data |
|
【解决方案差异】
无
【注意事项】
无
【相关数据类型及接口】
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;
【成员】
【解决方案差异】
无
【注意事项】
VC模式时OT_MIPI_WDR_MODE_NONE与OT_MIPI_WDR_MODE_VC配置等效,一般线性模式下配置为OT_MIPI_WDR_MODE_NONE,VC_WDR模式要根据sensor的情况来确定模式的配置,如果sensor数据是帧头共享的(两帧只有一个帧开始和帧结束标记),应该配置为MIPI_WDR_MODE_VC,如果不是,应该配置为MIPI_WDR_MODE_NONE。
【相关数据类型及接口】
无
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;
【成员】
当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;
【成员】
【解决方案差异】
【注意事项】
- 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同步方式
|
请参考图1。 |
|
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;
【成员】
长短曝光帧有独立的SOF-EOF、SOL-EOL或者invalid SAV-invalid EAV, valid SAV-valid EAV。 |
|
- LVDS_VSYNC_SHARE同步方式:
- LVDS_VSYNC_HCONNECT同步方式:
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
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_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;
【成员】
FID作为Frame information column插入在同步码之后的第一个像素之前,DOL 5个字段的同步码需要将fid_type配置为LVDS_FID_IN_DATA。 |
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
无。
lvds_fid_attr_t
【说明】
Frame identification ID配置信息。
【定义】
【成员】
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
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;
【成员】
vsync类型,当wdr_mode为DOL模式并且sync_mode为LVDS_SYNC_MODE_SAV时,需要配置vsync的类型。 |
|
frame identification类型,当wdr_mode为DOL模式,并且sync_mode为LVDS_SYNC_MODE_SAV时,需要配置。 |
|
发送端(sensor)和接收端(MIPI_RX) lane的对应关系 lane id的配置方式请参考“MIPI RX Lane id如何配置”。 |
|
每个Virtual Channel有4个同步码,根据同步模式不同,分别表示SOF/EOF/ SOL/EOL的同步码或者invalid SAV/invalid EAV/ valid SAV/valid EAV的同步码。 |
【解决方案差异】
无。
【注意事项】
使用该结构体,LVDS的LANE同步码同步到达。
【相关数据类型及接口】
- lvds_wdr_mode_t
- lvds_sync_mode_t
- data_type_t
- lvds_bit_endian_t
- lvds_vsync_type_t
- lvds_fid_type_t
- OT_MIPI_SET_DEV_ATTR
phy_cmv_mode_t
【说明】
PHY共模电压模式。
【定义】
【成员】
【解决方案差异】
无。
【注意事项】
无。
【相关数据类型及接口】
无。
phy_cmv_t
【说明】
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;
【成员】
如果input_mode配置为INPUT_MODE_SUBLVDS/INPUT_MODE_LVDS/INPUT_MODE_HISPI,则必须配置lvds_attr |
【解决方案差异】
【注意事项】
- img_rect属性需要满足x,y>=0,width、height和VI配置保持一致,以满足VI输入最小分辨率。
- img_rect属性配置为 width = 0 且 height = 0 时,禁用mipi crop剪裁功能。在某些输入宽高动态变化场景下需要禁用mipi crop。仅Hi3519DV500适用。
- img_rect属性配置本身没有2对齐的限制,但vi的输入有2对齐的限制,因此需要综合考虑。
- img_rect属性配置最大值在软件上没有限制,在满足phy data rate的前提下,根据前端实际输出配置即可。
- Hi3511CV100上img_rect属性配置的宽高需要包含随路帧信息的高度。
【相关数据类型及接口】
无。
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输出或外设操作模式。
【定义】
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 vact;
unsigned short vbp;
unsigned short vfp;
unsigned short hact;
unsigned short hbp;
unsigned short hfp;
unsigned short hpw;
unsigned short vpw;
} sync_info_t;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
continue_mode_t
【说明】
MIPI_TX连续时钟模式。
【定义】
typedef enum {
MIPI_TX_CLK_LANE_CONTINUE = 0x0,
MIPI_TX_CLK_LANE_NON_CONTINUE = 0x1,
MIPI_TX_CLK_LANE_BUTT
} continue_mode_t;
【成员】
【注意事项】
无。
【相关数据类型及接口】
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 */
continue_mode_t clklane_continue_mode;
} combo_dev_cfg_t;
【成员】
lane个数和模式配置,取决于lane_id中非-1值的个数,仅四种模式可选,且lane个数、lane号码、lane顺序可调整: 配置方法参考本章MIPI TX Lane id如何配置小节。 4 lane模式:lane0,lane1,lane2,lane3 1 lane模式,配置成:lane_id[4] = {0, -1, -1, -1} 2 lane模式,配置成:lane_id[4] = {0, 1, -1, -1} |
|
MIPI_TX输出速率,输出范围请参考芯片手册“MIPI_TX”章节,MIPI_TX高速模式的速率范围的描述,单位是Mbps。 |
|
|
取值范围:[MIPI_TX_CLK_LANE_CONTINUE, MIPI_TX_CLK_LANE_NON_CONTINUE] |
【注意事项】
无。
【相关数据类型及接口】
无。
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;
【成员】
|
长指令的数据长度,范围:(0, MIPI_TX_SET_DATA_SIZE],单位:字节。 |
|
|
【注意事项】
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;
【成员】
预期获取的数据字节数,范围:(0, MIPI_TX_GET_DATA_SIZE]。 |
|
【注意事项】
无。
【相关数据类型及接口】
无。
MIPI_LANE_NUM_PER_DEV
【说明】
定义MIPI_TX 支持的Lane长度。
【定义】
【注意事项】
无。
【相关数据类型及接口】
无。
combo_dev_pn_swap_t
【说明】
MIPI_TX数据lane PN互换属性信息。
【定义】
typedef struct {
unsigned int devno;
unsigned char pn_swap[MIPI_LANE_NUM_PER_DEV];
} combo_dev_pn_swap_t;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
phy_speed_mode_t
【说明】
PHY速率模式。
【定义】
typedef enum {
PHY_SPEED_LE1500M_BITPERSEC = 0x00,
PHY_SPEED_GT1500M_BITPERSEC = 0x01,
PHY_SPEED_BUTT
} phy_speed_mode_t;
【成员】
【解决方案差异】
Hi3511CV100不支持。
【注意事项】
无。
【相关数据类型及接口】
无。
phy_speed_t
【说明】
PHY 速率配置信息。
【定义】
【成员】
【解决方案差异】
Hi3511CV100不支持。
【注意事项】
无。
【相关数据类型及接口】
mipirx_phy_speed_mode_t
【说明】
PHY速率模式。
【定义】
typedef enum {
PHY_SPEED_LE1500M_BITPERSEC = 0x00,
PHY_SPEED_GT1500M_BITPERSEC = 0x01,
PHY_SPEED_BUTT
} mipirx_phy_speed_mode_t;
【成员】
【解决方案差异】
仅Hi3511CV100支持。
【注意事项】
无。
【相关数据类型及接口】
无。
phy_speed_t
【说明】
PHY 速率配置信息。
【定义】
【成员】
【解决方案差异】
仅Hi3511CV100支持。
【注意事项】
无。
【相关数据类型及接口】
MIPI TX模块参数
g_smooth
g_smooth模块参数用于实现平滑过渡,使用方法如下:
在Linux操作系统下,加载MIPI TX驱动的时候可以控制是否复位MIPI TX的逻辑。
- insmod ot_mipi_tx.ko g_smooth=1:加载ko时不进行逻辑复位。
- insmod ot_mipi_tx.ko g_smooth=0:加载ko时进行逻辑复位。
Proc信息
MIPI_RX Proc信息(Hi3519DV500)
MIPI_RX正常工作状态下proc信息中宽高应该是稳定不变且和sensor输出时序的宽高匹配,并且MIPI_RX各种错误中断计数为0。如果错误中断计数不为0,请检查MIPI_RX相关属性是否配置正确。
【调试信息】
[MIPI_RX] Version: [Hi3519DV500V1.0.0.0 B010 Release], Build Time[Jan 25 2022, 11:06:37]
-----mipi lane divide mode----------------------------------------------------------
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 speed_mode
0 0, 1, 2, 3, -1, -1, -1, -1 LE1500Mbps
-----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_correct vc1_ecc_correct vc2_ecc_correct vc3_ecc_correct
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 dbg info-----------------------------------------------------------------------------------------------------
phyno skew_len0 skew_len1
【调试信息分析】
- MIPI_RX通过Phy接收sensor的差分数据,Phy Controller检测到同步头后,将每条lane上的数据对齐;
- Pixel Controller解析同步信息并按照raw data的位宽将lane上面的数据合并为Pixel数据;Output模式将Pixel数据发送给后级模块。
- Phy Controller 和 Pixel Controller由sensor的pixel clk提供时钟,output模块的时钟为称为随路时钟,与后级模块的工作时钟相同。MIPI_RX的crop功能在Pixel Controller的末端实现,所以Crop后可以降低需要的随路时钟。

【参数说明】
|
||
MIPI_RX Proc信息(Hi3516CV610)
Module: [MIPI_RX], Build Time[Jan 15 2024, 18:12:16]
-------------------------------------------------------lane_mode--------------------------------------------------------
lane_mode :4 | | | |
-------------------------------------------------------port_attr--------------------------------------------------------
port_id :0 |mipirx_work_mode :mipi |data_rate :x1 |mipirx_data_type :raw_12 |
img_rect_x :0 |img_rect_y :0 |img_width :1920 |img_height :1080 |
lane_id :0,1,-1,-1 |wdr_mode :DOL |ext_dt_1 :0x2c |ext_dt_width_1 :12 |
ext_dt_2 :0x2c |ext_dt_width_2 :12 |ext_dt_3 :0x2c |ext_dt_width_3 :12 |
sync_mode :SOF |data_endian :BIG |sync_code_endian :BIG | |
wdr_type :none |L0_VC0_scode_0 :0x2 |L0_VC0_scode_1 :0x3 |L0_VC0_scode_2 :0x0 |
L0_VC0_scode_3 :0x1 |L0_VC1_scode_0 :0x2 |L0_VC1_scode_1 :0x3 |L0_VC1_scode_2 :0x0 |
L0_VC1_scode_3 :0x1 |L1_VC0_scode_0 :0x12 |L1_VC0_scode_1 :0x13 |L1_VC0_scode_2 :0x10 |
L1_VC0_scode_3 :0x11 |L1_VC1_scode_0 :0x12 |L1_VC1_scode_1 :0x13 |L1_VC1_scode_2 :0x10 |
L1_VC1_scode_3 :0x11 |L2_VC0_scode_0 :0x6 |L2_VC0_scode_1 :0x7 |L2_VC0_scode_2 :0x4 |
L2_VC0_scode_3 :0x5 |L2_VC1_scode_0 :0x6 |L2_VC1_scode_1 :0x7 |L2_VC1_scode_2 :0x4 |
L2_VC1_scode_3 :0x5 |L3_VC0_scode_0 :0x16 |L3_VC0_scode_1 :0x17 |L3_VC0_scode_2 :0x14 |
L3_VC0_scode_3 :0x15 |L3_VC1_scode_0 :0x16 |L3_VC1_scode_1 :0x17 |L3_VC1_scode_2 :0x14 |
L3_VC1_scode_3 :0x15 | | | |
-------------------------------------------------------clk_state--------------------------------------------------------
sensor_clk :1 |mipi_clk :1 | | |
--------------------------------------------------------phy_info--------------------------------------------------------
phy_id :0 |phy_en :1 | | |
phy_d0_term_en :1 |phy_d1_term_en :1 |phy_d2_term_en :0 |phy_d3_term_en :0 |
lane0_en :1 |lane1_en :1 |lane2_en :0 |lane3_en :0 |
lane0_map :0x0 |lane1_map :0x1 |lane2_map :0x2 |lane3_map :0x3 |
cil_d0_cur_stat :HS_LP00 |cil_d0_nxt_stat :HS_LP00 |cil_d1_cur_stat :HS_LP00 |cil_d1_nxt_stat :HS_LP00 |
cil_d2_cur_stat :IDLE |cil_d2_nxt_stat :IDLE |cil_d3_cur_stat :IDLE |cil_d3_nxt_stat :IDLE |
cil_clk_cur_stat :HS_LP00 |cil_clk_nxt_stat :HS_LP00 |cil_clk2_cur_stat:LP11 |cil_clk2_nxt_stat:LP11 |
------------------------------------------------------data_detect-------------------------------------------------------
phy_id :0 |freq_measure :40MHz | | |
lane0_data :0x8d |lane1_data :0x16 |lane2_data :0x0 |lane3_data :0x0 |
mipi_ph_d0 :0x2b |mipi_ph_d1 :0x88 |mipi_ph_d2 :0x0 |mipi_ph_d3 :0x0 |
mipi_data0 :0x16 |mipi_data1 :0x15 |mipi_data2 :0x0 |mipi_data3 :0x0 |
mipi_vc0_w :1920 |mipi_vc0_h :1080 |mipi_vc1_w :1920 |mipi_vc1_h :1080 |
mipi_vc2_w :0 |mipi_vc2_h :0 |mipi_vc3_w :0 |mipi_vc3_h :0 |
lvds_data0 :0x0 |lvds_data1 :0x0 |lvds_data2 :0x0 |lvds_data3 :0x0 |
lvds_l0_width :0 |lvds_l0_height :0 |lvds_l1_width :0 |lvds_l1_height :0 |
lvds_l2_width :0 |lvds_l2_height :0 |lvds_l3_width :0 |lvds_l3_height :0 |
lvds_vc0_w :0 |lvds_vc0_h :0 |lvds_vc1_w :0 |lvds_vc1_h :0 |
lvds_vc2_w :0 |lvds_vc2_h :0 |lvds_vc3_w :0 |lvds_vc3_h :0 |
lvds_l02_pix_num :0 |lvds_l13_pix_num :0
------------------------------------------------------phy_err_irq-------------------------------------------------------
phy_id :0 | | | |
clk_fsm_tmout :0x0 |clk_fsm_escape :0x0 |d0_fsm_tmout :0x0 |d1_fsm_tmout :0x0 |
d2_fsm_tmout :0x0 |d3_fsm_tmout :0x0 |d0_err_escape :0x0 |d1_err_escape :0x0 |
d2_err_escape :0x0 |d3_err_escape :0x0 | | |
--------------------------------------------------------mipi_err--------------------------------------------------------
vc0_crc_err :0x0 |vc1_crc_err :0x0 |vc2_crc_err :0x0 |vc3_crc_err :0x0 |
vc0_ecc_err :0x0 |vc1_ecc_err :0x0 |vc2_ecc_err :0x0 |vc3_ecc_err :0x0 |
vc0_frm_num_err :0x0 |vc1_frm_num_err :0x0 |vc2_frm_num_err :0x0 |vc3_frm_num_err :0x0 |
vc0_frm_mismatch :0x0 |vc1_frm_mismatch :0x0 |vc2_frm_mismatch :0x0 |vc3_frm_mismatch :0x0 |
vsync_cnt :0xe |rd_data_fifo_err :0x2 |wr_data_fifo_err :0x12f9e |rd_cmd_fifo_err :0x3 |
wr_cmd_fifo_err :0x0 |data_fifo_n_emt :0x12f5c |cmd_fifo_n_emt :0x0 | |
--------------------------------------------------------lvds_err--------------------------------------------------------
rd_fifo_err_lk0 :0x0 |wr_fifo_err_lk0 :0x0 |rd_fifo_err_lk1 :0x0 |wr_fifo_err_lk1 :0x0 |
lane0_sync_err :0x0 |lane1_sync_err :0x0 |lane2_sync_err :0x0 |lane3_sync_err :0x0 |
vsync_cnt :0x0 | | | |
-------------------------------------------------------align_err--------------------------------------------------------
fifo_ovfl :0x0 |lane0_fifo_ovfl :0x0 |lane1_fifo_ovfl :0x0 |lane2_fifo_ovfl :0x0 |
lane3_fifo_ovfl :0x0 | | | |
-------------------------------------------------------diagnosis--------------------------------------------------------
【参数说明】
MIPI_RX Proc信息(Hi3511CV100)
-------------------------------------------------------lane_mode--------------------------------------------------------
lane_mode :4 | | | |
-------------------------------------------------------port_attr--------------------------------------------------------
port_id :0 |mipirx_work_mode :mipi |data_rate :x1 |mipirx_data_type :raw_16 |
img_rect_x :0 |img_rect_y :0 |img_width :1920 |img_height :1080 |
lane_id :0,1,2,3 |wdr_mode :none | | |
-------------------------------------------------------clk_state--------------------------------------------------------
sensor_clk :N |mipi_clk :Y |bdl_clk :Y | |
--------------------------------------------------------phy_info--------------------------------------------------------
phy_id :0 |phy_en :Y | | |
phy_d0_term_en :Y |phy_d1_term_en :Y |phy_d2_term_en :Y |phy_d3_term_en :Y |
lane0_en :Y |lane1_en :Y |lane2_en :Y |lane3_en :Y |
lane0_map :0x0 |lane1_map :0x1 |lane2_map :0x2 |lane3_map :0x3 |
cil_d0_cur_stat :HS_LP00 |cil_d0_nxt_stat :HS_LP00 |cil_d1_cur_stat :HS_LP00 |cil_d1_nxt_stat :HS_LP00 |
cil_d2_cur_stat :IDLE |cil_d2_nxt_stat :IDLE |cil_d3_cur_stat :IDLE |cil_d3_nxt_stat :IDLE |
cil_clk_cur_stat :HS_LP00 |cil_clk_nxt_stat :HS_LP00 |cil_clk2_cur_stat:LP11 |cil_clk2_nxt_stat:LP11 |
------------------------------------------------------data_detect-------------------------------------------------------
phy_id :0 |freq_measure :328MHz | | |
lane0_data :0xa9 |lane1_data :0x85 |lane2_data :0x86 |lane3_data :0x0 |
mipi_ph_d0 :0x2e |mipi_ph_d1 :0x0 |mipi_ph_d2 :0xf |mipi_ph_d3 :0x12 |
mipi_data0 :0xa2 |mipi_data1 :0x7f |mipi_data2 :0x7f |mipi_data3 :0x82 |
mipi_vc0_w :1920 |mipi_vc0_h :1080 |mipi_vc1_w :0 |mipi_vc1_h :0 |
mipi_vc2_w :0 |mipi_vc2_h :0 |mipi_vc3_w :0 |mipi_vc3_h :0 |
bdl_ldo_en :1 |bdl_lane_en :1 |bdl_en :0 |bdl_m_val :0 |
bdl_code_val :0 | | | |
------------------------------------------------------phy_err_irq-------------------------------------------------------
phy_id :0 | | | |
clk_fsm_tmout :0 |clk_fsm_escape :0 |d0_fsm_tmout :0 |d1_fsm_tmout :0 |
d2_fsm_tmout :0 |d3_fsm_tmout :0 |d0_err_escape :0 |d1_err_escape :0 |
d2_err_escape :0 |d3_err_escape :0 | | |
--------------------------------------------------------mipi_err--------------------------------------------------------
vc0_crc_err :0 |vc1_crc_err :0 |vc2_crc_err :0 |vc3_crc_err :0 |
vc0_ecc_err :0 |vc1_ecc_err :0 |vc2_ecc_err :0 |vc3_ecc_err :0 |
vc0_frm_num_err :3 |vc1_frm_num_err :0 |vc2_frm_num_err :0 |vc3_frm_num_err :0 |
vc0_frm_mismatch :3 |vc1_frm_mismatch :0 |vc2_frm_mismatch :0 |vc3_frm_mismatch :0 |
vsync_cnt :10 |rd_data_fifo_err :0 |wr_data_fifo_err :0 |rd_cmd_fifo_err :0 |
wr_cmd_fifo_err :0 |data_fifo_n_emt :0 |cmd_fifo_n_emt :0 | |
-------------------------------------------------------align_err--------------------------------------------------------
fifo_ovfl :1 |lane0_fifo_ovfl :1 |lane1_fifo_ovfl :1 |lane2_fifo_ovfl :1 |
lane3_fifo_ovfl :0 | | | |
-------------------------------------------------------diagnosis--------------------------------------------------------
【参数说明】
|
||
MIPI_TX Proc信息
MIPI_TX的proc信息主要有:MIPI_TX设备模块参数、MIPI_TX设备配置信息、MIPI_TX时序配置信息、MIPI_TX设备状态信息。
【调试信息】
Module: [MIPI_TX], Build Time[Sep 15 2022, 10:05:54]
----------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 clklane_continue_mode
0 0 1 2 3 1 378 60000 0 3
NON-CONTINUE
----------mipi_tx sync config---------------------------
hact hbp hfp hsa vact vbp vfp vsa
800 20 32 20 1280 6 8 4
----------mipi_tx pn_swap config------------------------
lane0_pn lane1_pn lane2_pn lane3_pn
0 0 0 0
----------mipi_tx dev status---------------------------
width height horiall vertall hbp hsa vsa sync_check
800 1280 843 1298 824 32 4 0
【调试信息分析】
MIPI_TX模块参数、MIPI_TX设备配置信息、MIPI_TX时序配置信息等为设备启动前通过接口配置的信息;MIPI_TX设备状态信息是设备运行时检测到的部分时序信息:有效宽高、水平总宽度、垂直总高度。
【参数说明】
|
2: OUT_FORMAT_RGB_18BIT_LOOSELY 6: OUT_FORMAT_YUV420_8BIT_NORMAL |
||
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数为8,理解为sensor的Lane数目最多8个,由于sensor实际只有4个Lane,只输出数据到MIPI的4个Lane,需要将sensor未连接的或者不存在的Lane的lane_id配置为-1,所以lane_id配置如下:

如果Sensor的Lane id和MIPI_RX的Lane id线序不是一一对应,则存在乱序配置的场景,下面举例进行说明乱序场景下Lane id该如何配置。

如图1所示,sensor的lane 0对应MIPI_RX的lane 1,sensor的lane 1对应MIPI_RX的lane 0,该场景的lane id的配置为{1, 0, 2, 3},也可表示为
lane_id[0] = 1; // 索引号表示sensor的lane id,值表示MIPI_RX的lane id
lane_id[1] = 0;
lane_id[2] = 2;
lane_id[3] = 3;
其中lane_id[0]中的0表示的是sensor的lane ID,lane_id[0] = 1中的1则表示MIPI_RX的lane ID。
【注意事项】
sensor非标接入时注意事项:
- 非标接入指接入的实际sensor lane数小于对应hs_mode lane分布模式下DEV对应lane数,如4+4模式下,dev0对接1lane sensor或2lane sensor,不推荐非标接入场景。
- 仅支持1,2,4,6,8 lane sensor,其他lane数sensor接入不支持。
- 8 lane模式下接入1,2,4 lane sensor时,不支持跨phy混合使用lane,请使用lane0~3或者4~7。
- 8 lane模式下接入6 lane sensor时,仅支持4+2/2+4跨phy混合使用。
- 单lane sensor可使用lane 0/1/4/5,双lane sensor优先使用0,2/1,3/4,6/5,7,如有需要也可使用0,1/4,5。
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数为4,屏幕实际可能有4、2个Lane,只使用到MIPI TX的4个Lane或2个lane,需要将屏幕端未连接的或者不存在的Lane的lane_id配置为-1,所以4lane屏幕时,lane_id配置如下:

表 2 2lane屏幕与MIPI_TX管脚关系
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
MIPI_RX自诊断信息
自诊断的提示信息会显示在proc下的diagnosis栏。如果没有显示任何提示,则表示根据当前已知的诊断都没有问题。
【提示说明】
MIPI_RX Debug
Hi3519DV500/Hi3516CV610:
echo command para1 para2 para3 path explaination para descrption
echo cleanerr > /proc/umap/mipi_rx clean err cnt
echo openlane 0 0 0 > /proc/umap/mipi_rx open lane p0(port id) p1(lane index) p2(lane value)
echo closelane 0 0 > /proc/umap/mipi_rx close lane p0(port id) p1(lane index)
echo colorbar 0 1 1 > /proc/umap/mipi_rx color bar setting p0(0:disable, 1:enable) p1(1:stripe, 0:fade) p2(0:lvds 1:mipi)
echo cropxy 0 1 1 > /proc/umap/mipi_rx set crop coordinate p0(port id) p1(x-coordinate x) p2(y-coordinate)
echo cropwh 0 1 1 > /proc/umap/mipi_rx set crop size p0(port id) p1(width) p2(height)
echo seteq 0 8 > /proc/umap/mipi_rx set eq p0(port id) eq(0-0xF)
Hi3511CV100:
echo command para1 para2 para3 para4 para5 path explaination para descrption
echo cleanerr > /proc/umap/mipi_rx clean err cnt
echo openlane 0 0 0 > /proc/umap/mipi_rx open lane p0(port id) p1(lane index) p2(lane value)
echo closelane 0 0 > /proc/umap/mipi_rx close lane p0(port id) p1(lane index)
echo colorbar 0 1 0 1 0x1F > /proc/umap/mipi_rx color bar setting p0*(0:disable, 1:enable) p1*(0:lvds 1:mipi) p2(0:purple, 1:green) p3(0:fade, 1:stripe, 2:diagonal, 3:flat) p4(colorbar width)
echo cropxy 0 1 1 > /proc/umap/mipi_rx set crop coordinate p0(port id) p1(x-coordinate x) p2(y-coordinate)
echo cropwh 0 1 1 > /proc/umap/mipi_rx set crop size p0(port id) p1(width) p2(height)
echo seteq 0 8 > /proc/umap/mipi_rx set eq p0(port id) eq(0-0xF)
【参数说明】
Proc定位建议
MIPI定位建议
- 连续查看两次proc,确认lane_data是否有数据且数据是否有变化,如有变化,则表示PHY层有数据进来,进行下一步骤。也可通过phy_info 中的cil_stat来确认当前每条lane处于什么状态。其中“IDLE”表示没有数据进来,“LP11”表示该lane处于低功耗模式,“HS_LP00”表示该lane处于高速传输数据的状态。
- 查看mipi_ph是否有数据,特别是mipi_ph_d0,一般表示的是数据格式。通过对比协议可判断传进来的数据的数据格式,再将该格式与MIPI配置进行比对,如果不一致,则调整sensor配置。如果一致,进行下一步。
- 查看mipi_data是否有数据,如果没有数据,则表示mipi没有解析出来,需要排查mipi的配置。
- 多次查看proc,phy_err/mipi_err/align_err是否有中断持续上报。
- 遇到crc或ecc的err有持续增加,通常为硬件信号不稳定,建议排查硬件排线或检查信号质量;
- 遇到fifo相关的err有持续增加,表示数据太快无法正常读写,建议提升data rate或减少分辨率或增加sensor消隐区。
LVDS定位建议
- 连续查看两次proc,确认lane_data是否有数据且数据是否有变化,如有变化,则表示PHY层有数据进来,进行下一步骤。也可通过phy_info 中的cil_stat来确认当前每条lane处于什么状态。其中“IDLE”表示没有数据进来,“LP11”表示该lane处于低功耗模式,“HS_LP00”表示该lane处于高速传输数据的状态。
- 查看lvds_data是否有数据,如果没有数据,表示lvds没有解析到数据。建议排查同步码是否配置正确。
- 查看phy_err/lvds_err/align_err是否有中断持续上报。
- 遇到sync_err持续增加,则表示部分lane无法检测到同步头,需排查同步头、大小端、每个像素的bit数是否和发送端匹配;
- 遇到fifo相关的err有持续增加,表示数据太快无法正常读写,建议提升data rate或减少分辨率或增加sensor消隐区。
LVDS配置示例
在LVDS传输模式中,行场同步信号集成在数据流中,在数据流中的特殊码型SOF和EOF分别表示帧的起始和结束,SOL和EOL分别表示行的起始和结束。在数据流中,SOF/EOF/SOL/EOL由4个字段构成,每个字段的位宽与像素数据保持一致,前3个字段为固定的基准码字,根据第4个字段来区分帧/行的起始或结束。
表 1 LVDS同步码格式
同步码前三个字段固定,第4个字段标识行场的起始或结束。第4个字段的值由图像传感器厂商确定,不同的厂商会使用不同的数值。
表 2 LVDS同步码第4个字段举例
以4个Lane为例,LVDS同步码和像素数据在各个Lane上传输方式如图1所示,图中H表示同步码,P表示像素,H和P的位宽与图像传感器输出单个像素的位宽一致。各个数据通道首先传输4个像素位宽的同步码,紧接着是像素数据,像素数据的分布与通道数有关。

以12bit配置示例代码:
只需要配上述的第四个字段,sync_code每行是按照sof eof sol eol顺序
combo_dev_attr_t test =
{
.devno = 0,
.input_mode = INPUT_MODE_LVDS,
.data_rate = MIPI_DATA_RATE_X1,
.img_rect = {0, 0, 1920, 1080},
.lvds_attr =
{
.input_data_type = DATA_TYPE_RAW_12BIT,
.wdr_mode = HI_LVDS_WDR_MODE_NONE,
.sync_mode = LVDS_SYNC_MODE_SOF,
.vsync_attr = {LVDS_VSYNC_NORMAL, 0, 0},
.fid_attr = {LVDS_FID_NONE, HI_TRUE},
.data_endian = LVDS_ENDIAN_BIG,
.sync_code_endian = LVDS_ENDIAN_BIG,
.lane_id = {0, 2, 1, 3},
.sync_code = {
{
{0xAB0, 0xB60, 0x800, 0x9D0}, // lane 0
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0}
},
{
{0xAB0, 0xB60, 0x800, 0x9D0}, // lane 0
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0}
},
{
{0xAB0, 0xB60, 0x800, 0x9D0}, // lane 0
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0}
},
{
{0xAB0, 0xB60, 0x800, 0x9D0}, // lane 0
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0},
{0xAB0, 0xB60, 0x800, 0x9D0}
},
}
}
};

配置示例代码:
只需要配上述的第四个字段,sync_code每行是按照sof eof sol eol顺序
combo_dev_attr_t test =
{
.devno = 0,
.input_mode = INPUT_MODE_LVDS,
.data_rate = MIPI_DATA_RATE_X1,
.img_rect = {0, 0, 1920, 1080},
.lvds_attr =
{
.input_data_type = DATA_TYPE_RAW_12BIT,
.wdr_mode = HI_LVDS_WDR_MODE_NONE,
.sync_mode = LVDS_SYNC_MODE_SOF,
.vsync_attr = {LVDS_VSYNC_NORMAL, 0, 0},
.fid_attr = {LVDS_FID_NONE, HI_TRUE},
.data_endian = LVDS_ENDIAN_BIG,
.sync_code_endian = LVDS_ENDIAN_BIG,
.lane_id = {0, 2, 1, 3},
.sync_code = {
{
{0x002, 0x003, 0x000, 0x001}, // lane 0
{0x002, 0x003, 0x000, 0x001},
{0x002, 0x003, 0x000, 0x001},
{0x002, 0x003, 0x000, 0x001}
},
{
{0x012, 0x013, 0x010, 0x011}, // lane 1
{0x012, 0x013, 0x010, 0x011},
{0x012, 0x013, 0x010, 0x011},
{0x012, 0x013, 0x010, 0x011}
},
{
{0x006, 0x007, 0x004, 0x005}, // lane2
{0x006, 0x007, 0x004, 0x005},
{0x006, 0x007, 0x004, 0x005},
{0x006, 0x007, 0x004, 0x005}
},
{
{0x016, 0x017, 0x014, 0x015}, // lane3
{0x016, 0x017, 0x014, 0x015},
{0x016, 0x017, 0x014, 0x015},
{0x016, 0x017, 0x014, 0x015}
},
}
}
};
同步码和像素数据的传输是串行的,MIPI Rx支持数据的大小端可配置。以RAW12、大端模式为例,图像传感器输出单个像素点的时序如图3所示。

MIPI mipirx问题定位参考
mipirx报错可能性很多,可能是硬件设计、mipi排线质量,或发送的速率太快等问题;mipi信号不符合协议要求,无输出无信号,一些简单的配置首先确认,时钟配置、时钟地址是否正确。
- 调试sensor的lane模式时,mipirx要配置成对应模式,前提是需要sensor厂商提供sensor对应模式的新序列。例如客户想设置sensor为2+2lane模式,mipi端配置了2+2lane的模式,但是sensor用的是默认的4lane模式,模式不匹配,会导致出图异常。
-
sensor的datarate较高时,mipirx接收会报错,计算datarate的公式:[宽*高*频率*(线性1或WDR2)*(传输格式)]/lane数。如4lane 1920*1080P60 以WDR模式10bit传输,每lane的datarate为1920*1080*60*2*10/4=622.08Mbps
如果sensor给的datarate比计算出的值大很多的话,首先考虑sensor降速。
-
不出图问题,看mipirx的proc如果某几个通道没有数据,可以让硬件量一下信号,确定是不是真的没有数据,同步可以看gpio引脚配置是否正确。
-
mipi采集sensor输出的数据时,看proc发现帧带宽正常,高度比预期小很多。
- 首先可以测一个正常时候的速率,例如采集60fps时异常,30fps时正常。用示波器分别量60fps、30fps时的速率。
- 若60fps量出是594Mbps,30fps是890Mbps,大概率是60fps时lane的速率不够。需要sensor厂商出高一点的速率配置。
-
sensor接转接板接mipi,调试新方案没有出图,首先读proc及寄存器确定lane 2的数据一直是0,确定sensor出来的尺寸,需要为8字节对齐,比如1608*1137需要配成1608*1136,否则会报错。
- 在无信号时,看mipi的proc信息,发现mipi检测到宽高信息不对,ECC2校验错误。可以尝试改sensor某些配置,将mipi clk速率加大翻倍后正常。
MIPI mipitx问题定位参考
若按照版本包里给的phy_data_rate的计算公式来配置后,观察到mipitx proc的mipi_tx dev status里的检测参数和配置的不一致时,可以适当增大phy_data_rate的值来尝试解决这个问题。
错误码
MIPI_RX 输出API错误码如表1。
说明:
Hi3519DV500不支持错误码,返回值仅为-1。
表 1 MIPI_RX 输出API错误码






