MIPI CSI-2学习

CSI(Camera Serial Interface)定义了摄像头外设与主机控制器之间的接口,旨在确定摄像头与主机控制器在移动应用中的标准。


关键词描述

缩写解释
CCICamera Control Interface(物理层组件,通常使用I2C或I3C进行通信)
CILControl and Interface Logic
DTData Type(数据格式,YUV422、RGB888等)
SoTStart of Transmission(传输启动信号)
EoTEnd of Transmission(传输停止信号)
FSFrame Start(一帧画面开始标志)
FEFrame End(一帧画面结束标志)
LSLine Start(一行像素开始标志)
LELine End(一行像素结束标志)
PHPacket Header(包头)
PFPacket Footer(包尾)
HSHigh SPeed(DPHY的传输模式之一)
LPLow Power(DPHY的传输模式之一)
LP-RXLow-Power Receiver(DPHY LP接收器)
LP-TXLow-Power Transmitter(DPHY LP发送器)
HS-RXHigh-Speed Receiver(DPHY HS接收器)
HS-TXHigh-Speed Transmitter(DPHY HS发送器)
Lane单向、点对点的信号传输通道,对于DPHY由2线差分接口构成
Virtual Channel用于标识多路独立数据流,DPHY最高支持16个虚拟通道
UI单位间隔,等于Clock Lane上任意HS状态(HS0或HS1)的持续时间

概述

CSI-2定义了摄像头应用中发送方(camera)与接收方(soc)之间的数据与控制传输标准,其物理层支持DPHY与CPHY两种,这里以DPHY为例。


CSI-2层定义

与网络标准的多层协议相似,CSI-2标准也对camera数据处理的过程进行了分层,简单来说分为应用层、协议层与物理层。协议层又进行了细分:像素字节转换层、低级协议层、Lane管理层。

csi2_layer

  • 应用层(Application Layer)
    该层主要用于不同场景对数据的处理过程,对于发送方,多为camera生成数据,对于接收方,多为SOC对数据进行处理。
  • 协议层(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的数量是可拓展的。因此,在面临多Lane同时传输时,发送方需要对字节流进行公平分流(distributor),接收方则需要对多Lane数据进行合并(merger)。
  • 物理层(PHY Layer)
    PHY层指定了传输媒介,在电气层面从串行bit流中捕捉“0”与“1”,同时生成SoT与EoT等信号。

物理层 DPHY

DPHY在物理上采用2线差分接口,由1对的差分clock lane与1对或多对的差分data lane组成。

DPHY

上图表明使用DPHY作为物理层时,Camera与SOC之间的硬件关系。SOC的CCI组件通过I2C完成对Camera的配置,使其输出mipi信号,其中一对Clock+/-则由Clock Lane标示,一对DataNBA+/-则由Data Lane标示。

DPHY工作于两种工作模式:

  • HS(High Speed Mode),这种模式用于传输高速的数据信号,如视频流;高速模式下,每对Lane都是工作在低电压摆幅的差分状态下,数据速率为80Mbps到1500Mbps。
  • LP(Low Power Mode),这种模式则可以用来传输控制信号;低速模式下,每对lane的2根导线都转变为单端状态,数据速率为10Mbps。

Lane Module

上图为单个Lane模块的内部组成,包含了CIL(Lane控制器与借口逻辑器),LP驱动器,HS驱动器,LP冲突检测。CIL负责控制各个驱动器的工作状态,使得Dp、Dn的工作状态可以在HS与LP之间进行切换。

Line Level

处于HS模式下,差分信号电平摆幅约为200mV;处于LP模式下,单端信号电平摆幅约为1.2V。
在LP模式下,根据各个Line的电平可以确定当前Lane的State。

Data Lane

Lane State

Data Lane差分线电平的高低表明了当前处于何种状态,发送方通过驱动差分线一系列的状态变化,进入不同的工作模式。

  • Burst Mode:High-Speed下的唯一模式,高速数据传输模式,此时各个Lane的Line工作在差分模式
  • Control Mode:Low Power下的一种模式,可以通过变化不同的state进入其他模式。
  • Escape Mode:Low Power下的特殊模式,在这种模式下可以使用一些特别的功能,详见下文。

协议中规定了进入不同模式时的state变化状态:

  • HS模式:

    • 进入HS模式:LP11->LP01->LP00

通常进入HS模式也就伴随着高速数据的传输,因此SoT(启动传输)信号也就产生(由于手头没有差分探针,示波器抓到的波形只能看出大致形状)。

SoT

SoT_Scop

上图为完整的SoT时序,可以看出SoT由“进入HS模式(A)”和“同步序列(B)”组成。

SoT流程如下:

发送方接收方
处于stop状态监测stop状态
进入HS-Rqst状态(LP01)并保持TLPX时间监测到LP11至LP01的状态变化
进入Bridge状态(LP00)并保持THS-PREPARE时间监测到LP01至LP00的状态变化
打开HS驱动器,同时关闭LP驱动器_
进入HS0状态并保持THS-ZERO时间使能HS的接收,并等待THS_SETTLE时间,进入稳定期
_寻找Sync_Sequence
发出Sync_Sequenc'00011101'_
_接收到Sync_Sequence
发送负载数据
_接收负载数据
  • 退出HS模式:LP11

EoT

EoT_Scop

EoT流程如下:

发送方接收方
完成负载数据发送接收负载数据
发送完最后一个bit后立刻翻转差分线状态,并保持THS-TRAIL时间_
关闭HS-TX,使能LPTX,并进入LP11状态_
  • 进入Escape模式:LP11->LP10->LP00->LP01->LP00
    进入Escape模式后,则可以通过发送8bit命令执行相应的功能,下表列出了可用的Escape命令:
功能命令类型命令
Low-Power Data Transmissionmode11100001
Ultra-Low Power Statemode00011110
Undefined-1mode10011111
Undefined-2mode11011110
Reset-TriggerTrigger01100010
Unknown-3Trigger01011101
Unknown-4Trigger00100001
Unknown-5Trigger10100000
  1. Low-Power Data Transmission

    LPDT功能下,数据能够在LP模式下进行低速传输,此时Clock的时钟需要小于20MHz。

    LPDT

  上图描述了LPDT下传输2Byte数据的时序。
  1. Reset-Trigger

    Reset-Trigger是发送方与接收方相互对应的通信形式,如果输入命令模式与Reset-Trigger命令相匹配,则在接收端通过逻辑PPI向协议标记一个
    
  2. Ultra-Low-Power

    
    发送方发送ULPS码后,接收方则可以根据这个信号进行自己的LowPower处理。在
    ULPS期间,Line始终处于LP00状态。若出现持续T<sub>WAKEUP</sub>的Mark-1状态后紧接着Stop状态则退出ULPS。
    

Clock Lane

与Data Lane一样,Clock Lane也有两种模式,高速传输模式与低功耗模式。
Clock_Lane

很明显,Clock Lane进入与退出高速模式与Data Lane基本一致。
下面两个表格描述了进入LowPower模式与HS模式的过程(结合上面的时序图与Lane模块的内部组成图一起看)

进入LP模式:

发送方接收方
驱动HS Clock信号(HS-0与HS-1交替切换的这种状态)接收HS Clock信号
最后一个Data Lane进入LP模式_
继续驱动HS Clock信号保持TCLK-POST时间并以HS-0结束_
保持HS-0状态约TCLK-TRAIL时长在TCLK-MISS检测时钟是否消失,并关闭HS-RX单元
关闭HS-TX单元,使能LP-TX单元,转变为停止状态LP-11并保持THS-EXIT_
_检测到LP-11状态,关闭HS终端,进入停止模式

进入HS模式

发送方接收方
驱动至Stop状态(LP-11)侦测Stop状态
驱动至HS-Req(LP-01)并保持TLPX侦测导线上是否出现LP-11到LP-01的变化
驱动至LP-00并保持TCLK-PREPARE侦测LP-01到LP-00的变化并在TCLK-TERM-EN后使能HS终端
使能高速驱动器同时关闭LP驱动器,保持HS-0状态TCLK-ZERO使能HS-RX并等待TCLK-SETTLE
_接收HS信号
在Data Lane启动之前,驱动HS Clock保持TCLK-PRE接收HS Clock信号

时序参数

接收方的DPHY能否成功捕捉到有效的数据取决于发送与接收两方之间的时序,下表列出了收发双方的所有时序参数,其中接收方的时序应该能够兼容发送方的时序参数。
timing_param1

timing_param2

notes


多Lane的分发与合并

当某些应用场景需要的带宽超过了单Lane所能提供的带宽或者为了降低Clock频率的情况下,则可以通过拓展Data Lane来满足要求。

下图展示了数据流在单lane与多lane的情况下,发送方内部的Lane Distribution Function(LDF)对来自LLP层的字节数据流的分发过程。

lane_distribution

对于接收方,对应的拥有一个Lane Merging Function(LMF),用于将PHY层的多lane的数据合并为LLP层所需的字节流。

lane_merging

在多Lane(定为N)传输的情况下,对于一帧数据,其数据长度不是Lane数量(N)的整数倍的情况下,则倒数第二组数据发出后会剩下少于N的字节需要发送,此时LDF会将无数据分配的Lane置为“Invalid Data”直接进入EoT。

下图展示了分发后的数据在2个Lane上的传输情况(包含两种情况)

lane_dis_dphy

多Lane合并就是多Lane分发的相反过程,这里就不在赘述。

低级协议(Low Level Protocol)

LLP是基于字节,以包为单元的协议,支持长短两种包格式。

  • 传输任意数据(负载独立)
  • 以字节为数据元
  • 对于DPHY,支持16路虚拟通道;对于CPHY,支持32路虚拟通道
  • 支持独立的帧起始,帧结束,行起始,行结束等数据包
  • 包含对数据类型,像素深度与格式的描述
  • 16-bit Checksum错误侦测
  • 6-bit 错误发现与纠正

LLP支持两种包结构,分别为长包与短包,包格式与长短取决于具体的物理层。无论何种类型的包,均由SoT信号开始,EoT信号结束。

llp_overview

以DPHY为例来分析具体的协议格式,DPHY长包主要由包头、包负载、包尾三部分组成,具体如下图:
llp

短包协议格式如下图:

llp_s

其中Data Type取值为0x10-0x37(见下图),虚拟通道由4bit构成,高2bit来自VCX,低2bit来自Data ID的bit6、7。

data_type_class

上图可以发现,短包有两类Data Type

  • 同步短包:用于对帧或行起停进行标识,起到同步作用。

sync_short

  • 通用短包:通用短包数据类型的目的是提供一种在数据流中打开/关闭快门、触发闪光灯等的机制。16bit短包数据域用于传输约定好的信息,实现对一些自定义功能的控制。

generic_short

虚拟通道(virtual Channel ID)

虚拟通道的作用是在交织传输的不同数据流中,区分出各个数据流所属的逻辑上的通道,以max9286为例,来自4路同轴线的相机数据可以设置为不同的虚拟通道,这样,在SOC侧CSI模块处理时,可以根据不同的虚拟通道ID将每个摄像头的数据转发至各自的内存区域,这样就能从4个地址获得单独的4个图像。若不使用虚拟通道,则4路数据就无法区分了(当然max9286内部能够将4个图像拼接为一个大图输出)。
虚拟通道由包头中的VC与VCX构成,对于DPHY来说,由4bit组成,最高16路虚拟通道,高2bit来自VCX,低2bit来自VC。

vc

数据类型(Data Type)

数据类型表明了负载数据的格式和内容,上文提到,根据长短包的不同,数据类型共有8种不同的分类。短包数据类型的详细信息在上文已经介绍了,这里说明下长包的5种数据类型,详见下表:

data_format

像素字节转换

图像数据在LLP传输时需要以字节流的形式进行,应用层来的像素数据需要根据具体的像素格式进行转换,以YUV422 8bit为例:
YUV422 8bit是以UYVY的顺序进行传输的,见下图:

yuv422_8bit

YUV422 8bit的最小包传输单元如下表,其他长度的包长度必须为最小单元的整数倍:
yuv_packet

为什么最小包单元是2pixels、4bytes、32bit而不是1pixels、2bytes、16bit呢?这是因为YUV422 8bit中两个Y分量共用一个UV分量,因此一Packet至少需要携带2个pixels的信息。

像素至字节的转换过程如下,从CSI-2标准文档提供的示意图可以看出,相对与原数据其实也没做啥转换,就统一了数据在LLP传输时高底位的发送顺序。

pixel_byte

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nand flash坏块管理OOB,BBT,ECC

0.NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH为例&#xff0c;一片Nand flash为一个设备(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 数据块大小(512Bytes) OOB 块大小(16Byte…

小白学git2

你已经在本地创建了一个Git仓库后&#xff0c;又想在GitHub创建一个Git仓库&#xff0c;并且让这两个仓库进行远程同步&#xff0c;这样&#xff0c;GitHub上的仓库既可以作为备份&#xff0c;又可以让其他人通过该仓库来协作&#xff0c;真是一举多得。 首先&#xff0c;登陆G…

CMOS图像传感器——工作原理

一、像素阵列结构 一般像素阵列是由水平方向的行( Row ) 和垂直方向的列(Column)正交排列构成的。像素排列的最基本设计原则是:摄像器件像素排列的坐标,必须在显示的时候能够准确地还原在图像原来的相对位置上。在大多数情况下,每个像素中心线在行的方向和列的方向,即…

追寻终极数据库 - 事务/分析混合处理系统的交付挑战 (3)

挑战&#xff1a;支持多个存储引擎 以下内容并不是新发现&#xff1a;行优化存储适用于OLTP和运营工作负载&#xff0c;而列存储适用于BI和分析工作负载。频繁写入的工作负载适用于行式存储。对Hadoop而言&#xff0c;Hbase适合低延迟工作负载&#xff0c;列式ORC文件或Parquet…

异步FIFO设计(Verilog)

FIFO&#xff08;First In First Out&#xff09;是异步数据传输时经常使用的存储器。该存储器的特点是数据先进先出&#xff08;后进后出&#xff09;。其实&#xff0c;多位宽数据的异步传输问题&#xff0c;无论是从快时钟到慢时钟域&#xff0c;还是从慢时钟到快时钟域&…

python中RabbitMQ的使用(路由键模糊匹配)

路由键模糊匹配 使用正则表达式进行匹配。其中“#”表示所有、全部的意思&#xff1b;“*”只匹配到一个词。 匹配规则&#xff1a; 路由键&#xff1a;routings [ happy.work, happy.life , happy.work.teacher, sad.work, sad.life, sad.work.teacher ] "#"&am…

时钟切换处理(Verilog)

随着各种应用场景的限制&#xff0c;芯片在运行时往往需要在不同的应用下切换不同的时钟源&#xff0c;例如低功耗和高性能模式就分别需要低频率和高频率的时钟。两个时钟源有可能是同源且同步的&#xff0c;也有可能是不相关的。直接使用选择逻辑进行时钟切换大概率会导致分频…

Angular Elements 组件在非angular 页面中使用的DEMO

2019独角兽企业重金招聘Python工程师标准>>> 一、Angular Elements 介绍 Angular Elements 是伴随Angular6.0一起推出的新技术。它借助Chrome浏览器的ShadowDom API&#xff0c;实现一种自定义组件。 这种组件可以用Angular普通组件的开发技术进行编写&#xff0c;…

卢卡斯定理

卢卡斯定理:解决一类组合数取模问题 A、B是非负整数&#xff0c;p是质数。AB写成p进制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同余 即&#xff1a;Lucas(n,m,p)c(n%p,m%p)*Luc…

loadrunner中对https证书的配置

1、准备好网站的证书&#xff0c;一般证书是cer格式&#xff1b; 2、因为loadrunner只支持pem格式的证书&#xff0c;所以要将证书转换格式&#xff0c;利用openssl工具&#xff1b;&#xff08;或者直接让开发提供pem格式的证书&#xff09;3、得到pem格式的证书之后&#xff…

Datapath综合代码规范(Verilog)

一、一般准则 1、有符号数运算 利用类型“signed”完成有符号数运算&#xff0c;而不是用无符号数模拟有符号数运算。这样可以得到更好的QoR。在资源报告中检查操作数的类型和大小。 2、符号/零扩展 尽量不要手动扩展。verilog利用signed/unsigned会自动完成扩展。这样代码可…

CMOS 图像传感器——Skipping 和 Binning 模式

在通常的CMOS读取方式中&#xff0c;由于像素读取规模的差异&#xff0c;不同的分辨率对应不同的帧率。在通道带宽固定的前提下&#xff0c;想要提高帧率就要考虑是否需要缩小视野&#xff08;外圈裁切&#xff09;。若不希望视野缩小&#xff0c;需要减少采样的分辨率。 常用的…

APB协议学习

APB(Advanced Peripheral Bus) 1、APB的概述与特点 APB主要用于低带宽的周边外设之间的连接&#xff0c;例如UART、1284等&#xff0c;它的总线架构不像AHB支持多个主模块&#xff0c;在APB里面唯一的主模块就是APB 桥。其特性包括&#xff1a;两个时钟周期传输&#xff1b;无…

私有协议栈开发

通信协议从广义上区分&#xff0c;可以分为公有协议和私有协议。由于私有协议的灵活性&#xff0c;它往往会在某个公司或者组织内部使用&#xff0c;按需定制&#xff0c;也因为如此&#xff0c;升级起来会非常方便&#xff0c;灵活性好。绝大多数的私有协议传输层都基于TCP/IP…

数字图像处理——2D降噪

图像降噪处理主要分为2D&#xff08;空域&#xff09;与3D降噪&#xff08;时域/多帧&#xff09;&#xff0c;而2D降噪由于相关的实现算法丰富&#xff0c;效果各异&#xff0c;有着丰富的研究价值。理解2D降噪算法的流程&#xff0c;也对其他的增强算法有很大的帮助&#xff…

项目开发(Require + E.js)

最近在做的几个项目&#xff0c;分别用了不同的框架跟方式&#xff0c;有个H5的项目&#xff0c;用了vue框架&#xff0c; 这个项目我还没有正式加入进去&#xff0c; 等手头的这个项目完成就可以去搞vue了&#xff0c; 现在手头的这个项目是一个招聘的项目&#xff0c; 用到了…

AHB协议学习

1. 简介 AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0总线规范的一部分&#xff0c;AMBA总线规范是ARM公司提出的总线规范&#xff0c;被大多数SoC设计采用&#xff0c;它规定了AHB (Advanced High-performance Bus)、A…

数字图像处理——引导滤波

一、概述 引导滤波是由何恺明等人于2010年发表在ECCV的文章《Guided Image Filtering》中提出的&#xff0c;后续于2013年发表。引导过滤器根据局部线性模型原理&#xff0c;通过考虑引导图像的内容来计算过滤输出&#xff0c;引导图像可以是输入图像本身或另一个不同的图像。具…

Ubuntu 18.04换国内源

2019独角兽企业重金招聘Python工程师标准>>> 参考文档&#xff1a; https://blog.csdn.net/zhangjiahao14/article/details/80554616 https://blog.csdn.net/xiangxianghehe/article/details/80112149 1.复制源文件备份&#xff0c;以防万一 我们要修改的文件是sour…