目录
(moblie industry processor interface 移动工业处理器接口)
mipi协议有很多种,比如DSI(display serial interface)、CSI(camera serial interface)
对于camera来说,现在的mipi协议是CSI-2,在MIPI CSI-2的流程中,SENINF其实是负责接收和处理从PHY层传输过来的数据的关键组件。
MIPI CSI-2流程
初始化阶段:
设备上电:摄像头和处理器上电。
配置寄存器:通过I2C或SPI接口配置摄像头模块的寄存器。
链路建立:
D-PHY(C-PHY)上电:MIPI D-PHY(C-PHY)层上电,准备传输数据。
Lane配置:选择使用的Lane数量。
数据传输准备:
LP(低功耗)模式:初始状态为低功耗模式。
HS(高速)模式切换:在传输数据前,从LP模式切换到HS模式。
数据传输:
帧同步:发送帧开始和结束信号。
数据封装:图像数据被封装成数据包,短包开始,长包正式传输数据,短包结束。
数据传输:通过数据通道传输数据包到处理器。
数据接收处理:
解包与解码:处理器接收数据包后,进行解码。
错误检测恢复:
错误检测:进行数据完整性检查。
错误恢复:尝试重传或进行其他恢复操作。
关闭与待机:
帧结束信号:传输完成后发送帧结束信号。
恢复LP模式:切换回低功耗模式。
其中seninf的流程如下图:
1.Sensor输入:
来自多个传感器(Sensor0、Sensor1等)的输入,每个传感器通过MIPI接口连接。
每个传感器都有独立的时钟域(clk domain)。
2.PHY层:
每个传感器连接到一个物理接口(PHY),用于处理MIPI信号。
PHY层负责将信号转换为适合进一步处理的格式。
3.SENINF模块:
包含多个通道(seninf1、seninf2等),用于接收和处理来自PHY的信号。
使用异步FIFO(First In, First Out)缓冲区来管理数据流。
4.Multiplexer(MUX):
数据通过多路复用器进行选择和路由。
将多个数据流整合,准备送往下游处理。
5.Buffer:
每个MUX后接一个缓冲区,暂存数据流以提高传输效率。
6.输出接口:
数据最后通过seninf_cam_mux传输至不同的图像信号处理器(ISP)接口。
综上,总的CSI-2流程就是:
1.初始化阶段:
设备上电:摄像头和处理器上电。
配置寄存器:通过I2C或SPI接口配置摄像头模块的寄存器。
setSeninfVC:设置SENINF的数据类型和虚拟通道。
2.链路建立:
D-PHY(C-PHY)上电:MIPI D-PHY(C-PHY)层上电,准备传输数据。
setSeninfCsi:初始化CSI PHY层,设置延迟和高速轨迹。
Lane配置:选择使用的Lane数量。
3.数据传输准备:
设置Lane和Trio数量:通过SENINF配置数据通道。
启用SENINF:启用CSI-2接口和SENINF。
LP(低功耗)模式:初始状态为低功耗模式。
HS(高速)模式切换:在传输数据前,从LP模式切换到HS模式。
4.数据传输:
帧同步:发送帧开始和结束信号。
数据封装:图像数据被封装成数据包。
数据传输:通过数据通道传输数据包到处理器。
5.数据接收与处理:
seninfMUXReleaseAll:释放所有信号复用。
seninfMUXArbitration:进行MUX仲裁。
enableMUX:启用信号复用。
解包与解码:SENINF负责数据包的解码和传输到处理器。
6.像素模式设置:
setSeninfMuxCtrl:设置信号复用和像素模式。
setSeninfTopMuxCtrl:配置顶层信号复用。
7.错误检测与恢复:
错误检测:进行数据完整性检查。
错误恢复:尝试重传或进行其他恢复操作。
8.完成设置:
CMD_SENINF_FINALIZE_CAM_MUX:设置完成,更新ISP时钟。
9.关闭与待机:
帧结束信号:传输完成后发送帧结束信号。
恢复LP模式:切换回低功耗模式。
CSI-2协议传输层
CSI-2协议从摄像头传感器到处理单元的整个过程可以分为3个层:应用层、协议层、物理层
可以简单地理解为
1.应用层处理图像数据的生成和使用。
2.协议层根据配置,把传入传出的像素进行编码打包/解码,传输控制和通道配置。
3.物理层把打包的数据流从发送端传到接收端,定义电气特性和信号传输标准。
先看一下物理层:D-PHY、C-PHY。
D-PHY协议最多支持5个Lane(通道)(一个时钟Lane,4个数据Lane),最少需要两个Lane(一个时钟Lane,一个数据Lane)。
每一个Lane有两根线,分别为P和N,信号以差分的方式传输。Clock Lane是必不可少的,Data Lane的数量可以根据传输数据的吞吐率要求来选择。
如上图表述的,每个lane可以按顺序平均分配一个一个的字节。
D-PHY是一种简单的源同步PHY,使用一个时钟通道和不同数量的数据通道。
C-PHY是一个A/B/C三线系统。每个lane里有三个信号在运行,三合一,时钟被嵌入到数据中,从而不需要单独的时钟通道。
显然的,实现嵌入时钟的目的是为了增加带宽,如上图每个lane可以按顺序平均分配两个两个的字节。
涉及到编码和解码,所以C-PHY必须CDR(Clock and Data Recovery,从三根线中分离出clock和data)。
再看协议层
从图中可以看到,协议层内部也是细分为三层的:Packing/Unpacking Format、Low Level Protocol 、Lane Manager Layer。
- 打包\封拆像素(Pixel Packing/Unpacking): 传输端将像素包拆为 bytes,接收端将 bytes 还原
- LLP (Low Level Protocol): 将数据里封装成不同形式的长包和短包。
- 通道管理(Lane Management): 将传输的数据流分配到一个或多个通道,并在接收端恢复原始数据流。
打包时,数据包结构分为短包和长包,整体上来看是一个短包开始,中间通过长包发送数据,又以短包结束的。
可以看到,无论是短包还是长包,都是从ST开始,ET结尾的。并且两个包中间会有一段LPS(Low Power State,低功耗状态)。
C-PHY 和 D-PHY 的包中格式也是不同的。
D-PHY的长包结构:
看到是由Packet Header(包头)、Packet Data(数据)、Packet Footer(包尾)组成的。
1.包头:设置一些信息
- Data Identifier (DI):包含虚拟通道标识符和数据类型信息,用于区分不同的虚拟通道和数据类型。
- 16-bit Word Count (WC):表示数据包中数据字的数量,接收端使用此值来确定数据包的结束。
- 8-bit Error Correction Code (ECC):用于数据包头的错误校正,可纠正1位错误并检测2位错误。
2.数据体:实际传输的数据内容,数据长度由Word Count定义。
3.包尾:检查数据完整性
- 16-bit Checksum/CRC:用于数据完整性校验,确保数据在传输过程中没有出错。
VC (Virtual Channels)虚拟通道,一个物理lane可以支持多个虚拟通道(VC)。在同一个物理通道上,可以通过逻辑分割来传输多个不同类型的数据流
DT(Data Type)数据类型
C-PHY的长包结构:
与D-PHY相比,
PH里开头多了一个预留位;
结束时的检查机制也变了D-PHY通常使用简单的校验码(如ECC),适合其差分信号传输和相对简单的物理层设计。C-PHY使用更复杂的CRC校验,以适应其三相信号编码的复杂性和高效的数据传输需求。CRC能够检测更多的错误类型,提高数据完整性。
检查之后还多了一段Filler,用于填充,确保所有通道传输相同数量的数据。
D-PHY的短包结构:
LPS (Low Power State) & SoT (Start of Transmission):标识传输开始和低功耗状态。
Data ID:标识数据类型。
16-Bit Short Packet Data Field:实际数据内容。
VCX:虚拟通道标识符。
ECC:错误校正。
特点:32位短包、包含错误校正码(ECC)以提高传输可靠性。
C-PHY的短包结构:
LPS & SoT:同样标识传输开始和低功耗状态。
RES:保留位,设置为零。
VCX:低3位用于虚拟通道标识符。
Data ID:标识数据类型。
16-Bit Short Packet Data Field:包含实际数据内容。
16-Bit Checksum (PH-CRC):用于包头的校验。
特点:6N x 16位短包,其中N为物理层通道数量、使用CRC校验以检测更多的错误类型。
可以看出,这俩短包的结构主要有这些区别
D-PHY:使用ECC进行错误校正。C-PHY:使用CRC进行错误检测。
D-PHY:较简单的32位结构。C-PHY:更复杂的结构,适应三相信号编码。
D-PHY:没有预留位。C-PHY:包含预留位(RES)支持协议扩展。
上文提到D-PHY和D-PHY的纠错机制不同,D-PHY用到的ECC,ECC的基本原理是通过添加冗余位来检测并纠正数据中的错误。
数据ID和字数计数被映射到包头中,ECC通过对这些数据进行计算生成。接收端同样计算ECC,并与传输的ECC比较,以检测和纠正1-bit错误。
图中Data ID为0x37,WC的低字节为0xF0,高字节为0x01,ECC通过对输入数据进行特定的数学运算生成,生成的ECC为0x02。
接收到的ECC也是0x02,说明没问题,如果这两个不一致则说明出现错误,通过分析ECC的变化,可以定位是哪一位发生了错误,对其翻转就完成了纠错。
C-PHY的纠错机制更高级,使用的是CRC,CRC主要用于确保数据在传输过程中没有发生错误,确保数据的完整性,但是不进行纠错。
如果检测出现有错误,就会让发送端重新发送出错的这一部分数据包。
长包的数据格式是:一帧图像由帧头(FS)开始,帧尾(FE)结束。一帧之间有多个行。
图中显示是一帧数据有多个长包发送的例子,其中有很多blanking:长包与长包之间的blanking就是line blanking;帧与帧之间的blanking就是frame blanking。目的都是为了同步数据。
要注意,FS和第一个数据包之间的空隙应该尽可能的小,最后一个数据包和FE之间也是。这样做是为了确保一个帧的开始和结束标志位可以更准确地表示这一帧地数据。
在定义中,一个长包加上后边的Line Blanking就是一个行(Line),如下图。
垂直同步,当前帧的FE信号出现后才允许出现下一帧的FS信号,确保帧的顺序和完整性,防止图像撕裂。
水平同步,当前行的LE信号出现后才允许出现下一行的LS信号,确保行数据正确排列,维持图像完整性。
EPD介绍:
EoT、LPS和SoT设计是为了在不需要高速传输时节约能耗,通过切换到低功耗状态来实现节能。
但是,对于需要快速连续传输的场景,频繁的状态切换会导致高延迟,影响整体性能。所以提出EPD,EPD的设计目标是在这些情况下通过减少不必要的状态切换来降低延迟,从而提高数据传输效率。
EPD的一个主要优势就是避免了从高速到低功耗再回到高速的切换。在原来的基础上把EoT、LPS、SoT三合一为EPD,并且PHY物理层生成的EPD元素被称为PDQ,可以快速处理包之间的间隔。
这种变化的优点和缺点很明显,牺牲资源来换取时间。
在C-PHY模式下要开启EPD模式,需要添加这两个16bit寄存器:
TX_REG_CSI_EPD_EN_SSP (EPD Enable and Short Packet Spacer):
最高位(MS bit):用于启用EPD。0
:使用传统EoT、LPS、SoT分隔符。1
:启用C-PHY EPD。
剩余15位(bits [14:0]):指定每通道在CSI-2短包后插入的Spacer Word数量(最多32,767个)。
TX_REG_CSI_EPD_OP_SLP (Long Packet Spacer):
最高位(MS bit):保留到未来使用。
剩余15位(bits [14:0]):指定每通道在CSI-2短包后插入的Spacer Word数量(最多32,767个)。
C-PHY的EPD分隔符包括“Spacer + SYN”。下图为2 lanes 的C-PHY的EPD模式示意图:
在D-PHY模式下开启EPD模式,配置这两个寄存器
TX_REG_CSI_EPD_EN_SSP(EPD Enable and Short Packet Spacer):
最高位(MS bit):0:使用传统EoT、LPS、SoT分隔符。1:启用D-PHY EPD。
如果EPD启用且选择了选项1(TX_REG_CSI_EPD_OP_SLP的第15位为0)或选项2(TX_REG_CSI_EPD_MISC_OPTIONS的第5位或第4位为1),则TX_REG_CSI_EPD_EN_SSP为每个通道的最小Spacer插入数量。
如果EPD启用且选择了选项2(TX_REG_CSI_EPD_OP_SLP的第15位为1),则TX_REG_CSI_EPD_MISC_OPTIONS为0,TX_REG_CSI_EPD_EN_SSP为每个通道的确切Spacer插入数量。
TX_REG_CSI_EPD_OP_SLP(EPD Option and Long Packet Spacer):(D-PHY启动EPD有两种选项)
最高位(MS bit):0:选择D-PHY EPD选项1。1:选择D-PHY EPD选项2。
如果EPD启用且选择了选项1或选项2,TX_REG_CSI_EPD_OP_SLP规定了每个通道的最小Spacer插入数量。
D-PHY的两种EPD模式,选项1的EPD和C-PHY的类似,用“Spacer + PDQ”。而选项2则是用两个“Spacer”。
这种差异主要是为了兼容不同的模式,选项1:支持低功耗(LP)或低电压低功耗(LVLP)模式的D-PHY。选项2:不支持Option 1的D-PHY,或需要与ALP(Advanced Low Power)模式结合使用的情况。
显然是选项2的兼容性更好,但是因为不使用标准的物理层定界符PDQ,可能影响CSI-2链路完整性。
在选项2中有个特殊情况:在使用CSI-2数据包突然变多的时候,为了能正确识别到每个包的结尾,会在包结尾加一段“EoTp”,并且包和包之间仍然使用传统的EOT、LPS、SOT来分割,EoTp中的DT应设置为0x04;所有VC、VCX和WC位应设置为零。
目的就是让包尾变得更明显。并且其中字段的内容在CSI-2协议接收器应该被忽略。
数据扰频(Data Scrambling):
重复的数据模式会导致特定频率上的信号峰值,会增加干扰和串扰的风险。
数据扰频的重要性在于它通过随机化数据来降低电磁干扰(EMI),实现平滑信号频谱、减少峰值,确保更均匀的能量分布,进而优化传输性能和可靠性。
在MIPI CSI-2中,数据扰频通过线性反馈移位寄存器(LFSR)实现。通过扰频,传输数据变得更随机化,减少了电磁干扰(EMI)和信号串扰。
D-PHY:使用线性反馈移位寄存器(LFSR)。在数据突发的开始或HS空闲(HS-Idle)之后进行初始化。
在数据突发的开始或HS空闲(HS-Idle)之后,LFSR会根据分配给每个数据通道的16位种子值进行初始化。
依赖固定的初始化点,适合一般的数据传输。
C-PHY:每个长包或短包开头,使用LFSR初始化。每次传输同步字(Sync Word)时进行初始化。
在每个长包或短包的开头,通道中的LFSR(线性反馈移位寄存器)根据分配的16位种子值进行初始化。
更灵活,能够针对重复数据进行优化,减少干扰。