MIPI接口:(4)MIPI CSI-2协议详解(上)
1. 什么是CSI?
CSI(Camera Serial Interface)是MIPI联盟早期制定的摄像头接口标准,主要用于连接摄像头和处理器。
CSI-2是CSI的第二代版本,在原有基础上进行了全面优化:
(1)分层架构:CSI-2明确将协议分为应用层、协议层和物理层,并新增了“虚拟通道”功能,可支持多个摄像头通过同一物理链路传输数据。
(2)数据包机制:CSI-2定义了长包(Long Packet)和短包(Short Packet)两种格式。长包用于传输图像数据,短包用于同步信号(如帧开始、行结束等控制指令),而CSI仅支持单一数据格式。
2. CSI-2 Layer
类似于大家熟知的以太网协议,都是一层一层打包。分为三层:应用层(Application)、协议层(Protocol Layer)和物理层(PHY Layer)。下图中的Transmitter一般指摄像头模块,Receiver一般指处理摄像头数据的芯片(例如手机SoC)。

Figure 1. CSI-2 Layer
2.1 物理层
物理层是MIPI联盟定义的PHY规范。定义了传输媒介(如电导体)、输入/输出电路,以及时钟机制,用于从串行数据流中准确捕获“0”和“1”。
(1) 它规定了传输的线路、电路参数、时钟同步机制等,保证数据不会乱;
(2) 定义了信号的“开始”和“结束”规则,确保数据有序传输。
2.2 协议层
在发射端,协议层的作用就是给数据加上Header和数据校验信息。
在接收端,协议层就是解析头部,然后交给对应的逻辑处理,同时进行错误检测,确保数据完整性和正确性。
(1)Pixel/Byte Packing/Unpacking Layer(像素/字节打包 & 解包层)
TX:这一层的作用就是将不同像素格式pixels(支持6bits-24bits)打包成字节(8bits),传到下一层Low Level Protocal.
RX:将从Low Level Protocol接收到字节解包成pixels,传到上一层Application。
(2)Low Level Protocol(低级协议层,LLP)
保证数据在SoT到EoT之间是按字节和按位同步。传输的最小单位为1Byte。
管理大小端Endian。
(3)Lane Management(通道管理层)
在这一层,CSI-2是可扩展的(Lane-scalable),可以根据带宽需要选择传输通道的数目(1~4)。
TX:如果选择了多通道,在发射端需要将数据分配到各个通道进行并行传输。
RX:从多个通道接收数据,还原成原始数据流。
2.3 应用层
应用层主要负责higher-level的数据编码和数据解析,用于处理数据流中的信息。
3. CCI
CCI(Camera Control Interface)是一个双线、双向、半双工的串行接口。
CCI用于控制CSI-2发送端(摄像头)。
在CSI-2中,接收端(处理器)是CCI Master,发送端(摄像头)是CCI Slave。
CCI相当于摄像头的控制器,用来让手机SoC控制摄像头的参数,比如分辨率、帧率、曝光等。
CCI基于I2C(Fast Mode 400KHz,7bit地址寻址),但是不支持Multi-Master Mode。例如,一个手机有前后两个摄像头,一个CCI可以连接这两个摄像头(CCI slave),但是只有一个Master(手机处理器)。
通俗理解,CSI-2用来传照片,CCI用来调整相机参数。
4. Multi-Lane Distribution and Merging
Multi-Lane Distribution时,可能会发生需要传输的总字节数不能被Lane数量整除。所有通道是同时发送,所以会存在部分通道提前结束的情况。每个 D-PHY 数据 Lane 独立工作,不受其他 Lane 影响。

Figure 2. Two Lane Multi-Lane Example
5. Low Level Protocol
LLP有两种数据包:长包(Long Packet)和短包(Short Packet)。
每个数据包开始,设备先从LP模式切换到HS模式,然后发送ST。结束时发现ET序列,回到LP模式。

Figure 3. Low Level Protocol
6. Long Packet长包

Figure 4. Long Packet Structure
从上图可以得知:
(1)一个Long Packet由PH(Packet Header)、Data Payload和PF(Packet Footer)组成;
(2)PH进一步由DI、WC和ECC组成。
DI:定义虚拟通道(Virtual Channel, VC)和数据类型(Date Type, DT)。
WC(Word Count):字数计数。解析完PH后,接收端会读取Word Count x 8bit的数据。在读取数据时,不会检查同步码(Sync Code)。即内容可以任意值。
ECC:8bit纠错码。用于检测和修正包头中的错误。能够纠正1-bit错误,检测2-bit错误。
PF包含16bit校验码,用于检查数据包是否正确传输。
Date Type(DT):0x10~0x37代表不同的数据格式,具体如下表所示:

上表中,前2行表示的短包数据类型,后面6行表示的是长包数据类型。
短包数据类型格式展开如下表所示:

6.1 数据传输顺序
每个字节按照最低有效位(LSB)优先传输。
多字节数据按照最低有效字节优先传输。
6.2 包解析流程
(1)读取SoT,进行数据包解析;
(2)解析Packet Header,获得DI、Word Count和ECC;
(3)根据Word Count,读取Data Payload;
(4)读取Packet Footer并检查checksum是否正确;
(5)解析完后,等待EoT。然后继续等待下一个SoT处理下一个数据包。
7. Short Packet短包
Short Packe仅包含PH包头,没有包尾,没有Data Payload。包头中的WC字段会被“短包数据字段“替换。包头依然包含了8bit ECC,可以纠正1bit错误,检测2bit错误,确保数据的正确性。
从下图可以发现短包信息量相比长包很小,但是很关键,短包的作用如下:
(1) 帧同步数据(Frame Synchronization Data Type):代表帧号(Frame Number);
(2) 行同步数据(Line Synchronization Data Type):代表行号(Line Number);
(3) 通用短包数据(Generic Short Packet Data Type):用户自定义,可以存放任意内容。

Figure 5. Short Packet Structure
Data ID由VC和DT两部分组成,如下图所示。VC位于高2bit,DT为低6bit。

Figure 5. Data Identifier Byte
VC的作用是在同一个数据流中提供多个独立数据通道,支持不同的数据流交错传输。接收端会检测VC号,并将交错的视频流正确拆分到对应的通道。由于VC 2bit,所以最多支持4个独立数据流,即有效的虚拟通道编号为0到3。
外设中的VC标识符应支持可编程配置,这样Host Processor就可以控制数据流的解复用方式。

Figure 6. Logical Channel Block Diagram
7.1 通用短包数据格式
传递额外的控制或者时间信息:
(1) 控制相机快门的开启、关闭;
(2) 触发闪光灯;
(3) 其他特定应用需要的同步信号。

相关文章:
MIPI接口:(4)MIPI CSI-2协议详解(上)
1. 什么是CSI? CSI(Camera Serial Interface)是MIPI联盟早期制定的摄像头接口标准,主要用于连接摄像头和处理器。 CSI-2是CSI的第二代版本,在原有基础上进行了全面优化: (1)分层架…...
防火墙旁挂组网双机热备负载均衡
一,二层交换网络: 使用MSTPVRRP组网形式 VLAN 2--->SW3为主,SW4 作为备份 VLAN 3--->SW4为主,SW3 作为备份 MSTP 设计 --->SW3 、 4 、 5 运行 实例 1 : VLAN 2 实例 2 : VLAN 3 SW3 是实例 1 的主根,实…...
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式) 一、项目背景 在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以…...
硅基流动nodejs流式输出
使用JavaScript的api直接在前端问答速度虽然快但是有token直接暴露的风险。 现在使用nodejs也可以快速进行流式输出并且可以隐藏用户敏感信息。 const express require(express); const axios require(axios); const app express(); const port 3000;//启动服务node index…...
mysql深度分页优化方案
mysql深度分页优化方案 在MySQL中,深度分页(即查询大量数据中的靠后部分)通常会导致性能问题,尤其是在使用 LIMIT offset, count 时。随着 offset 的增大,MySQL需要扫描更多的行,导致查询变慢。以下是一些优…...
视频教育网站开源系统的部署安装 (roncoo-education)服务器为ubuntu22.04.05
一、说明 前端技术体系:Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系:Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统:roncoo-education(核心框架:S…...
中间件专栏之MySQL篇——MySQL缓存策略
本文所说的MySQL缓存策略与前文提到的buffer pool不同,那是MySQL内部自己实现的,本问所讲的缓存策略是使用另一个中间件redis来缓存MySQL中的热点数据。 一、为什么需要MySQL缓存方案 缓存用户定义的热点数据,用户可以直接从缓存中获取热点…...
CSS 日常开发常用属性总结
文章目录 CSS 日常开发常用属性总结一、 常用 CSS 属性1、布局相关(1)display:(2)position:(3)float:(4)clear: 2、尺寸与溢出&#x…...
CF 886A.ACM ICPC(Java实现)
题目分析 输入6个值,判断某三个值的和能够等于另外三个值的和 思路分析 首先判断总和是不是一个偶数,如果不是就“NO”。由于小何同学算法不好,只能使用三层for循环强行判断某三个值是否能等于总和的一半,可以就“YES”。 代码 …...
Spring Boot 自动装配深度解析与实践指南
目录 引言:自动装配如何重塑Java应用开发? 一、自动装配核心机制 1.1 自动装配三大要素 1.2 自动装配流程 二、自定义自动配置实现 2.1 创建自动配置类 2.2 配置属性绑定 2.3 注册自动配置 三、条件注解深度应用 3.1 常用条件注解对比 3.2 自定…...
【windows driver】 开发环境简明安装教程
一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤: 1、安装Visual Studio IDE 笔者建议安装最新版本,可以向下兼容。发文截止到目前,VS2022是首选,当前笔者由于项…...
探秘基带算法:从原理到5G时代的通信变革【八】QAM 调制 / 解调
文章目录 2.7 QAM 调制 / 解调2.7.1 概述2.7.2 星座图星座图的结构与性能发射端的信息编码与接收端的解码差分编码的分类与实现差分编码的模4格雷加法器公式16QAM星座图与映射关系 2.7.3 信号表达式正交振幅调制的基本原理与系统分析相位误差对QAM性能的影响多电平正交振幅调制…...
Flink性能指标详解MetricsAnalysis
文章目录 Flink 组成1.JobManager2.TaskManager3.ResourceManager4.Dispatcher5.Client6. Env JobManager MetricsTaskManager Metrics Flink 组成 1.JobManager 管理任务 作业调度:负责接收和调度作业,分配任务到 TaskManager。资源管理:…...
Git强制覆盖分支:将任意分支完全恢复为main分支内容
Git强制覆盖分支:将任意分支完全恢复为main分支内容 场景背景完整操作步骤一、前置准备二、操作流程步骤 1:更新本地 main 分支步骤 2:强制重置目标分支步骤 3:强制推送至远程仓库 三、操作示意图 关键风险提示(必读&a…...
WPF 如何使文本显示控件支持显示内容滚动显示
WPF中如何使文本显示控件支持显示内容滚动显示 在WPF中,TextBlock 控件本身并不直接支持滚动功能,因为它的设计初衷是用于静态文本展示。但是,你可以通过一些技巧和自定义控件来实现 TextBlock 的滚动效果。以下是几种常见的方法:…...
Halcon 车牌识别-超精细教程
车牌示例 流程: 读取图片转灰度图阈值分割,找车牌内容将车牌位置设置变换区域形状找到中心点和弧度利用仿射变换,斜切车牌旋转转正,把车牌抠出来利用形态学操作拼接车牌号数字训练ocr开始识别中文车牌 本文章用到的算子(解析) Halcon 算子-承接车牌识别-CSDN博客 rgb1_to_gray…...
HTTP/1.1 和 HTTP/2 的区别,HTTP/2 有哪些新特性?
HTTP/1.1 和 HTTP/2 的区别及新特性详解 一、核心区别:连接管理与多路复用 HTTP/1.1 使用「短连接」或「持久连接」,但每个 TCP 连接在同一时刻只能处理一个请求(HOL Blocking)。浏览器通常通过开启多个 TCP 连接(…...
Redis实战篇《黑马点评》8 附近商铺
8.附近商户 8.1GEO数据结构的基本用法 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据,常见的命令有 GEOADD:添加一个地理空间…...
【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡
【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡 开发背景 接下来我们直接打开我们的项目开始进一步操作, 实战开发 导入项目 我把得到的项目解压到本地,我们开…...
通过ollama本地化部署deepseek后,通过API方式请求特别的慢
通过ollama本地化部署deepseek后,通过API方式请求特别的慢 一、现象二、原因分析 一、现象 deepseek火了之后,本地私有化部署大模型的门槛大大降低,即使是在家里的windows电脑,也非常简单就可以安装大模型并且使用,最…...
CSS3中布局方式说明
CSS3 提供了多种灵活的布局方式,适用于不同的场景和需求。以下是主要的布局方式及其特点: 1. Flexbox 布局(弹性盒子) 用途:一维布局(水平或垂直方向排列元素)。特点: 通过 display…...
kafka-web管理工具cmak
一. 背景: 日常运维工作中,采用cli的方式进行kafka集群的管理,还是比较繁琐的(指令复杂?)。为方便管理,可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak: cmak是 Yahoo 贡献的一款强大的 Apac…...
T41LQ专为人工智能物联网(AIoT)应用设计,适用于智能安防、智能家居、机器视觉等领域 软硬件资料+样品测试
君正(Ingenic)T系列芯片涵盖多个型号,每个型号根据不同应用需求提供了多个版本。以下是各型号及其主要版本: 1. T23系列: T23N:标准版,适用于移动摄像机、安全监控、视频通话和视频分析等应用…...
Unity中动态切换光照贴图LightProbe的方法
关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...
考研408数据结构线性表核心知识点与易错点详解(附真题示例与避坑指南)
一、线性表基础概念 1.1 定义与分类 定义:线性表是由n(n≥0)个相同类型数据元素构成的有限序列,元素间呈线性关系。 分类: 顺序表:元素按逻辑顺序存储在一段连续的物理空间中(数组实现&…...
C++基础知识(七)之STL算法、智能指针、文件操作、C++异常、断言
二十一、STL算法 STL提供了很多处理容器的函数模板,它们的设计是相同的,有以下特点: 1)用迭代器表示需要处理数据的区间。 2)返回迭代器放置处理数据的结果(如果有结果)。 3)接受…...
vue3.2响应式优化
Vue 3.2 在响应式方面做了诸多优化,进一步提升了性能,下面为你详细介绍: 1. shallowReactive 和 shallowRef 的性能优势 原理:shallowReactive 和 shallowRef 是浅层响应式 API。shallowReactive 仅对对象的第一层属性进行响应式…...
【Linux】线程概念与控制
线程概念与控制 一.Linux线程概念1.什么是线程?2.分页式存储管理1.虚拟地址和页表的由来2.物理内存管理3.页表4.页目录结构5.两级页表的地址转换6.缺页中断(异常) 3.线程的优点(面试题)4.线程的缺点5.线程异常6.线程用途 二.Linux进程VS线程1.进程和线程2.进程的多个…...
零基础学习Python之循环详解:从入门到实践_我的学习Python记录11
零基础学习Python之循环详解:从入门到实践_我的学习Python记录11 一、前言 最近我在学习Python,发现很多编程概念和用法都让我感到陌生,尤其是循环这个概念。今天,我将分享我学到的循环知识,希望能帮助到和我一样的初…...
电子电路中,正负双电源供电的需求原因
1. 允许信号双向摆动 - **交流信号的处理**:许多电路(如音频放大器、运算放大器)需要处理正负交替变化的交流信号(例如声音信号、传感器输出)。如果仅用单正电源(如12V),信号的“负…...
