MIPI CSI-2 Receiver Subsystem应用总结

本文转载自: 硬码农二毛哥微信公众号

在进行MIPI摄像头开发时,经常用到Xilinx的MIPI CSI-2 Receiver Subsystem IP,下面对该IP使用方法进行简单介绍。

系统组成

MIPI CSI-2 Receiver Subsystem由以下四部分组成:

• MIPI D-PHY

• MIPI CSI-2 RX Controller

• AXI Crossbar/Smart Connect

• Video Format Bridge

MIPI协议简介

要想正常使用该IP核,要对MIPI协议有所了解。

CSI-2 Layer Definitions
CSI-2可以分为PHY Layer 、Protocol Layer 和Application Layer 。

PHY Layer

由1到4路数据Lanes和1路时钟Lane组成。数据从MIPI摄像头输出,进入CSI-2 Receiver Subsystem中的D-PHY。

Protocol Layer

Protocol Layer 又分为三层,Pixel/Byte Packing/Unpacking Layer 、Low Level Protocol 和Lane Management 。

Pixel/Byte Packing/Unpacking Layer

CSI-2支持不同像素格式,配个像素可以从6bits到24bits。在接收侧,这一层将Low Level Protocol曾的bytes拆解成像素格式,传输到Application Layer 。

Low Level Protocol

Low Level Protocol(LLP)支持通过短包或长包传输任意数据。

Lane Management

根据应用要求,不同带宽可以选择1、2、3和4个Lanes。

Application Layer

这一层目标高级编码和解析数据流中的数据。

Low Level Protocol
Low Level Protocol Packet
Low Level Protocol 支持Long packets和Short packets。每包从LPS到SoT开始传输,从EoT到LPS结束传输。

相机设置
mipi摄像头通常使用IIC进行设置,摄像头寄存器数据有8bit和16bit两种,IIC代码需要支持两种数据传输。

mipi-csi2-rx

IP设置

Line Rate速率选择要与摄像头MIPI输出速率匹配。可以遵循如下原则:

1500 Mbps : The IP should be able to receive 600-1500Mbps data rate from the TX.

599 Mbps : The IP should be able to receive 300-599Mbps data rate from the TX.

299 Mbps : The IP should be able to receive 150-299Mbps data rate from the TX.

149 Mbps : The IP should be able to receive 80-149Mbps data rate from the TX.

video_aclk

video_aclk要根据摄像头数据速率和通道进行计算。

CSI输出时序
在MIPI协议中RAW格式数据如下:

当Pixels Per Clock选择2时,MIPI摄像头经过CSI-2 IP核后输出如下:

软件初始化
在摄像头输出数据前,要对MIPI CSI-2 Receiver Subsystem进行初始化,代码如下:

XCsiSs CsiSsInst;

u32 InitializeCsiSRxSs(u32 DeviceId)
{
u32 Status;
XCsiSs_Config *ConfigPtr;
ConfigPtr = XCsiSs_LookupConfig(DeviceId);
if (!ConfigPtr) {
return XST_FAILURE;
}
Status = XCsiSs_CfgInitialize(&CsiSsInst, ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS) {
xil_printf("MIPI CSI RX config initialization failed.\n\r");
return Status;
}
int main()
{
Status = InitializeCsiSRxSs(XCSISS_DEVICE_ID);
if (Status != XST_SUCCESS) {
xil_printf("CSI Rx Ss Init failed status = %x.\r\n", Status);
return XST_FAILURE;
}
XCsiSs_Reset(&CsiSsInst);
XCsiSs_Activate(&CsiSsInst, XCSI_ENABLE);
}

最新文章

最新文章