MIPI CSI-2 协议解析
CSI-2标准协议前言一、Overview of CSI-2二、CSI-2 layer Definitions三、 Camera Control Interface(CCI)3.1 数据传输协议(Data Transfer Protocol)3.1.1 消息类型(Message Type)3.1.2 读写操作(Read/Write Operations)3.1.2.1 随机位置单次读3.1.2.2
CSI-2标准协议
前言
CSI(Camera Serial Interface)是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版,主要由应用层、协议层、物理层组成,最大支持4通道数据传输、单线传输速度高达1Gb/s。
本文主要是个人学习MIPI CSI-2 Spec的翻译和总结,并简单罗列了CSI-2和DSI-2的差异。
一、Overview of CSI-2
- CSI-2规范定义了发送器和接收器之间的标准数据传输和控制接口。数据传输接口(简称CSI-2)是带有单向差分串行接口的数据和时钟信号;该接口的物理层是MIPI联盟规范的D-PHY。图1说明了CSI-2发送器和接收器之间的连接,它们通常是camera模块和接收模块,手机引擎的一部分。
- CCI控制接口(Camera Control Interface)是一个兼容I2C标准的双向控制接口。属于I2C协议的一个子集。
- CSI-2无论是Data Lane还是Clock Lane都是非双向的(Unidirectional)。
二、CSI-2 layer Definitions
CSI-2可分为5层,分别为:应用层、组包/解包层、底层协议层(Low Level Protocol)、通道管理层和物理层。
- PHY Layer: 物理层PHY 定义了传输介质(电导体),输入/输出电路和时钟机制以便于从串行bit流中捕获“1”和“0”,记录传输介质电气参数特性和时钟与数据之间的时序关系,传输起始(SoT)和传输结束(EoT) 标志信号。
- Protocol Layer: CSI-2协议可以使用SOC上的一个物理接口实现多条数据流的传输。协议层规定了如何对多条数据流进行标记和交织,从而使每条数据流能够正确地重建。
像素字节转换层(Pixel/Byte Packing/Unpacking Layer): CSI-2能够支持多种多样的像素格式,对于发送方,在数据发送之前,需要根据像素格式,将像素数据转换为对应的字节流;对于接收方,在将数据提供给应用层之前,需要将字节流数据转换为像素数据。
低级协议层(Low Level Protocol): LLP指的是SoT与EoT之间的数据包字节流协议,LLP的最小单元为字节。
Lane管理器(Lane Management): CSI-2的lane是可扩展的以提高性能。数据通道可以是1、2、3或4,这取决于带宽的要求,接口的发射端分发(“分发器”函数)输出数据流到一个或多Lanes。在接收端从Lanes收集字节数并将它们合并成一个重组的数据流以恢复原始流序列
协议层中的数据被组成数据包。接口的发射端将包头和可选的错误检查信息附加到要发送的数据流上,并在Low Power Protocal layer 进行传输。在接收端,消息头Low Power Protocal layer协议中被剥离并在接收器中通过相应的逻辑进行解释。错误检查信息用于测试输入数据的完整性。 - 应用层(Application Layer) 该层主要用于不同场景对数据的处理过程,对于发送方,多为camera生成数据,对于接收方,多为SOC对数据进行处理。
三、 Camera Control Interface(CCI)
CCI是一种二线制、双向、半双工、串行接口,兼容I2C,可以支持400KHz的数据传输。其读写都遵循I2C协议。包括单数据读写以及连续数据读写。最大支持16bit寄存器寻址,能够支持8bit,16bit,32bit,64bit数据宽度。寄存器数据发送顺序是由高到低。
CSI-2的接收器需要配置成一个Master, 发送器配置为Slave 在CCI bus上。CCI能够处理总线上的多个从机,然而多主机机制CCI是不支持的,任何本节没有提到的I2C command都要被忽略,以防引起不必要的操作。注意,当提到CCI时,术语主和从不应该与D-PHY操作中使用的类似术语相混淆;他们没有关系。
3.1 数据传输协议(Data Transfer Protocol)
数据传输是按照i2c协议标准来传输的。START, RPEATED START 和 STOP条件也是I2C协议标准的数据传输方式。
3.1.1 消息类型(Message Type)
一个基本的CCI消息包括START条件、带有读写位的从设备地址、从设备的应答、指向从设备内部寄存器的子地址(索引)、从设备的应答信号、从设备的写操作数据字节、从设备的应答/反应答和STOP条件。在读取操作中,数据字节来自从机,应答/非应答来自主机。如图3所示。
在CCI中,从机地址位7-bit.
CCI支持8位数据的8位索引或8位数据的16位索引。该从属设备定义了所使用的消息类型。
3.1.2 读写操作(Read/Write Operations)
CCI兼容设备能够支持四种不同的读操作和两种不同的写操作;随机位置单次读、随机位置顺序读、当前位置单次读、当前位置顺序读、随机位置单次写、从随机位置开始顺序写。读/写操作将在下面的章节中介绍。
从设备的索引必须在每次读写操作后自动递增。这也将在下面的部分中进行解释。
3.1.2.1 随机位置单次读
在单次从随机位置读取时,主服务器对所需要的索引做一个虚拟的写操作,发出一个重复的启动条件,然后再用读操作来定位从服务器。确认从机地址后,从机开始向SDA行输出数据。如图4所示。主处理器通过设置一个否定的确认和停止条件来终止读操作。
3.1.2.2 当前位置单次读
通过对slave进行读操作,也可以从上次使用的索引中读取数据。通过设置数据从最后使用的索引到SDA行来响应。如图5所示。主处理器通过设置一个非应答和停止条件来终止读操作。
3.1.2.3 随机位置连续读
如图6,主机向索引地址发送虚拟写操作,收到从机应答之后主机发起一笔Repeat Start条件,随后发送读地址读操作,等待从机应答后连续读取数据,当主机读取到最后一个字节数据后,发送非应答信号给从机,并发送停止条件。
3.1.2.4 当前位置连续读
当前位置顺序读与随机位置顺序读类似,唯一区别是当前位置顺序读没有虚拟写操作,如图7,主机通过发送非应答和停止位来终止读操作。
3.1.2.5 随机位置单次写
如图8,主机向从机发起一笔写操作,随后发起索引地址和数据,当收到从机应答时候。写操作由主机发送Stop来终止。
3.1.2.6 连续写
如图9,表示连续写操作时序,每接收到一个字节数据后,从机自动增加索引地址。主机发送Stop来停止连续写操作。
3.2 CCI 从机地址
对于只有原始Raw Bayer输出的Camera模块,7位从地址应该是011011Xb,其中X = 0或1。对于所有其他摄像机模块,7位从地址应该是011110Xb。
3.3 CCI Multi-Byte Registers
3.1.1 概要
CSI-2 协议标准支持以下寄存器宽度:
- 8-bit ----基本设置寄存器
- 16-bit—像行长、帧长和曝光值这样的参数
- 32-bit—高精度设置寄存器
- 64-bit—用于未来传感器需求
通常,上面章节中描述的面向字节的访问协议提供了一种访问多字节寄存器的有效方法。但是,寄存器应该驻留在一个面向字节的地址空间中,并且多字节寄存器的地址应该是它的第一个字节的地址。因此,连续多字节寄存器的地址将不是连续的。例如,一个32位寄存器的第一个字节位于地址0x8000,可以通过从随机地址0x8000开始的四个字节的顺序读取来读取。如果有一个额外的4字节寄存器,其第一个字节位于0x8004,那么可以使用一个4字节来访问它顺序读取当前位置协议。
当访问多字节寄存器时,必须遵循以下重新计时规则:
- 对于写操作,寄存器的更新应延迟到收到最后一个字节的最后一位时
- 对于Read操作,Read的值应该反映第一个字节的第一个位被读取时所有字节的状态
如果不重新计时,数据可能会损坏,如下面的图10和图11所示。
3.3.2 多字节寄存器值的传输字节顺序
CCI 消息在多字节寄存器中第一个字节总是MSB,最后一个字节为LSB低位。
3.3.3 多字节寄存器Protocol
每个设备都可以有单字节寄存器和多字节寄存器。在内部,设备必须理解哪些地址对应不同的寄存器宽度。
3.3.3.1 读取多字节寄存器
为保证从多字节寄存器中读取的数据值是一致的,即所有字节在时间上是一致的,当读取寄存器的MS字节时,设备内部将寄存器的内容转移到一个临时缓冲区。临时缓冲区的内容在SDA行上以字节序列的形式输出。
图15和图16说明了多字节寄存器读取操作。临时缓冲区总是更新,除非读取操作在同一个多字节寄存器内是增量的。
在这个定义中,对于寄存器是通过单独的、没有中间数据写入的单字节读消息增量地访问,还是通过单一的多位置读进行访问,没有区别消息。该协议与索引值的行为完全相关。
关于何时更新临时缓冲区的示例如下:
- 寄存器的MS字节被访问
- 索引已经跨越了一个多字节寄存器边界
- 从同一个索引位置连续读取单字节
- 将要读取的字节的索引值与前一个索引值相同或更小
除非以增量方式访问多字节寄存器的内容,否则不能保证回读的值是一致的。
通过START和STOP条件将临时缓冲区的内容重置为零。
3.3.3.2 写多字节寄存器
为了保证写数据的一致性,要被写入多字节寄存器的数据被暂存到一个buffer中,只有当最后一个LS字节被写入后才是整个multi-byte值被传输完成,图17和18 表示多字节寄存器写操作。
只写入多字节寄存器的LS或MS字节的CCI消息是不允许的。单字节写入多字节寄存器地址可能会导致设备中的不正常行为。
3.4 电器标准与IO 时序(略)
请参看spec
CSI-2协议标准手册英文版PDF
四、物理层(Physical Layer)
CSI-2实现的物理层由1~4个单向数据通道和一个时钟通道组成。所有的CSI-2发射器和接收器都应该支持时钟通道上的连续时钟行为,也可以选择支持非连续时钟行为。对于连续的时钟行为,时钟通道保持高速模式HS,在数据包传输之间产生主动时钟信号。对于非连续的时钟行为,时钟Lane在数据包传输之间进入LP-11状态。
CSI-2发送器的最低物理层要求是:
- Data Lane数据通道模块:单向主控,HS-TX, LP-TX和一个CIL-MFEN功能。
- Clock Lane时钟通道模块:单向主,HS-TX, LP-TX和一个CIL-MCNN功能 。
CSI-2接收器的最低物理层要求是
- Data Lane 数据通道模块:单向从站、HS-RX、LP-RX和一个CIL-SFEN功能。
- Clock Lane 时钟通道模块:单向从,HS-RX, LP-RX,和一个CIL-SCNN功能。
所有的CSI-2实现应支持所有数据通道上的前向escape ULPS。
五、多Lane分发与合并(Distribution and Merging)
CSI-2是一个lane可扩展的规范。需要比一个数据通道提供更多带宽的应用程序,或者避免高时钟速率的应用程序,可以将数据路径扩展到2、3或4 个Lane,并获得峰值总线带宽的近似线性增加。上层数据和串行位流之间的映射是明确定义的,以确保主机处理器和使用多个数据通道的外设之间的兼容性。
从概念上讲,在PHY层和更高的功能层之间有一个处理多通道配置层。在发送器中,该层在N个Lanes上分配一系列数据包字节,每个Lanes是物理层逻辑(序列化器等)和传输电路的独立单元。在接收端,它收集来自N lane的传入字节,并将它们合并成完整的数据包,然后传递到数据包分配器。
- Lane Distribution Function
Lane分发器接受一个任意字节长度的传输,缓冲N个字节(其中N = Lane的数量),然后在N个Lanes上并行发送N个字节的分组。在发送数据之前,所有的lane并行执行SoT序列,以指示相应的接收单元数据包的第一个字节已经开始。在SoT之后,lane以轮循的方式并行地发送第一个数据包的连续字节组。
- Lane Merging Function
虽然多个lane都以并行的“start packet”同时开始,但它们可能在不同的时间结束,每隔一个周期(字节)发送“End packet”码。
链路接收端的N个phy并行收集字节数,并将这些字节数送入合并lane层。这将重构传输字节的原始序列,然后可以将其划分为数据包解码器层的单个数据包。
5.1 Multi-Lanes 互通性
当使用多个数据Lane时,通过CCI接口对Lane的分发与合并进行重构。
一个“N”数据Lane接收器应与一个“M”数据Lane发射器连接,通过Lane分布的CCI配置,当使用多个数据巷时,在CSI-2发射器和接收器内合并层。因此,具有四个数据通道的接收器应与具有1、2、3或4个数据通道的发送器一起工作。同样,具有四个数据通道的发送器也应与具有4个或更少数据通道的接收器一起工作。发射端1至M通道与接收端1至M通道相连。
- 如果M <= N, 传输性能不受影响,接收器有足够的数据通道来匹配发送端(如图25/26)。
- 如果M > N,那么传输性能会下降,因为接收端的数据通道小于发送端数据通道(如图27/28)
六、低级协议(Low Level Protocol)
LLP是基于字节,以包为单元的协议,支持长短两种包格式。
- 传输任意数据(负载独立)
- 以字节为单位
- 在同一链路上支持最多四个交错的虚拟通道
- 支持独立的帧起始,帧结束,行起始,行结束等数据包
- 包含对数据类型,像素深度与格式的描述
- 16-bit Checksum错误侦测
6.1 低级协议包格式(Format)
LLP支持两种包结构,分别为长包与短包,包格式与长短取决于具体的物理层。无论何种类型的包,均由SoT信号开始,EoT信号结束。
6.1.1 低级协议长包格式(Long Packet)
图30显示了Low - Level Protocol Long Packet的结构。长数据包应该用数据类型0x10到0x37来标识。关于数据类型的描述请参见Table 3。一个长包应该由三个元素组成:32位包头(PH),一个具有可变数量的8位数据字的应用程序特定数据负载和一个16bit包尾(PF)。数据包头进一步由三个元素组成:一个8位的数据标识符,一个16位的单词计数字段和一个8位的ECC。包尾有一个元素,一个16位的校验和。关于包元素的进一步描述,请参见6.2到6.5节。
- Word Count定义了数据负载中从包头结束到包尾开始的8位数据字节的数量。包头和包尾都不应包括在Word count统计中。
- ECC (Error Correction Code) 字节在报文头中,用于纠正单bit错误和2bit错误,这包括数据标识符值和Word count值。
- 包头PH发送完,接收器读取下一个字计数word count* 8位数据字的数据负载。当读取数据有效载荷时,接收器不应寻找任何嵌入的同步码。因此,对数据字的值没有限制。
- 一旦接收端读取了数据负载,它就会在包尾读取校验和。在一般情况下,数据有效载荷的长度应为8位数据字的倍数。此外,每种数据格式可能对有效负载数据的长度施加额外的限制,例如4个字节的倍数。
- 每个字节应先传输最低有效位LSB。有效载荷数据可以仅受数据格式要求限制的任何字节顺序传输。多字节元素,如word count,校验和和短包16位数据字段应首先传输最低有效字节LSB。
- 在EoT序列之后,接收器开始寻找下一个SoT序列。
6.1.2 低级协议短包格式(Short Packet)
图31显示了短包数据结构,短包定义数据类型0x00~0x0F, Table 3描述了数据类型,短包只包含一个包头PH,不存在包尾PF, 并且包头里的Word count字段由短包的数据字段替代。
对于帧同步数据类型的短包,数据字段表示帧数,对于行同步数据类型的短包,短包数据字段表示行数,可以参考Table 6 针对帧和行同步数据类型的描述。
针对一般的短包数据类型,短包数据字段可由用户自定义。
ECC(Error Correction Code) 字段允许单比特纠错和2-bit检测。
上图可以发现,短包有两类Data Type
同步短包:用于对帧或行起停进行标识,起到同步作用。
6.2 数据标识符Data identifier (DI)
数据标识符包含了虚拟通道标志VC值和数据类型DT值,如图32,虚拟通道标志符占用数据标识符的高两个bit, 低六个bit为数据类型标识。
6.3 虚拟通道标识符Virtual Channel Identifier
虚拟通道标识符的目的是为交叉在数据流中的不同数据流提供单独的通道。
虚拟通道标识号位于数据标识符DI字节的高两个bit。接收器将监视虚拟信道标识符,并将交错的视频流解复用到相应的信道。最多支持4个数据流;有效的通道标识符是0到3。外设中的虚拟通道标识符应该是可编程的,以允许主机处理器控制数据流如何解复用。逻辑通道的原理如图33所示。
图34展示了一个使用虚拟通道支持的数据流示例。
6.4 数据类型Data Type(DT)
Data Type值指定有效负载数据的格式和内容。最多支持64种数据类型。
有8个不同的数据类型类,如表3所示。在每个类中,最多有8个不同的数据类型定义。前两个类表示短数据包数据类型。其余六个类表示长数据包数据类型。
6.5 包头错误检测ECC
数据标识符DI和字节计数值Word Count的正确解析对包结构至关重要。报文头纠错码字节,允许纠正数据标识符和字数中的bit错误和2-bit错误检测。
数据标识符字段DI[7:0]应映射到ECC输入的D[7:0], Word Count LS Byte (WC[7:0])映射到D[15:8], Word Count MS Byte (WC[15:8])映射到D[23:16]。这个映射如图35所示,它也是一个ECC计算示例。
具体ECC纠错方法,此处略,请参考CSI-2 Spec
6.6 生成校验和(Checksum Generation)
为了检测传输中可能的错误,对每个数据包计算校验和。校验和被实现为16位的CRC。生成多项式是x16+x12+x5+x0。
校验和的传输如图40所示。
16位校验和序列作为包尾的一部分传输。当Word count为零时,CRC值应为0xFFFF。
6.7 包间距(Packet Spacing)
在低级别协议数据包之间,必须始终有一个过渡到低功耗状态(LPS)。图44显示了与LPS的数据包间隔。
6.8 同步短包数据类型
短包有两种:一种是同步短包,一种是普通短包。而同步短包又分为帧同步包和行同步包两种。
6.8.1 帧同步包数据类型
数据短包传送类型如下:
每个图像帧应该以包含帧起始码的帧起始(FS) 包开始。FS包后面应该有一个或多个包含图像数据的长包和零个或多个包含同步码的短包。每个图像帧应以包含帧结束码的 帧结束(FE) 包结束。关于同步数据类型的描述请参见表6。
对于FS和FE同步包,短包数据字段应该包含一个16位的帧号。对于给定帧对应的FS和FE同步包,这个帧号应该是相同的。
当使用16位的帧号时,应该是非零的,以区别于用例中帧号是无效的并保持为零。
16位帧数的行为应如下:
- Frame Number 一直为0–帧号无效
- 同一个虚拟通道每一个Frame Start(FS)包帧数增加1,并且周期性的重置为1,例如1,2,1,2,1,2,1,2,或者1,2,3,4,1,2,3,4
帧号必须是非零值。
图45和图46分别包含了由多个数据包和单个数据包组成的数据帧的例子。
6.8.2 行同步包
对于以Line Start(LS)和Line End(LE) 为标志的行同步包数据字段需要包含一个16-bit的行号(line number),对于与给定行相对应的LS和LE包,此行号应相同。行号是逻辑行号,不一定等于物理行号
16位行号在使用时应是非零的,以区别于行号无效并保持为零的情况。
16-bit 行号的行为如下:
- Line Number 一直为0----行号无效
- 同一个虚拟通道和数据类型的短包,每一个LS 包的行号加1,一个FS报文后,第一个LS报文的行号周期性重置为1。预期的用途是逐步扫描(非交错)视频流。行号必须是非零值。
- 对于同一虚拟通道和同一数据类型内的每个LS包,行号以大于1的相同任意步长值递增。对于FS报文后的第一个LS报文,行号会周期性地重置为非零的任意起始值。连续帧之间的任意起始值可能不同。预期的用途是用于交错的视频数据流。
6.8.3 通用短包数据类型
其他略
七、Color Spacing
color spacing 主要分为RGB和YUV两种。
八、数据格式(Data Format)
- 本节的目的是为CSI-2应用程序中通常使用的数据格式提供权威性的参考。表8总结了这些格式,给出每种格式的单独定义。表中没有展示的数据类型在11.1节中进行了描述。为简单起见,所有示例都是单Lane配置。
- 在CSI-2应用程序中最广泛使用的格式由表8中的“primary”名称来区分。CSI-2的传输器实现应该至少支持这些主要格式中的一种。CSI-2的接收器实现应该支持所有的primary格式。
- 数据包有效载荷数据格式应与数据包报头中的数据类型值一致。关于数据类型值的描述,请参见9.4节。
8.1 普通8-bit长包数据类型
如表9 所示:
- 针对Null和blanking两种数据类型,接收器必须忽略数据包净荷内容。
- 空白blanking包与空包null在视频数据流中的重要性不同。空包Null没有任何意义,而空白包blanking可以被使用,例如,在ITU-R BT.656风格的视频流中,作为帧间的空行。
8.2 YUV 图像数据
这一节描述的YUV数据格式定义了数据类型,如表10,YUV420数据类型传输的行数应为偶数。
YUV420数据格式分为Legacy数据格式和non-legacy数据格式。Legacy YUV420数据格式是为了与现有系统兼容。non-Legacy YUV420数据格式能够实现更低的成本。
8.2.1 Legacy YUV420 8-bit
Legacy YUV8-bit数据传输通用发送UYY…/ VYY…序列在奇数/偶数行,元素U在奇数行被传送(1,3,5…) V元素在偶数行(2,4,6…)被传送,传送时序如图58。
表11 表示的是YUV420 8-bit 数据包长度,每一个包必须是表中值的倍数。
传输的位序遵循一般的CSI-2规则,LSB优先。像素到字节的映射如图59所示。
8.2.2 YUV422 8-bit
YUV422 8-bit传输格式为UYVY 序列,如图70
数据包长度:
像素到字节转换:
8.3 RGB 图像数据
表16定义了RGB数据包类型,主要有以下几种RGB444,RGB555, RGB565, RGB666,RGB888。
8.3.1 RGB888
RGB888数据传送序列BGR方式传送,如图77。数据帧格式如图79。
数据包长度:
像素到字节转换:
其他格式见spec
8.4 Raw 图像数据
Raw6/7/8/10/12/14模式用于从图像传感器传输图像数据。数据类型如表20:
8.4.1 Raw6
6位Raw数据传输通过CSI-2总线传输像素数据。每行由行开始/结束同步代码分隔。这个序列在图88 (VGA case)中进行了说明。RAW6报文大小约束如表21所示。每个包的长度必须是表中值的倍数。
总结
本文没有讲到的章节,请具体参看CSI-2 Spec
CSI-2 Spec
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)