XILINX的ULTRASCALE+系列的FPGA,自带MIPI 的两个IP核,分别是MIPI D-PHY IP 和MIPI CSI-2 IP,D-PHY可以认为是低级的IP核,可以将每一LANE的数据解析出来,各LANE之间的数据相对独立,需要用户自己组成完整的一帧图像,CSI-2是高级的IP核,直接出来的就是一帧图像数据。
以下SENSOR的图片是关于OV5640的,其它MIPI接口的SENSOR,只要有正确的初始配置数据,都是可以使用的。之所以选择OV5640开发,主要是OV5640比较常见,市场上容易买到,并且之前的基于CYUSB3065的UVC摄像头开发板,SENSOR用的也是OV5640,正好配置数据可以直接拿来用,不会有问题。另外就是OV5640同时支持DVP接口和MIPI接口,方便测试。下面是第一张图片,SENSOR配置的是VGA@60分辨率,只用了一个LANE的数据。
这个图片的信息主要是:
A:像素时钟是非连续的,行消隐和帧消隐时是没有时钟的。像素时钟的频率是线速率/8,由位时钟转化成字节时钟。
B:同步码后面会放大细节,仔细分析每一个字节信息。上图的一个扫描行有3个同步码,图像有效数据开始前有2个,图像有效数据结束后有1个。
C:信号dl0_rxvalidhs变高时,图像数据才是有效的。
接下来研究一下这三个同步码。下面是第一个同步码的信息,
同步码共计4个字节,上图分别是:02 19 02 20。用户可以对照MIPI协议来解读。
第1个字节02,代表行开始。(Line Start Code)
第2、3字节0219,代表行号(第一行数据的话是0001,依次是0002,0003,最后一行数据是03F9)。
第4个字节20,代表ECC。
下面是第2个同步码,
第2个同步码后,信号dl0_rxvalidhs变高,所以红框后面的数据均为图像有效数据。第1个字节为2a,代表图像数据的格式是RAW8的。第2、3字节0x0280,代表一行是640个像素点。第4个字节为ECC。这4个字节即为32位的PACKET HEADER,其后才是图像数据。
下面是第3个同步码,
同步码只关注前4个字节就可以,这是分别是:03 01 00 16。这4个字节需要对照MIPI协议理解。
第1个字节03,代表一行数据结束。(Line End Code)
第2、3字节代表行号,这里是0001。
第4字节是ECC。
通过以上三个同步码,一个扫描行的信息就很完整了。以下再抓取一帧相关的帧头,帧尾信息。帧头如下:
帧开始的是单独的一个短包,如上图最左侧的红线位置。最右侧的是第一行数据。放大帧开始的短包,如上图中间的红色椭圆,第1个字节00,代表帧开始(Frame Start Code)。00后面的16位数据e3a4是帧计数值,这个数据是循环的。第4字节是CRC值。
帧结束的波形如下:
帧结束也是单独的一个短包,如上图最右侧的红线位置,放大帧结束的短包,如上图的红色椭圆形位置,第1个字节01,代表帧结束。(Frame End Code)
END
▼
无线模块的板载天线调整
5000字的HDMI知识指南!
【晒板子】焊了近40块板子,做了个高压电源
我在STM32单片机上跑神经网络算法
不用GD32?我把STM32换成了国产MM32
【晒板子】OneWatch手表(芯片选型+原理图)