MIPI CSI-2笔记(4) -- Low Level Protocol(概览、包格式)

概览

        LLP(Low Level Protocol),底层协议层是一个字节为单位,基于包的协议。LLP支持使用短包和长包格式的任意数据的传输。为了方便阐述,和LLP相关的所有笔记,除非特别说明,都使用1条Lane的配置。

        LLP的基础特性有:

  •         可传输任意数据(不关注Payload内容)
  •         8-bit字大小
  •         相同的D-PHY连接上,支持最大16个交织的虚拟通道(VC, virtual channel)
  •         相同的C-PHY连接上,支持最大32个交织的虚拟通道
  •         用于帧开始、帧结束、行开始、行结束信息的特殊包
  •         用于应用程序特定Payload数据的类型、像素深度以及像素格式等信息的描述符
  •         16-bit 校验和用于错误检测
  •         6-bit ECC用于错误检测和修复(仅针对D-PHY物理层)

LLP包格式

        LLP定义了两种包格式:长包(Long Packet)和短包(Short Packet)。长包和短包的格式和长度和物理层的选择有关系。 对于每种包结构来说,退出低功耗状态(LPS)紧跟着一个SoT(Start of Transmission)序列就意味着包传输开始。EoT(End of Transmission)序列紧跟着一个低功耗状态(LPS)表示包传输结束。

LLP长包格式(Long Packet)

D-PHY物理层长包格式

         D-PHY的长包的Data Type字段从0x10 - 0x38,具体值对应什么类型在后续笔记中会给出,本笔记暂时给出一个大概的说明。D-PHY的长包有三大部分:1个32-bit的包头(PH,Packet Header),应用相关数据Payload(Packet Data, 可变长的8-bit单位的数据字),以及一个16-bit的包尾(PF,Packet Footer)。

        包头又分为4个字段:1个8-bit数据标识符DI(Data Identifier),1个16-bit字计数字段WC(Word Count),1个2-bit虚拟通道扩展字段VCX(Virtual Channel Extension),以及1个6-bit ECC。包尾有1个元素,16-bit的CRC校验和。

C-PHY物理层长包格式

         C-PHY长包包含四个部分:包头PH,应用相关数据Payload(Packet Data, 可变长的8-bit单位的数据字),1个16-bit 包尾PF,以及0个或多个Filler字节(FILLER,用于填充数据对齐)。

        包头PH长度为6N * 16 bits,其中N代表C-PHY物理层Lane的数量。PH包含两个6N-byte的部分,每一个6N-byte包含了如图所示的每个域段顺序排列N个copy组成的数据:由保留位RES(5-bit)、虚拟通道扩展字段VCX(3-bit)以及1个8-bit DI组成的16-bit字段,1个16-bit包数据字计数WC,1个16-bit的包头CRC校验和(计算前4字节得出)。保留的bit的值为0.

        包尾PF包含1个16-bit的CRC校验和,这个校验和通过计算Packet Data得出,和D-PHY中计算CRC的多项式是一样的。如果需要填充对齐,则包Filler部分的字节会被插入进来保证PF会对齐到16-bit字边界,并且每个C-PHY物理层Lane都能传输到相同数量的字节对儿(16-bit字)。

        当LLP层封装好包数据后,Lane Distributor会广播相同的6个16-bit字到N条Lane中的每一条。每条Lane的这6个字,进一步被划分为相同的两组,每组3个字。这两组之间会被一个C-PHY同步字(Sync Word)所隔开。同步字由C-PHY物理层所插入,用于响应CSI-2协议发送器PPI命令。下图是Lane Distributor对包头的处理:

长包小结

        无论是哪种物理层,8-bit的数据标识符DI字段都定义了2-bit的虚拟通道VC,以及应用特定载荷数据的数据类型DT。虚拟通道扩展字段VCX在两种物理层中也都存在,只是D-PHY中为2-bit,C-PHY中为3-bit。VC和VCX一起组成了4-bit或5-bit的虚拟通道标识符字段VCI,VCI会决定包所关联的虚拟通道号。

        无论是哪种物理层,16-bit的字计数字段WC定义了数据载荷的8-bit字(字节)的数量  ,这个数量是包头PH结束之后到包尾PF开始之前的字节数。包头PH,包尾PF或者包Filler填充字节数都不计入WC。

        对于D-PHY物理层来说,6-bit的纠错码ECC允许包头中的单bit错误被修正,2-bit错误被检测。包含了DI,WC和VCX字段的错误检测和修正。

        C-PHY物理层没有ECC字段,因为在C-PHY物理层链路上如果发生了一个单符号错误会导致接收到的包头PH里有多bit错误出现,因此ECC就基本没啥用了。作为替代,CSI-2协议发送器对于C-PHY来说,对包头的前四个字节(保留字段,VCX,DI,WC)计算了一个16-bit的CRC,然后对所有字段,包括CRC,做了多份拷贝,以此来让CSI-2协议接收器能够在碰到一个或多个C-PHY物理链路错误的时候有恢复能力。多个同步字被C-PHY物理层插入到了包头中,也能让C-PHY接收器能够在丢失符号时钟的情况下恢复,以此实现包头数据恢复。

        无论是哪种物理层,CSI-2接收器会读取根据WC的值,读取紧跟着包头的数据载荷中字节,读取多少个8-bit字(字节)就在WC中指定。当读取数据载荷的时候,接收器不会去查找任何嵌入的同步码。因此,对于8-bit为单位的载荷数据,没有什么限制条件。一般情况下数据载荷的长度都是8-bit数据字的整数倍。在某些场景中,数据类型字段DT可能会对数据载荷的长度做限制,比如要求是4字节整数倍。

        无论是哪种物理层,CSI-2接收器读取完数据载荷后,就会读取包尾中的16-bit CRC校验和。并且和它自己计算的校验和进行比较来确定数据载荷是否发生了错误。

        Filler填充字节只会在C-PHY物理层的CSI-2发送器的LLP层中被插入。插入的Filler字节的值为全0。如果包数据WC是奇数(即LSB为1),则CSI-2发送器要在包尾之后插入一个Packet Filler字节,来保证包尾结束在16-bit字边界上。在有需要时,CSI-2发送器也要插入额外的Filler字节,以此来保证C-PHY Lane传输相同数量的16-bit字。对于Filler字节的总数量,我们用FC表示,FC需要满足:FC >= (WC mod 2) + {{N - (([WC + 2 + (WC mod 2)] / 2) mod N)} mod N} * 2, N表示Lane的数量。FC可以是0。这个式子看起来复杂,实际可以拆分开来理解,WC mod 2看成一个变量A,表示数据载荷多出的字节数,只可能是0或1。式子改造后:

        FC >= A + {{N - (([WC + 2 + A] / 2) mod N)} mod N} * 2

        第一个A,是为了保证包尾对齐。

        后面的(WC + 2 + A )/ 2其实就是一个向上对齐的计算公式,得到的值就是向上对齐后实际载荷的字节数,这个数记为B,则B mod N就是多出的字节数, N - B就是要补多少字节数。因此中间这个{{N - (([WC + 2 + (WC mod 2)] / 2) mod N)}其实就是为了计算需要补多少字节数。后面乘以2是因为C-PHY传输时以字节对儿(16-bit)为单位。

        下面是一个在三条C-PHY Lane上传输包的时候,Lane分发器所需要的最小Filler字节数的例子:

         对不同WC的包,需要填充的Filler字节数范围是0-5。一般来说,对于一个N-Lane的C-PHY系统,Filler字节数的范围是0 - 2N - 1。

        对D-PHY物理层来说,CSI-2 LDF(Lane Distributor Function)会传递每一个字节到物理层,物理层随后串行地发送这些字节,最先发least significant bit。

        对C-PHY物理层来说,LDF会将从LLP收到的字节数据,打包成连续的字节对儿,一组字节对儿对应原始LLP数据包的2n和2n + 1(n>= 0)字节(least significant byte是2n),随后数据送到物理层Lane模块。C-PHY Lane模块会将每个16-bit字映射为一个7-symbol的字,这个字随后串行地发送出去,最先传输least significant bit。

        无论是哪种物理层,载荷数据本身的字节序LDF并不关注,只和数据载荷本身有关。多字节协议元素,比如WC、校验和以及短包16-bit数据字段等要按照least significant byte优先的顺序发给LDF。

        在EoT序列之后,接收器开始等待下一个SoT序列。

LLP短包格式(Short Packet)

D-PHY物理层短包结构

C-PHY物理层短包结构

        短包的结构基本和LLP长包结构中的包头PH结构相对应,区别在于WC字段替换为了Short Packet Data字段。短包的Data Type值范围是0x00到0x0F。后面笔记会有专门的分析。短包只包含包头,没有包尾,也没有Filler字节(C-PHY)。

        帧同步(Frame Synchronization)Data Type,短包的数据字段是帧编号。行同步(Line Synchronizaiton)Data Type,短包的数据字段是行编号。

        通用(Genric)短包 Data Type,短包数据字段是用户自定义的。

        对D-PHY物理层来说,错误校验于校正ECC字段能够修正短包的单bit错误,检测2-bit错误。对C-PHY物理层来说,通过16-bit CRC校验和检查短包中的1个或多个bit错误,没有错误纠正。错误纠正是通过发送短包内不同字段的多份拷贝,以及C-PHY在所有Lane上插入的同步字实现。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦枫Leonlew

希望这篇文章能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值