mipi-rx之软件篇

mipi-rx之软件篇

原文链接: https://www.cnblogs.com/fuzidage/p/14107768.html

1.MIPI CSI2的发送和接收

img

上图反映了sensor 和 soc 的数据关系,soc 通过 CCI (Camera Control Interface) 控制 sensor 寄存器,配置正确,sensor 将会通过 mipi 接口输出图像数据。

控制信息是 soc 通过 CCI 发送到 sensor,CCI 接口一般的就是 I2C 接口,最大支持400KHz。

data信息是CSI DPHY发送者发送到CSI DPHY接收者,由sensor端发送到soc的mipi-rx。

2 D-PHY**(DSI和CSI的物理层定义)**

D-PHY 是 MIPI 聯盟發布的高速物理層標準,規定了接口層的物理特性和傳輸協議。 DPHY 採用了 200mV 源同步的低压差分信號技術,每個 Lane 的數據綠率範圍支持到2500Mbps。 D-PHY 可以工作在低功耗 (Low Power, LP) 和高速 (High Speed, HS) 兩種模式下。

2.1、传输模式

LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHz

HS(High-Speed)模式:用于高速传输数据,速率范围 [80 Mbps, 2.5Gbps] per Lane

传输的最小单元为 1 个字节,采用小端的方式,也就是 LSB first,MSB last。

相关缩写名词:

  • HS-RX:高速接收器

  • HS-TX:高速发送器

  • LP-RX:低功耗接收器

  • LP-TX:低功耗发送器

  • LPS: Low Power State, 封包之間的spacing間距。

  • ST: Start of Transmission (SoT), 封包的起始訊號, 一般為低速轉換為高速的暫態訊號。

  • ET: End of Transmission (EoT), 封包的結束訊號, 一般為高速轉換為低速的暫態訊號。

  • PH: Packet Header, 32 bit表示, 為封包的標頭。

  • PF: Packet Footer, 16 bit表示, 為封包的結尾。

2.2**、Lane States**

* LP mode 有 4 种状态: LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)

* HS mode 有 2 种状态: HS-0、HS-1

HS 发送器发送的数据 LP 接收器看到的都是 LP00,

2.3**、Lane Levels**

* LP: 0 ~ 1.2V

* HS: 100 ~ 300mV,HS common level = 200mV,swing = 200 mv

2.4**、操作模式**

• 数据Lane的3种操作模式

  • Escape mode,
  • High-Speed(Burst) mode
  • Control mode

​ • ①Escape mode request

LP-11→LP-10→LP-00→LP-01→LP-00

exit:LP-10 -> LP-11

当进入 Escape mode 需要发送 8-bit entry command 表明请求的动作,比如要进行低速数据传输则需要发送 cmd: 0x87,进入超低功耗模式则发送 cmd: 0x78。

​ • ②High-Speed mode request :

LP-11→LP-01→LP-00->SOT(0001_1101)

exit: EOT -> LP-11

img

​ • ③Turnaround request (LP-11→LP-10→LP-00→LP-10→LP-00)

这是开启 BTA 的时序,一般用于从 slave 返回数据如 ACK: 0x84。

​ exit:LP00→LP10→LP11

最常用的就是“低功耗进入高速模式”如下图:

img

我们的D0-D4都是一个差分信号,它从lowpower state进入到HS后,从hi speed mode 中sync出我们的data。

sensor控制的信号由绿色框圈出来,主要是以下三个讯号:

HS-Prepare:表示从low power mode进入到hi speed mode需要prepare一段时间

Hs-zero: 表示从low power mode进入到hi speed mode需要keep LP-00状态一段时间

Hs-trail:表示送完1 st data后需要keep一段时间后才允许进入low power mode,进行下一轮数据传输。

soc端的控制的信号由黄色框圈出来:

Hs-settle:表示soc要等一段时间才去开始去parse “sync code”, 当抓到sync code后表示sensor已经进入了hi speed mode, 这个时候就可以sync data了。

注意:

1.每次EOT(end of trans)结束讯号后,都会进入low power mode,而不是sensor 工作后就一直处于hi speed mode。也就是每传一个package,都会走一遍上述的过程。

2.hs-settle为mclk/8 *n(这个n表示配置几个clk,对应code的话配置这个mipi_dev_attr_s->dphy)

当hs-settle的时间太长会压到data中的“sync code”,那么就会出现sync code parse不到,出现ecc err. 又或者从data中parse到一个假的“sync code”,那么最后就会出现数据不太对,出现ecc err.

Ecc还有一种出现可能就是lane mapping 出错,当我们传输数据出现ecc err, 有可能就是传输short pack时,4 byte的short pack拼接的不对(详见CSI的数据包结构),导致出现ecc error.

3.如果hs-trail持续的太短(拉高的太快),有可能会压到最后面的data,所以会出现crc/wc(word count ) err.另外,如果hs -settle太大,也有可能hs-trail也会是错误的数据,所以出现wc, crc err,因此不一定是hs-trail的问题,得先确保前面的ecc/decode无误后再来调整hs-trail

一般排查流程如下:

img

2.5 时钟模式

  • 连续时钟模式:数据包传输间隔,clk lane 保持在高速模式;
  • 非连续时钟模式:数据包传输间隔,clk lane 进入 LP-11 状态,退出hi speed mode;

2.6 时序要求
在调试 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。

img

2.7 Start-of-Transmission ( SoT )过程

img

当要进行数据传输的时候,data lane 将会通过信号(SoT)退出停止状态,进入高速模式。过程如下:

TX SideRX Side
退出停止状态 ( LP-11 )检测停止状态
进入 HS-Rqst 状态 ( LP-01 ),并处于该状态的时间间隔为 TLPX检测到 lane 从 LP-11 转变为 LP-01
进入 Bridge 状态 ( LP-00 ),并处于该状态的时间间隔为 THS-PREPARE检测到 lane 从 LP-01 转变为 LP-00,间隔 TD-TERM-EN 时间之后将使能传输
同时退出低功耗模式,进入高速模式
处于 HS-0 状态,时长为 THS-ZERO使能 HS-RX 并等待 THS-SETTLE,以忽略转换状态
开始从数据流中等待同步序列
时钟上升边缘插入 HS 同步序列 ‘00011101’
识别到同步序列 ‘00011101’
高速模式开始传输有效数据
接收到有效数据

2.8 End-of-Transmission ( EoT )过程

在数据完成传输时,通过结束传输(EoT)过程,数据通道退出高速模式并进入停止状态,这个过程状态变化如下:

TX SideRX Side
传输数据接收到数据
在完成最后一个字节数据的传输之后,保持该状态的时间间隔为 THS-TRAIL
关闭 HS-TX,启用 LP-TX,并在 THS-EXIT一段时间内处于停止状态 ( LP-11 )检测到 lane 状态进入停止状态 ( LP-11 ),关闭传输功能
忽略 THS-SKIP一段时间内的 lane 变化,以忽略转换状态
检测有效数据的最后一次转换,确定最后一次有效数据并忽略包尾序列

接收器是如何判断数据将要开始传输了呢?

当出现LP11→LP01→LP00时,接收器将会判断,将会有数据达到,同时,使用示波器查看mipi波形,将会发现在PL00(THS-PREPARE)时会有一个小脉冲(峰刺),一般的,在这个小脉冲之后,接收器将会打开比较器(由于在THS-PREPARE会有这个小脉冲的存在,所以在接收器中,会通过设置接收器的settle time,避开这个小脉冲,在这个脉冲之后再打开比较器),准备接收数据。而HS-00011101则表示有效数据开始,同时数据的开头,将会有数据表明将要数据的数据量,所以mipi接收器将会按其数据量接收,直到接收完成。
每根 lane(data lane/clk lane)从 LP 模式切换到 HS 模式都会有 LP11→LP01→LP00 这样的一个时序,同时还要检查 HS-00011101 ,HS-00011101 主要是用于同步,只有前面正确采集到 00011101 ,才能保证 clk 和 data 相位一一对应。

mipi csi调试:
测量 sensor 有相应的 mipi 信号输出,但是主控并没有接收到数据,通过查看主控的 mipi 寄存器发现,mipi接收器还处于 LP 模式,这种情况一般是mipi没有检测到sensor发送的从 LP 进入 HS 的时序。此时可测量sensor 开始输出图像数据时,clk lane 是否有 LP11→LP01→LP00 这样的一个时序。同时,应该先开 mipi,sensor 再开始 mipi 数据传输
由于THS-PREPARE会有一个小脉冲的存在,所以,主控在接收mipi数据的时候,需要通过设置主控的settle time,这个时间需要在这个小脉冲之后,这样接收才不会有问题
当出现 sensor 有数据输出,但是主控没有接收成功,这个情况一般是 mipi 的时序问题,sensor 端的时序没有和主控端的配合好,这个时候,可以尝试的减小sensor端的THS-PREPARE,增大THS-ZERO和THS-TRAIL
由于一些主控的需求,在一帧数据完成之后,需要一定的时间才可以进行相应的ISP处理,当一帧传输完毕之后的LP11时间达不到主控ISP的时间要求导致ISP报错,可通过调节THS-TRAIL时间,以此得到ISP对帧间的时序长度要求

3.CSI-2(定义mipi-rx的数据包规则)

CSI-2 是針對攝像頭的數據協議, 規定了主機與外設通信的數據包格式。CSI-2 可以支持不同像素格式的圖像應用, 數據傳輸的最小粒度是字節。 為增加 CSI-2 的性能,可以選擇數據 Lane 的數量, CSI-2 協議規訂了發送端將像素數據打包成字節的機制, 並指明多個數據 Lane 分配和管理的方式。字節數據以數據包的形式組織,數據包在SoT 與 EoT 之間傳輸。 接收端根據協議解析相應的數據包, 恢復出原始的像素數據。

CSI-2 的數據包分為長包和短包兩種,包含有校驗碼,能進行誤碼糾正和錯誤檢測。長包和短包都是在 SoT 和 EoT 之間傳輸,在數據傳送的間隙, D-PHY 處於 LP 模式。 CSI-2數據包的傳輸機制如圖所示。 PH 和 PF 分別表示 Packet Header 和 Packet Footer。

3.1.一个frame的数据包结构:

img

3.2. 包类型

​ • 短包:4 bytes (固定)

​ • 长包:6~65541 bytes (可变)

3.2.1 短包结构

一个short packet(也叫做pack head(PH))

img

• 包结构(4个字节)

​ •   数据标识(DI) 1个字节

​ •   WC (长度固定为2个字节)

​ •   错误检测(ECC) 1个字节

• 包大小

​ •   长度固定为4个字节

3.2.2 pack footer(PF)的结构:

img

3.2.3 长包结构

img

• 包头部(4个字节)(PH)

​ •   数据标识(DI) 1个字节

​ •   数据计数WC (2个字节 )(PH和PF之間的資料個數)

​ •   错误检测(ECC) 1个字节

• 数据填充(0~65535 字节)

​ •  长度=WC*字节

• 包尾:校验和(2个字节)(PF)

长包 = 短包(包头) + 数据 + 包尾

• 包大小:

​ • 4 + (0~65535) + 2 = 6 ~ 65541 字节

3.2.4 H-blanking & V-blanking

传输多个pack和传输一个pack时对应的图像如下, VVALID/HVALID/DVALID可以先把它想成是影像的同步訊號VSync/HSync/DE,而Data就是影像資料,以方便理解。

从图中可以看到,当水平同步讯号HVALID为Low的这段区间,剛好就是每行的Blanking间隔, 也就是H-blanking。

img

从下图可以看到上一FE到下一FS之间的间隔为V-blanking。

img

frame的封包示意图:

img

3.2.5 MIPI****帧数据类型DI

img

Data Identifier (DI) 为虚拟通道(VC, 2 bit)和资料类型(DT, 6 bit)组成。

3.2.5.1 VC(virtual channel)

可以看出MIPI最多可以輸入4组影像来源,其ID为0~3,且內容可以是任意的內容,下图就表示用virtual chn来传输不同格式的数据。

img

img

3.2.5.1 DT(data type)

Data Type目前定义多种资料形态,范围从0x000x3F,其中0x000x0F为短封包类型,0x10~0x3F为長封包类型,如下表:

img

img

soc到外设发送的包类型

img

外设到soc的数据包类型

img

4. mipi****支持的图像格式

MIPI Rx 共支持五種pixel資料格式的傳輸, 包含 YUV422-8bit、 YUV422-10bit、 RAW8、RAW10 和 RAW12。

  • RGB****格式:

​ 传统的红绿蓝格式,比如RGB565,RGB888,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。

格式描述
RGB5651. 每个像素用16位表示,RGB分量分别使用5位、6位、5位。2. 内存中排列(高字节->低字节):R R R R R G G G G G G B B B B B
RGB5551. 每个像素用16位表示,RGB分量都使用5位(剩下1位不用)2. 内存中排列(高字节->低字节):X R R R R G G G G G B B B B B(X表示不用,可以忽略)
RGB24(RGB888)1. 每个像素用24位表示,RGB分量各使用8位。在内存中RGB各分量的排列顺序为:BGR BGR BGR …2. 内存中排列(高字节->低字节):B B B B B B B B G G G G G G G G R R R R R R R R
ARGB32(ARGB8888)1. 每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)2. 内存中排列(高字节->低字节):B B B B B B B B G G G G G G G G R R R R R R R R A A A A A A A A
    • YUV****格式:

YUV是一种色彩编码方法,是一种彩色编码系统,相对于RGB色彩空间,YUV传输带宽占用更低,传输数据不易出错。

Y’UV、YUV、YCbCr、YPbPr 几个概念其实是一回事儿。由于历史关系,Y’UV、YUV 主要是用在彩色电视中,用于模拟信号表示。YCbCr 是用在数字视频、图像的压缩和传输,如 MPEG、JPEG。今天大家所讲的 YUV 其实就是指 YCbCr。Y 表示亮度(luma),CbCr 表示色度(chroma)。

人眼的视觉特点是对亮度更敏感,对位置、色彩相对来说不敏感。所以在视频编码系统中为了降低带宽,可以保存更多的亮度信息(luma),保存较少的色差信息(chroma)。

luminance 亮度,luma 是在视频编码系统中指亮度值;

chrominance 色度,chroma 是在视频编码系统中指色度值。

Y’UV 设计的初衷是为了使彩色电视能够兼容黑白电视。对于黑白电视信号,没有色度信息也就是(UV),那么在彩色电视显示的时候只显示亮度信息。

YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式。色度(UV)定义了颜色的两个方面─色调与饱和度,分别用CB和CR表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

YUV采样格式:(subsamping)

原则:在数字图像中,

(1) 每一个图形像素都要包含 luma(亮度)值;

(2)几个图形像素共用一个 Cb + Cr 值,一般是 2、4、8 个像素。

主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。

•YUV 444 采样

全采样,对每个像素点的的YUV分量都进行采样,这样的三个分量信息量完整

假设4*4像素,采样格式如下:

[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]

那么19201080文件的大小:19201080*3(B),那么一个像素对应3个字节

YUV 422 采样

•部分采样,可节省1/3存储空间和1/3的数据传输量。UV分量是Y分量采样的一半,Y分量和UV 分量按照2 : 1的比例采样。如果水平方向有10个像素点,那么采样了10个Y分量,而只采样了5个UV分量。其中,每采样过一个像素点,都会采样其Y分量,而U、V分量就会间隔一个采集一个

假设4*4像素,采样格式如下:

[y u] [y v] [y u] [y v]
[y v] [y u] [y v] [y u]
[y u] [y v] [y u] [y v]
[y v] [y u] [y v] [y u]

19201080文件的大小:19201080+192010800.5+192010800.5(B),那么UV的数量减少了一半,相对于YUV444空间节省了1/3

YUV 420 采样

•部分采样,可节省1/2存储空间和1/2的数据传输量。YUV 420采样,并不是指只采样U分量而不采样V分量。而是指,在每一行扫描时,只扫描一种色度分量(U或者V)和Y分量按照2 : 1的方式采样。比如,第一行扫描时,YU 按照 2 : 1的方式采样,那么第二行扫描时,YV分量按照 2:1的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和Y分量相比都是2:1 。其实yuv420的取名方式不是很高明,更确切的命名为yuv420yuv402,也就是第一行只有U,而第二行只有V

假设4*4像素,采样格式如下:

[y u] [y] [y u] [y]
[y v] [y] [y v] [y]
[y u] [y] [y u] [y]
[y v] [y] [y v] [y]

19201080文件的大小:19201080+192010800.25+192010800.25(B)相对于YUV444空间节省1/2,因此也是比较主流的采样方式。

YUV存储格式

    • RAW data****格式:

​ RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些元数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。Raw data(Raw RGB)经过彩色插值就变成RGB。

img

sensor上每个像素只采集特定颜色的光的强度,因此sensor每个像素只能为R或G或B 。

bayer阵列:

人眼对绿色比较敏感,所以一般bayer格式的图片绿色格式的像素是是r和g像素的和,那么bayer格式一般有下面4种:

img

5. mipi CSI传输格式:

raw 8:

img

raw10:

img

raw 12:

img

从图像看,RAW8是一传输个字节对应一个pixel, 而raw10是5个byte去对应4个pixel,第5个byte用来存储pixel 0~3的bit[0:1]。同理3个byte存储2个pixel。

img

6. 彩色深度(色彩位数)

​ 8位彩色,有256种深度。

​ 16位彩色:65,536种颜色。

​ 24位彩色:每种原色都有256个层次,它们的组合便有256256256种颜色。

​ 32位彩色:除了24位彩色的颜色外,额外的8位是储存重叠图层的图形资料(alpha透明度)。

7. 图像解析度/分辨率(Resolution)
1280 * 720 = 9216001M100万像素720PH65 sensor
1920 * 1080 = 20736002M200万像素1080PImx307/imx327 sensor
2560 * 1440 = 36864002560 * 1600 = 40960002592 * 1944 = 50388484M/5M400万像素500万像素2KImx335/sc4210 sensor
3840 * 2160 = 82944008M800万像素4KImx334 sensor

END

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值