mipi协议:Low Level Protocol(2)

news2024/11/16 9:30:29

前言:

今天继续给大家分享mipi协议中的Low Level Protocol部分内容翻译!

Packet Header Error Correction code for D-PHY  Physical Layer Option:

数据标识符、字数计数和虚拟通道扩展字段的正确解释对于数据包结构至关重要。6位的数据包头错误校正码(ECC)允许在后者字段中纠正单个位错误,并在D-PHY物理层选项中检测到两位错误;对于C-PHY物理层选项,ECC不可用。应使用第9.5.2节中描述的汉明-修改代码的一个26位子集。ECC解码的错误状态结果应在接收器的应用层可用。

数据标识符字段 DI[7:0] 应映射到 ECC 输入的 D[7:0],字数计数低字节(WC[7:0])映射到 D[15:8],字数计数高字节(WC[15:8])映射到 D[23:16],虚拟通道扩展(VCX)字段映射到 D[25:24]。这种映射在图61中显示,该图也用作 ECC 计算示例。

a019bbdb68c7836810b310c70f0a775d.png

General hamming Code Applied to Packet Header :

所需的奇偶校验位或错误校验位的数量由汉明规则给出,并且是传输信息位数的函数。汉明规则由以下不等式表示:

e5315ea5ad761ea0f1cafbdaf9a5b09e.pngwhere d is the number of data bits and p is the number of parity bits. :其中 d 是数据位数,p 是奇偶校验位数。

将计算出的奇偶校验位附加到数据位上的结果称为汉明码字。码字 c 的大小显然是 d + p,并且汉明码字由有序集合 (c, d) 描述。汉明码字是通过将数据位乘以生成矩阵 G 来生成的。得到的乘积是码字向量 (c1, c2, c3 … cn),由原始数据位和计算出的奇偶校验位组成。用于构造汉明码的生成矩阵 G 由 I(单位矩阵)和奇偶校验生成矩阵 A 组成:

bcf7d1dca07d98cb487d425ee9c93303.png

数据包头加上错误校正码可以通过以下方式获得:PH = pG,其中 p 表示头部(26或64位),G 是相应的生成矩阵。验证接收到的码字 r,涉及将其乘以一个奇偶校验矩阵以形成 s,即综合症或奇偶校验向量:s = HPH,其中 PH 是接收到的数据包头,H 是奇偶校验矩阵:

e9b8a2dfd78b207d2bb4b66522b43c1c.png

如果 s 的所有元素都是零,则码字被正确接收。如果 s 包含非零元素,则至少存在一个错误。如果遇到单个位错误,那么综合症 s 是 H 的一个元素,它将指向错误的位。此外,在这种情况下,如果错误的位是奇偶校验位之一,那么综合症将是 I 的一个元素;否则,它将是综合症在0e16ea67dfd15b481ce28928ec43a529.png中位置所标识的数据位

Hamming-Modified Code:

使用的纠错码是一种7+1位的汉明修改码(72,64),其子集是5+1位的汉明码或(32,26)。汉明码使用奇偶校验位来纠正一个错误或检测两个错误,但不能同时做到这两点,因此额外增加了一个校验位。使用中的码允许相同的6位综合症来纠正64位序列中的前26位。为了指定一个紧凑的奇偶校验编码和综合症解码,使用了表11所示的矩阵。

b92e715e146207b261b55d4190dcbde0.png

矩阵中的每个单元格代表一个综合症,前26个单元格(橙色单元格)使用前三个或五个位来构建综合症。矩阵中的每个综合症都是以最高位(MSB)左对齐的:

9fa4a6ad5fe4588b06842b48a5433acd.png

顶行定义了数据位置位的三个最低有效位(LSB),而左列定义了数据位置位的三个最高有效位(MSB)(总共有64个位位置)。

eb1b962df336972bd1d11ad6be250aa9.png

为了推导出26位的奇偶校验P0,橙色单元格中的P0将定义相应的位位置是否用于P0奇偶校验:

7ccf7ee0b49f0cb7a858560666763e0f.png

同样地,为了推导出64位的奇偶校验P0,表12中的所有P0将定义要使用的相应位位置。要纠正单个数据位错误,综合症必须是表11中的一个综合症。这些综合症识别出错误的位位置。综合症的计算方式为:

dedf2bbc02f684f0a0dc2dda1d7f12be.png

表12以与表11中的矩阵相同的信息表示,但组织方式旨在更好地洞察如何从数据位形成奇偶校验位。表格中的橙色区域用于形成保护26位头部所需的ECC(错误校正码),而整个表格必须被用来保护64位头部。

不支持虚拟通道扩展(VCX)字段的先前CSI-2规范版本使用了一个30位的汉明修改码字,其中包含24位数据位和基于表12的前24位位位置的5+1位奇偶校验位[i.e., (30,24) ECC]。传输器将数据包头部的第24位和第25位设置为零,并且遵循此类规范的接收器会忽略这些位。

当接收具有(30,24) ECC的数据包头部时,符合此CSI-2规范版本的接收器应忽略这些数据包头部中第24位和第25位的内容。这样做的目的是让这些接收器忽略在这些位位置上发生的任何错误,以便与先前接收器的行为相匹配。(请参阅第9.5.4节以获取实施建议。)

b3084d13198328bc10dea7c3296d8df5.png 91d1bd51343929014f03840a31ffe6b1.png

ECC Generation On Tx Side:

这是一个信息性部分。ECC可以很容易地使用并行方法实现,如图62所示,用于64位头部。

3da7da2b249e6acdfe1eaeaf49f0970b.png 256017081d2fcb486f493e478ec4e6c2.png

奇偶校验生成器基于表12。

341a1fef42f37f9c1990451e2a4d3237.png

为了向后兼容性,符合此CSI-2规范版本的发射器在发送给符合先前CSI-2规范版本(包含(30,24) ECC)的接收器的任何数据包中,应始终将数据包头部的第24位和第25位(即VCX字段)设置为零。

Applying ECC on RX Side(informative):

在接收端应用错误校正码(ECC)涉及到为接收到的数据包头生成一个新的错误校正码,使用新的ECC和接收到的ECC计算综合症,对综合症进行解码以判断是否发生了单个错误,如果是,则进行纠正。图64描述了使用8个校验位对64个接收到的数据包头数据位进行ECC处理的过程。

9e4928b933764c46102cb69b86a70012.png

解码综合症有四种可能的结果:

● 1、如果综合症为0,则表示没有错误存在

● 2、如果综合症与表11中的矩阵条目之一匹配,则表示发生了单个比特错误,相应的比特位置可以通过反转它来纠正(例如,通过与'1'进行异或操作)

● 3、如果综合症只有一个位被设置(即只有一个位为1),那么在位于该综合症位位置的校验位上发生了单个比特错误,而接收到的数据包头的其他比特都是无误的

● 4、如果综合症不符合其他任何结果,那么发生了一个不可纠正的错误,并且应该设置一个错误标志(表明数据包头已损坏)

图65所示的26位实现使用较少的项来计算校验位,因此综合症解码模块比64位实现要简单得多。符合本CSI-2规范版本的接收器,如果从没有VCX字段的发射器接收数据包头,应在进行任何校验位生成或综合症解码之前,强制将接收到的数据包头中的第24位和第25位设置为零(这是图65中所示的“VCX覆盖”模块的功能)。这保证了接收器将正确忽略发生在第24位和第25位的任何错误,以匹配符合本规范以前版本的接收器的行为:

c42115dcf665de140755c66099efa8bd.png

Checksum Generation:

为了检测传输中可能出现的错误,对构成每个长数据包的数据包数据的WC字节计算校验和;对于C-PHY物理层选项,对构成每个数据包头的保留字段、虚拟通道扩展、数据标识符和字数字段的四个字节也进行类似的校验和计算。在所有情况下,校验和都是以生成多项式9bc19a1504864a8a88c8924601f978cf.png为基础的16位CRC实现的,并且是按照低级协议层向车道(Lane)分配器功能呈现的字节顺序计算的,如图52、图53和图57所示。

dd5840ed68eb5ac1ffce2af6b8fca1da.png

当对长数据包的数据包字计算时,16位校验和序列作为数据包尾部的一部分进行传输。当字数为零时,CRC应为0xFFFF。当对C-PHY物理层选项的数据包头的保留字段、虚拟通道扩展、数据标识符和字数字段进行计算时,16位校验和序列作为数据包头CRC(PH-CRC)字段的一部分进行传输。

729c43d604bbfc88c6d47f99612aa3ca.png

串行CRC实现的定义在图68中展示。CRC实现应与图69中展示的C代码在功能上等效。每个数据包开始时,CRC移位寄存器应初始化为0xFFFF。注意,对于C-PHY物理层选项,如果使用相同的电路来计算数据包头和数据包尾部的CRC,那么每个数据包的CRC移位寄存器应初始化两次,即一次在数据包开始时,然后在计算完数据包头CRC之后再次初始化。所有有效载荷数据通过CRC电路后,CRC电路就包含了校验和。图69中的C代码产生的16位校验和等于图68中显示的C[15:0]移位寄存器的最终内容。然后,CSI-2物理层将校验和传输给CSI-2接收器,以验证传输过程中是否发生了错误。

简单理解就是:CRC(循环冗余校验)的串行实现方法在图68中进行了说明,而且CRC的实现应该与图69中的C语言代码在功能上是一致的。在每个数据包传输之前,CRC的移位寄存器都会设置为初始值0xFFFF。对于C-PHY物理层选项,如果使用同一组硬件电路来计算数据包头和数据包尾部的CRC,那么在每个数据包传输过程中,CRC的移位寄存器需要被初始化两次:一次在数据包开始时,另一次在数据包头CRC计算完成后。当所有有效载荷数据通过CRC计算电路后,CRC电路就会生成校验和。由图69中的C语言代码产生的16位校验和与图68中C[15:0]移位寄存器的最终值相等。最后,这个校验和由CSI-2物理层传输给CSI-2接收器,接收器使用这个校验和来检验数据在传输过程中是否有错误发生。

539b8e64d91475cc5e4e6b4fead6944f.png 02e001cab5b9f5d7e1fa069dd8f0fe57.png

在进行CRC(循环冗余校验)计算时,输入数据数组的内容由两部分组成:一部分是WC个8位的数据字,它们是数据包中的数据部分,用于数据包数据的CRC计算;另一部分是数据包头中的四个字节,包括保留位和虚拟通道扩展(VCX)、数据标识符以及字数(WC)的低位字节和高位字节,这些用于数据包头的CRC计算。索引0表示数据数组的第一个位置。

45e2fb9bce957362f8f2b70bc51fcacb.png

Packet Spacing :

所有CSI-2实现都应支持在低级协议数据包之间进入和退出低功耗状态(LPS);然而,实现可以选择性地在数据包之间保持在高速状态,如第9.11节所述。图70展示了带有LPS的数据包间隔。图70中展示的数据包间隔不必是8位数据字的倍数,因为在下一个数据包的数据包头之前的SoT序列期间,接收器将重新同步到正确的字节边界。(白话理解:CSI-2(Camera Serial Interface 2)的所有实现都应能够支持在数据包传输的间隙进入低功耗状态,并能够在需要时退出该状态。此外,实现可以选择在数据包之间保持高速状态,这在文档的第9.11节有更详细的描述。图70中的数据包间隔可以不是8位数据字的整数倍,因为在接收到下一个数据包的开始传输(SoT,Start of Transmission)序列时,接收器会重新同步到正确的字节边界,确保数据的正确接收。)

ed96ded50134484c3e3b0f49791d3f83.png

Synchronization short packet data type codes:

应仅使用短数据包格式传输Short Packet数据类型。请参阅第9.1.2节了解1148格式的描述:

a5f01e55ae9ee97fb151691380ca086e.png

Frame Synchronization Packets :

每个图像帧都应以包含帧起始码的帧起始(FS)包开始。FS包后面应跟随一个或多个包含图像数据的长包,以及零个或多个包含同步码的短包。每个图像帧都应以包含帧结束码的帧结束(FE)包结束。有关同步码数据类型的描述,请参见表13:

83476b28661c9e4c71ab67163bc5099f.png

对于FS和FE同步包,短包数据字段应包含一个16位的帧号。这个帧号对于对应给定帧的FS和FE同步包来说应该是相同的。当使用16位帧号时,它不应为零,以区分帧号无效且保持设置为零的情况。16位帧号的行为应为以下之一:

● 1、帧号始终为零 - 帧号不生效。

● 2、对于具有相同虚拟通道的每个FS包,帧号应递增1或2,并且会定期重置为1;例如,1, 2, 1, 2, 1, 2, 1, 2 或者 1, 2, 3, 4, 1, 2, 3, 4 或者 1, 3, 5, 1, 3, 5 或者 1, 2, 4, 1, 3, 4。只有当图像帧因损坏而被屏蔽(即不传输)时,帧号才能递增2。为了适应这种情况,1或2的递增可以在帧号序列中根据需要自由混合。

Line Synchronization Packets :

行同步包在每个图像帧中是可选的。如果一个图像帧包括了行同步包,它应该在帧的每一行中都包括行起始(LS)同步包和行结束(LE)同步包。

对于LS(行起始)和LE(行结束)同步包,短包数据字段应包含一个16位的行号。这个行号对于对应给定行的LS和LE包来说应该是相同的。行号是逻辑行号,并不一定等于物理行号。要么:

● 1、行号始终为零 - 行号不生效。

要么:

在同一虚拟通道和相同数据类型中,每收到一个LS(行起始)包,行号就递增一。在FS(帧起始)包之后的首个LS包,行号会定期重置为一。预期的用途是用于逐行扫描(非隔行)视频数据流。行号必须是一个非零值。

或者:

在同一虚拟通道和相同数据类型中,每收到一个LS(行起始)包,行号就以大于一的相同任意步长值递增。在FS(帧起始)包之后的首个LS包,行号会定期重置为一个非零的任意起始值。连续帧之间的任意起始值可能会不同。预期的用途是用于隔行扫描视频数据流。

图71包含了在具有像素数据和额外嵌入类型的隔行帧中使用可选的LS/LE包的示例。该图说明了使用情况:

● 1、VC0 DT2 隔行帧,行计数以2递增。帧1从1开始,帧2从2开始

● 2、VC0 DT1 逐行扫描帧,带有行计数。

● 3、VC0 DT4 逐行扫描帧,行计数不生效

● 4、VC0 DT3 没有LS/LE操作。

35494954deec3335081cb8f1a9de60e4.png ead9ff72715839b3bdc297b544b283cf.png

Generic short packet data type codes:

69467fa81a400783913090b9df6b3b93.png

通用短包数据类型的目的在于提供一个机制,用于在数据流中包含快门开启/关闭、闪光灯触发等的定时信息。通用短包中16位用户定义数据字段的意图是将一个数据类型值和一个16位数据值从发射器传递到接收器的应用层。CSI-2接收器应将数据类型值及其相关的16位数据值传递给应用层.

Packet Spacing Examples Using the Low Power state :

本节讨论的数据包通过EoT(包结束)、LPS(低功耗状态)、SoT(包开始)序列进行分隔,如[MIPI01]中定义的D-PHY物理层选项和[MIPI02]中定义的C-PHY物理层选项。图72和图73分别包含了由多个数据包组成的数据帧和单个数据包的示例。请注意,本节图中的VVALID(垂直有效)、HVALID(水平有效)和DVALID(数据有效)信号仅是概念,用于帮助说明帧开始/结束和行开始/结束包的行为。VVALID、HVALID和DVALID信号不是规范的一部分:

8295a6fdf97955185564353f77c63777.png 096817d2ee3f768491094aad45440ad2.png 78bc3c9ff6ac8fb0fc2c283c3ced1724.png

一个长包的包尾(或者如果存在的话,填充字节)结束到下一个长包的包头之间的时间称为行消隐期。帧N中的帧结束包和帧N+1中的帧开始包之间的时间称为帧消隐期(见图74)。行消隐期不是固定的,其长度可能会变化。接收器应该能够处理根据[MIPI01]或[MIPI02]中定义的最小包间间隔定义的接近零的行消隐期。发射器定义了帧消隐期的最小时间。帧消隐期的持续时间应该是发射器中可编程的。应使用帧开始和帧结束包。

帧开始和结束包间距的建议(信息性的):

● 1、帧开始包到第一个数据包的间距应尽可能接近最小包间距

● 2、最后一个数据包到帧结束包的间距应尽可能接近最小包间距

目的是确保帧开始和帧结束包准确地表示图像数据帧的开始和结束。一个有效的例外是当帧开始和帧结束包的位置被用来传达像素级精确的垂直同步时间信息时。可以在帧消隐期内变化帧开始和帧结束包的位置,以便提供像素级精确的垂直同步时间信息。见图75。如果需要像素级精确的水平同步时间信息,应使用行开始和行结束包来实现它。如果存在行开始和行结束包,可以在行消隐期内变化它们的位置,以便提供像素精确的水平同步时间信息。见图76:

4fa47d5b1daa5bb2d9c3e6ae6b75cf2c.png 5c41f3e8cc001f99d7de750a220685bc.png

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

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

相关文章

日拱一卒(4)——leetcode学习记录:路径总和

一、任务: 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶…

Systools Outlook PST Recovery Outlook PST邮箱邮件数据修复工具下载

可正常激活使用,非常强大好用的PST邮箱邮件数据文件修复工具 下载地址(资源制作整理不易,下载使用需付费,不能接受请勿浪费时间下载) 链接:https://pan.baidu.com/s/1bfkVNrgdaVS2MkTnW19Zqw?pwdu2sj 提取码:u2sj

Java流程控制09:练习题:打印三角形

本节视频链接:https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 通过嵌套for循环可以实现打印三角形&#xff…

微信答题小程序产品研发-后端开发

在开发答题小程序的后端服务和数据库设计时,需要考虑API的设计、数据库模型的构建以及数据的安全性和一致性。 这里我采用了云开发,后端语言是Node,数据库是NoSql,然后我简单整理了各个功能模块的后端开发概要和数据库设计。 1. …

志愿服务管理系统--论文pf

TOC springboot360志愿服务管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广…

免费的抓包软件wireshark以及简单使用

官网下载链接 https://www.wireshark.org/download.html 安装成功后直接打开即可使用 点击‘wan’即可使用 抓包信息可以在底部菜单栏查看 过滤之查看‘tcp’类型的,自行输入过滤

【LiteX】【开发板】【BoChenK7】使用Python开发FPGA【Linux】

文章目录 开发板介绍下载仓库环境安装仿真测试上板测试添加targets 工程构建开启TFTP Server 工程测试Linux启动(netboot)HDMI测试SD Card网络测试TFTP测试Linux启动(sdcardboot)LiteX工具烧录BIOS烧录(好像有问题&…

使用 Hugging Face 和 Milvus 构建 RAG 系统

Milvus 是一个广受欢迎的开源向量数据库,为人工智能应用提供高性能和可扩展的向量相似性搜索。在本教程中,我们将向您展示如何使用 Hugging Face 和 Milvus 构建 RAG(检索增强生成)流程。 RAG 系统将检索系统与 LLM 相结合。该系统…

CSP-CCF 202206-1 归一化处理

目录 一、问题描述 二、解答 三、总结 一、问题描述 二、解答 代码&#xff1a; #include<iostream> #include<math.h> using namespace std; int main() {double n;//设置成double有利于后续的计算cin >> n;int a[1001] { 0 };int sum 0;for (int i …

嵌入式Linux应用程序开发-1Linux快速入门

1.1 嵌入式Linux基础 1.1.1 Linux发展概述 Linux是指一套免费使用和自由传播的类UNIX操作系统。 1.1.2 Linux作为嵌入式操作系统的优势 1&#xff09;低成本开发系统 2&#xff09;可应用于多种硬件平台 3&#xff09;可定制的内核 4&#xff09;性能优异 5&#xff09;良好…

Intel ACRN 安装WIN10 VM

上一篇帖子记录了ACRN运行rt linux&#xff0c;这篇帖子记录一下最近倒腾出来的WIN10。目前架构如下 ACRN可以把它理解为一个基于Linux类似软件的Type1 Hypervisor&#xff0c;基于Linux去做而不是baremetal是为了更方便去配置资源。 首先我们得有两台电脑&#xff0c;一台是开…

小米手机安装reex本地局域网环境使用webdav协议访问并观看alist挂载的网盘视频和音频记录

文章目录 说明第一步&#xff1a;下载reex第二步&#xff1a;安装reex问题解决&#xff1a;关闭小米应用安全验证 第三步&#xff1a;打开wifi&#xff0c;连接alist webdav服务 说明 这里提供一种小米手机安装reex并在本地局域网环境使用webdav协议访问并观看alist挂载的网盘…

K8S - Secret 的简介和使用

Secret 的定义 Kubernetes&#xff08;k8s&#xff09;中的 Secret 是一种用于存储敏感信息的 Kubernetes 资源对象&#xff0c;如密码、API 密钥、证书等。Secret 被设计为用于安全地存储和管理敏感数据&#xff0c;并且可以通过 Volume 或环境变量的方式将这些数据提供给 Po…

STM32软件I2C通信详解

目录 18.[江协]I2C通信详解 I2C通信介绍 软件I2C和硬件I2C的区别 I2C硬件电路规定 I2C软件设计&#xff08;时序基本单元&#xff09; 起始条件与终止条件 主机发送一个字节 的时序单元 主机接收一个字节 的时序单元 主机/从机 应答 基本单元 I2C完整时序&#xff08…

【Python单元测试】学习笔记1

文章目录 01-单元测试基础什么是单元测试常用的文件结构运行单元测试 02. 断言函数03. Test Fixtures什么是Test Fixtures模块级别的Fixtures类级别的Fixtures方法级别的Fixtures 04.Mock python单元测试学习笔记1&#xff1a;https://blog.csdn.net/qq_42761751/article/detai…

kali实用工具之NC

NC&#xff08;netcat&#xff09;被称为网络工具中的瑞士军刀&#xff0c;体积小巧&#xff0c;但功能强大。Nc主要功能是可以在两台设备上面相互交互&#xff0c;即侦听模式/传。 1、传输数据 在kali开启监听6666端口号&#xff1a; 在centos连接kali的6666端口号&#xff1a…

LeetCode --- 410周赛

题目列表 3248. 矩阵中的蛇 3249. 统计好节点的数目 3250. 单调数组对的数目 I 3251. 单调数组对的数目 II 一、矩阵中的蛇 只要按照题目要求模拟即可&#xff0c;代码如下 class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands…

Camera Link 与 NI PCIe-1433 的工作原理及应用

Camera Link 是一种专为工业和科学成像应用设计的串行通信协议标准。它的主要优势在于能够提供高带宽、高可靠性的图像数据传输&#xff0c;并且具备灵活的配置选项&#xff0c;适用于多种不同的摄像机类型。Camera Link 的标准使得它在需要高速度、高分辨率图像传输的应用中得…

Java流程控制08:continue、break、goto

本节内容视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p43&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p43&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 java中break和continue的作用和区别 在J…

通过kuboard界面配置ingress

安装 Ingress Controller&#xff0c;Kuboard 为您提供了一种快速安装 ingress-nginx 的方法&#xff0c;步骤如下所示。 1&#xff09;导航到集群的 集群管理 --> 网络 --> IngressClass 列表页&#xff0c;如下图所示&#xff1a; 2&#xff09;点击图中的 安装 Ingre…