CSI-2规范定义了发送者和接收者之间传输和控制接口的标准数据。数据传输接口(指CSI-2)是单向差分串行接口,传输数据和时钟信号;接口的物理层说明文档参见《MIPIAlliance Specification for D-PHY》[MIPI01]。图1描述了CSI-2发送者和接收者之间的连接关系,是一个典型的摄像头模型和接收者模型(移动电话的一部分)连接关系。(译者:围补)
控制接口(指CCI,Camera Control Interface)是双向控制接口,与I2C标准兼容。
那么CCI又是什么鬼呢?你可以这么理解,它就是I2C的一个变种,或者说CCI是I2C协议的一个子集。因此,使用I2C接口就可以直接与CCI接口互联,以实现通信。
需要注意的是,在MIPI CSI-2的协议规范中明确的对摄像头的CCI地址做出了规定,具体如下:
对于那些只支持RAW Bayer输出格式的摄像头,其CCI地址必须为011011xb(x=0,1);对于其他的摄像头,其CCI地址必须为011110xb。
对于CCI协议的具体内容,这里就不详细介绍了,大家可以去参考I2C协议规范或者CSI-2协议规范的对应章节就可以了。
图1 CSI-2和CCI发送者和接收者接口
图2 CSI-2层级定义
图2定义了CSI-2的应用中概念上的层级结构。各层描述如下:
l PHY层:PHY层指定传输介质(导体),输入/输出电路和时钟机制,即从串行位流中获取“0”“1”信号。规范中的这一部分记录了传输介质的特性,并依据时钟和数据通道之间发信号和产生时钟的关系规定了电学参数。
信号传输开始(SoT)和传输结束(EoT)的机制被规范化。同样被规范化的还有其他在传输和接收物理层之间能够传输的“out of band”信息。位级和字节级同步机制被包含位PHY的一部分。
l 协议层(Protocol Layer):协议层由其他几个任务明确的层组成。CSI-2协议层允许多数据流共用一个主机处理器端信号接口。协议层指定多数据流怎样被标记和交叉存取,因此每个数据流可以被正确的重建。
数据在协议层是以数据包的形式存在。在接口发送端,添加包头和可选择的错误校验信息到LLP层传来的数据上。在接收端,LLP层将包头剥离,由接收者按照相应逻辑解析。错误校验信息可以用来检测收到的数据完整性。(译者:围补)
l 应用层(Application Layer):该层对数据六中包含的数据进行进一步数据解码和解析。CSI-2规定了像素值到字节的映像。
规范的标准段落只与连接的外部部分有关,例如,只和数据和位模式被传输通过的链路有关。所有的内部接口和层次都是纯信息性的。(译者:围补)
MIPI CSI-2协议支持多种Lane的配置方式,最小仅仅需要一个Clock Lane和一个Data Lane,而最大则支持一个Clock Lane和多大4个Data Lane。其中,4个Data Lane由Clock Lane进行同步传输数据,显然,这需要在传输数据之前对数据进行分配(或者合并),具体如下图所示:
显然CSI-2每个Data Lane的最小传输内容为一个字节。同时,这会带来一个问题(以2个Data Lane)为例,当所传送字节数为偶数时,Lane1和Lane2可以同时结束,当所传送的字节数为奇数时,Lane1和Lane2将不再是同时结束了!具体如下图所示:
对于3个Lane,也有类似的情况:
4个Lane的情况也是类似的,这里就不详细描述了。综上所述,不管是何种情况(Lane的配置方式),每个Lane都同时开始SoT,并开始发送第一个字节,但是每个Lane的结束时间可能会相差一个字节的传输时间。
MIPI CSI-2的Low Level Protocol主要有一下特征:
Transport of arbitrary data (Payload independent)
8-bit word size
Support for up to four interleaved virtual channels on the same link
Special packets for frame start, frame end, line start and line end information
Descriptor for the type, pixel depth and format of the Application Specific Payload data
16-bit Checksum Code for error detection.
CSI-2的Data Lane的Low Level Protocol数据包的一般形式为:
如上图所示,也就是说,CSI-2的数据包有两种:长包和短包。无论是长包还是短包,包的开头都是SoT(Start of
Transmission),包的结尾都是EoT(End of Transmission)。此外,长包的SoT之后还有包头(PH,Packet Header),EoT之前还有包尾PF(Packet Footer)。在两次HS传输过程之间,插入的是LP状态(一般是LP11等Control状态,当然也可以进入Escape状态进行LPDT或者进入UPLS)。
一个长包的基本结构如下图所示:
第一部分是PH,包头:分别由Data ID、16bit的WC和ECC构成,对应功能如上图所示;
第二部分是包的有效数据;
第三部分是PF,即CHECKSUM;
其中,ECC采用的是Hamming Code的方式,可以纠正PH(包头)中一位的错误或者发现两位的错误,具体可以看一下我之前转发的博文:http://blog.chinaaet.com/justlxy/p/5100052453
而CHECKSUM采用的则是CCITT的16-bit的CRC校检,即x^16+x^12+x^5+x^0。CRC只能检测数传输发生的一个或者多个错误,但是并不能纠正错误。具体可以参考这篇文章:http://blog.chinaaet.com/justlxy/p/5100052477
需要注意的是,无论是WC,还是PACKET DATA,或者CHECKSUM,都是先发低字节(LSB),再发高字节(MSB)!!!!对于一个具体的字节来说,也是先发低位,再发高位,如下图:
短包的结构比较简单,具体如下图所示:
短包只是将长包中的WC的位置作为包的数据域,也就是说,短包每次最多只能发两个字节的数据。和长包一致,同样需要先发LSB,再发MSB。应当注意的是,短包一般是用来发送同步控制信号的,一般不建议使用短包来发送用户数据(当然你可以这样做)。
同步信号的类型如下:
而当Data Type为0x08到0x0F时,则为Generic Short Packet Code,即可发送用户自定义数据。
其中,DI的高两位表示虚拟通道号,低六位表示Data Type,如下图所示:
虚拟通道(VC,Virtual Channel)技术使得CSI-2可以在同一个Lane发送不同类型的数据,然后在接收端在进行恢复,如下图所示:
Data Type如下:
举例如下:
前面说到过,短包用来发同步控制信号,长包用来发数据,比如下面的例子,短包发帧同步信号,长包发数据:
二.
转载自:https://blog.csdn.net/g_salamander/article/details/9163455
一、D-PHY
1、传输模式
LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHz
HS(High-Speed)模式:用于高速传输数据,速率范围 [80 Mbps, 1Gbps] per Lane
传输的最小单元为 1 个字节,采用小端的方式及 LSB first,MSB last。
2、Lane States
* LP mode 有 4 种状态: LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)
* HS mode 有 2 种状态: HS-0、HS-1
HS 发送器发送的数据 LP 接收器看到的都是 LP00,
3、Lane Levels
* LP: 0 ~ 1.2V
* HS: 100 ~ 300mV,HS common level = 200mV,swing = 200 mv
4、操作模式
在数据线上有 3 种可能的操作模式:Escape mode, High-Speed (Burst) mode and Control mode,下面是从停止状态进入相应模式需要的时序:
* Escape mode 进入时序:LP11→LP10→LP00→LP01→LP00,退出时序:LP10→LP11
当进入 Escape mode 需要发送 8-bit entry command 表明请求的动作,比如要进行低速数据传输则需要发送 cmd: 0x87,进入超低功耗模式则发送 cmd: 0x78。在 DSI 中 LP 通讯只用 Data Lane 0。
* High-Speed mode 进入时序:LP11→LP01→LP00→SoT(0001_1101),退出时序:EoT→LP11,时序图如下:
* Turnaround 进入时序:LP11→LP10→LP00→LP10→LP00,退出时序:LP00→LP10→LP11
这是开启 BTA 的时序,一般用于从 slave 返回数据如 ACK: 0x84。
5、时序要求
在调试 DSI 或者 CSI 的时候, HS mode 下的几个时序非常重要:T_LPX,T_HS-SETTLE ≈ T_HS-PREPARE + T_HS-ZERO,T_HS-TRAIL,一般遵循的原则为:Host 端的 T_HS-SETTLE > Slave 端的 T_HS-SETTLE。