MIPI CSI-2学习

2023-11-18

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


关键词描述

缩写 解释
CCI Camera Control Interface(物理层组件,通常使用I2C或I3C进行通信)
CIL Control and Interface Logic
DT Data Type(数据格式,YUV422、RGB888等)
SoT Start of Transmission(传输启动信号)
EoT End of Transmission(传输停止信号)
FS Frame Start(一帧画面开始标志)
FE Frame End(一帧画面结束标志)
LS Line Start(一行像素开始标志)
LE Line End(一行像素结束标志)
PH Packet Header(包头)
PF Packet Footer(包尾)
HS High SPeed(DPHY的传输模式之一)
LP Low Power(DPHY的传输模式之一)
LP-RX Low-Power Receiver(DPHY LP接收器)
LP-TX Low-Power Transmitter(DPHY LP发送器)
HS-RX High-Speed Receiver(DPHY HS接收器)
HS-TX High-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 Transmission mode 11100001
Ultra-Low Power State mode 00011110
Undefined-1 mode 10011111
Undefined-2 mode 11011110
Reset-Trigger Trigger 01100010
Unknown-3 Trigger 01011101
Unknown-4 Trigger 00100001
Unknown-5 Trigger 10100000
  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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIPI CSI-2学习 的相关文章

  • Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一 基于tkinter实现的UI设计 1 1 库的选择及思路 1 2 定位方法的选用 1 3 Frame控件 1 4 变量设置 1 5 批量设置 1 6 Text文本框 1 7 总体界面设计 1 8 功能
  • 【数据结构】树与二叉树

    文章目录 树型结构 什么是树型结构 树型结构的概念 树的表示形式 树的应用 二叉树 二叉树的概念 两种特殊的二叉树 二叉树的性质 二叉树性质练习 练习一 解析 练习二 解析 练习三 解析 练习四 解析 总结 树型结构 什么是树型结构 树是一
  • selenium和Firefox geckodriver的安装

    安装selenium 首先你安装了python并设置了环境变量 直接win r输入cmd 进入命令行 然后输入 pip install selenium i https pypi tuna tsinghua edu cn simple 安装
  • Tomcat默认日志路径修改

    Tomcat安装目录下Logs目录下默认会产生4种日志文件 catalina log host manager log localhost log manager log 系统出现异常的时候 有时候log文件会暴涨 这里偶是把日志文件移动到
  • npm run dev 报错:missing script:dev

    报错信息 报错原因 package json 里面没有 scripts dev xxx 这段了 解决方法
  • 七牛云的使用(图片超详讲解)

    一 为什么要使用七牛云的OSS 对象存储服务 二 七牛云使用 登录七牛云官网 注册并认证 初次认证有30天免费使用权限 新建存储空间 点击创建的空间名字 进入 空间概括如下 阅读帮助文档 在自己的web应用中 使用七牛云对象存储服务OSS
  • 多态反射机制

    package duotai class Customer SuppressWarnings unused private String account SuppressWarnings unused private String pass
  • word怎么删除最后一页空白页

    1 将光标移动到最后一页的起始处 不停的按删除键 gt 我试了 无效 2 将光标定位在倒数第二页的末尾 直接按delete键进行删除 或者可以试试按住ctrl键再按delete键 gt 我试了 还是无效 3 将光标移动到最后一页 在菜单栏找
  • 答辩经验

    例举几个问题作为参考 给大家分析一些常见问题的回答注意点以及技巧 通过这几个问题的讲解告诉大家如何为答辩做准备 主要是讲一个方式方法 起一个抛砖引玉的作用 您了解之后可以针对自己的设计做相应的准备 1 你选这个课题的意义是什么呢 这个问题非
  • pandas 解决 A value is trying to be set on a copy of a slice from a DataFrame的问题

    stackoverflow 解决方案链接 https stackoverflow com questions 31468176 setting values on a copy of a slice from a dataframe rq
  • 微信小程序【发送给朋友】和【复制链接】功能,灰色不可用

    每日鸡汤 悲观者可能正确 但是乐观者往往成功 假设你是一个用户 你随便找一个小程序可以看到这几个功能 转发给朋友 分享到朋友圈 复制链接 很常见的功能 但是如果你作为开发者 这几个功能就需要自己做喽 并不是你项目建起来了就有的 1 转发给朋
  • 软实力-领导力

    领导力 领导力不是一蹴而就 需要不断训练和提炼 团队也是需要不断发展和规划 一个普通员工如何才能具备领导力呢 俗话说 天上不会掉馅饼 即使偶尔掉个馅饼下来 你的嘴也需要比别人的嘴张得大才能吃到 这 儿的嘴大可能包括你的能力和为这件事做的准备
  • echarts 图设置高度_Echarts 自适应宽高 vue

    思路 1 将图表包括在一个div中 该div设置了固定的宽高 可为百分比 2 由于不能直接设置rem进行适配 需要动态计算出 id chart 的高度 setChartHeight 根据自己需要调节图形大小 我的图形是放在 中 let ma
  • Golang获取当日00:00:00时间戳

    遇到好几次这个问题了 go的time里也没有这东西 百度也搜不到 很烦 干脆自己写一份 放到这里 year month day time Now Date location time LoadLocation Asia Shanghai 这
  • ESD 接触放电、空气放电

    1 接触放电主要针对的是半成品电子电气产品 或者是带金属外壳的成品 一般做接触放电主要是金属外壳 接触放电的放电头是尖头 2 空气放电主要是针对塑料外壳或者是金属外壳表面有绝缘漆的成品 空气放电的放电头是圆形头 3 一般接触放电或者空气放电
  • Python 之父 Guido van Rossum 称退休太无聊,正式加入微软搞开源!

    参考 https blog csdn net sinat 14921509 article details 109667079
  • 产品养成记

    参与感 pdf 从零开始做运营入门篇 张亮 pdf 结网 pdf 精益创业 pdf 区块链 定义未来金融与经济新格局 pdf 区块链 从数字货币到信用社会 pdf 人人都是产品经理 pdf 如何阅读一本书 pdf 上瘾 pdf 数据分析实战
  • 阿里云ACP级认证考试心得+过关经验

    正在准备阿里云ACP级认证考试的童鞋福利来啦 经过小编的软磨硬泡 终于从高分通过ACP云计算专业认证及大数据专业认证的大牛同事那里要来了考试心得 经验分享 直接看吧 认证考试简介 知己知彼知大纲 首先介绍一下ACP考试 阿里云认证类似于大家

随机推荐

  • flutter Text数字超出全部隐藏 解决方法

    如图 刚开始是这样的 问题原因 前面的 ID 与后面的文字存在间隙 解决方法 修改前 child Text ID 1114954321 textAlign TextAlign right maxLines 1 overflow TextOv
  • 切面打印日志时,参数序列化异常。It is illegal to call this method if the current request is not in asynchron

    1 AOP的日志拦截类中 抛出异常 2 代码如下 package com jimulian iwuxi common aop import com alibaba fastjson JSON import com jimulian iwux
  • 华为OD机试真题-增强的strstr-2023年OD统一考试(B卷)

    题目描述 C 语言有一个库函数 char strstr const char haystack const char needle 实现在字符串 haystack 中查找第一次出现字符串 needle 的位置 如果未找到则返回 null 现
  • Android最简洁的自动换行布局组件

    自动换行是一种布局特性 理所当然应该在布局组件中实现 我们基于ViewGroup实现了最简洁和稳定的自动换行布局组件AutoLinefeedLayout 该组件无需特别设置 只要将孩子塞给它 就会自动换行显示 无任何限制 源码如下 pack
  • [苹果开发者账号]01 使用Apple Developer app注册提示:未能验证证件

    1 登录https developer apple com 2 点击Learn More 3 使用自己的iPhone 到AppStore下载Apple Developer app Apple Developer app使用帮助 https
  • 【高效数据结构——位图bitmap】

    初识位图bitmap 位图 Bitmap 是一种用于表示和操作位 bit 的数据结构 它是由一系列二进制位 0 或 1 组成的序列 每个位都可以单独访问和操作 位图常用于以下情况 压缩存储 位图可以有效地存储大量的布尔值信息 每个位只占用一
  • CSS生成的迷宫

  • unity shader可视化工具——Shader Graph

    unity shader可视化工具 Shader Graph 前言 一 Shader Graph介绍 什么是Shader Graph 二 Shader Graph安装配置 1 新工程中使用Shader Graph 2 旧工程中使用Shade
  • 将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

    本文是对 NET Tutorial Deploy a microservice to Azure 的翻译和实践 入门级踩坑实践 k8s 大佬请回避 以免浪费您宝贵的时间 介绍 本文的目的是 通过使用 DockerHub 和 Azure Ku
  • 爬取招聘数据进行数据分析及可视化

    爬取招聘信息 对数据分析行业目前就业形式进行数据分析 大体流程如下 1 通过requests模块获取指定的某招聘信息 2 用pandas进行数据清洗 3 用matplotlib进行数据的可视化 导入需要用到的包 import request
  • python icon生成小工具

    在项目制作的过程中 有可能会出现一张图片需要有不同的大小去适应不同的设备和位置时 手动去一个个制作比较麻烦 本人通过网上学习粗略敲了一段python脚本 可能有考虑不周之处还请指出 文底有下载链接 old file new file new
  • 将代码上传到gitee

    1 新建gitee仓库 直接点击创建即可 2 到idea点击vcs gt Enable 3 项目点击右键 选中下列 4 选中项目右键 复制进去链接 5 项目右键 选中下列的文件 6 提交 push push 7 去gitee刷新文件已经上传
  • 框架的注解

    文章目录 一 mybatis 1 MyBatis的常用注解 2 MyBatis的注解实现复杂映射开发 二 Spring 1 Spring原始注解 2 Spring新注解 3 注解配置 AOP 详解 三 springMVC 1 Request
  • 爬山算法启发

    爬山算法 是一种局部择优的方法 采用启发式方法 是对深度优先探索的一种改进 它利用反馈信息帮助生成解的决策 属于人工智能算法的一种 相关术词解释 1 启发式方法 简化虚拟机和简化行为判断引擎的结合 简单讲就是提前对某项行为进行检测和判断 拥
  • win10系统安装Nginx

    Nginx是一款自由的 开源的 高性能的HTTP服务器和反向代理服务器 同时也提供了IMAP POP3 SMTP服务 Nginx可以进行反向代理 负载均衡 HTTP服务器 动静分离 正向代理等操作 因为最近在公司使用到了Nginx 第一步
  • nginx目录结构和配置文件详解

    nginx目录结构和配置文件详解 0x00 Nginx 目录结构 Nginx 文件结构比较简洁 主要包括配置文件和二进制可执行程序 通过安装包形式安装的 nginx 文件结构跟各 Linux 发行版目录规则存放配置文件和二进制文件的位置 目
  • 3 Minute Thesis (3MT)

    1 定义 资料来源 https zhuanlan zhihu com p 63325983 utm id 0 3MT原则 要把博士课题介绍给一个受过高等教育但没有专业背景的人并阐述它的重要性 定义 三分钟论文 3MT 是一个学术比赛 帮助当
  • k8s问题 CrashLoopBackOff

    我们创建资源发现资源出现CrashLoopBackOff解决 CrashLoopBackOff 告诉我们 Kubernetes 正在尽力启动这个 Pod 但是一个或多个容器已经挂了 或者正被删除 root localhost kubectl
  • R语言09-单变量绘图(频数分布直方图/折线图)

    使用ggplot绘图系统 运用qplot ggplot两种方式进行单变量绘图示例 直方图 qplot 系统默认柱状图 library ggplot2 qplot x dob day data users 传入参数x和数据集 ggplot 与
  • MIPI CSI-2学习

    CSI Camera Serial Interface 定义了摄像头外设与主机控制器之间的接口 旨在确定摄像头与主机控制器在移动应用中的标准 关键词描述 缩写 解释 CCI Camera Control Interface 物理层组件 通常