MIPI协议介绍
mipi 协议分为 CSI 和DSI,两者的区别在于
CSI用于接收sensor数据流
DSI用于连接显示屏
csi分类
csi 分为 csi2 和 csi3
csi2根据物理层分为 c-phy 和 d-phy,
csi-3采用的是m-phy
一般采用csi2
c-phy 和 d-phy的区别
d-phy的时钟线和数据线是分开的,2根线一对一对,每个channe最大2.5Gbps,
c-phy的时钟线会嵌入到数据线中,有3跟线,每个channe最大5.7Gbps,
csi2 每层的定义
PHY层主要规定了物理传输的各种电气特性,传输介质,序等,比如C-PHY就是需要三根线来进行传输,而D-PHY是数据和时钟分开进行传输
协议层,主要负责像素层次的打包和解包,Lane层次的打包和解包,还有各种控制信息的组合
应用层,就是我们自己想怎么用就怎么用了,比如拿到像素数据之后做各种图像处理算法
PHY层
PHY最外面对外的接口是有两种形式的
HS 高速模式
LP 低功耗模式
这两种形式的接口在MIPI里面被组合成了一个接口,其实就是两种工作模式其中HS模式主要用于高速所数据传输,功耗较大
LP模式主要用于低速的一些控制信号,功耗较低
但是在xilinx的7系列FPGA中是不支持这种传输特性的,所以在7系列的FPGA里面一般会采用以下两种方索来做MIPI接口
1 电阻网路
2 专用的电平转换芯片
协议层
协议层主要分为以下三个部分
Lane Management Layer
Low Level Protocol
Pixel to Byte Packing Formats
先来看Lane层
MIPI协议支持多lane的传输,MIPI D-PHY中每条lane最多传输2.55bps,那么如果需要传输更快的速率的时候就需要有多条lane来并行进行传输。这样必然要涉及一个问题,那就是lane与lane之间怎么配合的问题.
lane 传输过程
两lane的传输过程如下图所示,以SoT为起始,中间数据是交错排列的,最后以EoT作为结束
再来看Low Level Protocol层
low level层要传轮的数据分为两种
短包
长包
其中短保主要负责一些控制信息的传输,长包里面就是主要在传输图像数据了
短包的结构如下所示,分为ID,WC和ECC三个字段
长包和短包的结构很相似,可以看到它的包头部分和短包一致,然后后面跟了数据部分
那么怎么区分长包和短包呢,其实就是靠DATA ID这个字段中的Data type来区分的,比如短包的DATA ID如下图所示
Data type 为 00 - 07代表的是短包
其中DATA ID这8bit中还有两Bit,表示VC也就是虚拟通道,剩下的6bit才表示Data Type。
WC这个字段,这个字段表示接下来的传输有多少字的数据
ECC是给做校验用的,毕竟传输的过程中可能会出现错误,这边就增加了校验
后面要传输的数据也会有很多类型,比如YUV格式的,RAW格式的,在MIPI里面也是通过DATA Type来区分的
RAW10里面一个像素是10bit,RAW12里面一个像素是12bit,那么MIPI协议里面是怎么将他们进行统一的呢,其实这里MIPI协议规定了每种数据的排布方式
比如RAW10的数据是按如下形式进行排布的,以40 bit 为一个单位传输,
先传输每个像素的高8bit, 再把4个像素的抵2bit 拼在一起传输。
而RAW12的排布方式又变成了如下图
在写代码的时候只需要根据data type来做对应的解码就行了
要完成一个MIPI CSI-2的 D-PHY接受数据的话,只需要做以下步骤
字节对齐
lane对齐
数据解包
像素解包