MIPI CSI-2笔记(7) -- Low Level Protocol(C-PHY物理层校验和生成,包间隔)

校验和生成

        当使用C-PHY/D-PHY时,为了检测传输过程中可能发生的错误,每个组成长包的Packet Data的WC个字节会对应计算出一个校验和;组成每个包头的Reserved、VCX、DI和WC字段,总共四字节,也有类似的校验和被计算出来用于错误校验。所有情况中,校验和的实现都是16-bit CRC,生成多项式是x^{16} + x^{12} + x^5 + x^0,参与计算的所有字节的顺序,按照字节被LLP层呈现到Lane Distributor的顺序来进行的。

        下图展示了校验和的字节流发送给Lane Distributor的顺序。

         当计算长包的Packet Data数据字的校验和时,16-bit的校验和序列作为包尾PF(Packet Footer)的一部分发送。如果WC(Word Count)为0, CRC应该为0xFFFF。当计算C-PHY物理层的包头的Reserved,VCX(Virtual Channel Extension),DI(Data Ideitifier)以及WC(Word Count)的校验和时,16-bit的校验和序列作为包头CRC(PH-CRC)字段的一部分发送。

长包载荷数据(Payload Data)的校验和

         下面两幅图,分别展示了串行CRC实现方案示意以及对应的C语言代码。

 16-bit CRC移位寄存器定义

 16-bit CRC软件实现例子(C语言)

        CRC移位寄存器在每个包开始处理的时候,初始化为0xFFFF。需要注意的是,对于C-PHY物理层来说,如果相同的电路要同时用于包头和包尾的CRC计算,那么CRC移位寄存器对于每个包来说要初始化两次,即,一次在包开始的时候,另一次是在计算包头CRC的时候。在所有数据载荷都过了CRC电路之后,CRC电路会包含校验和。例子中C语言中返回的16-bit crc变量的值和CRC电路中的移位寄存器的[15:0]值是一样的。校验和通过CSI-2物理层发送给CSI-2接收器,用来验证传输过程中是否有错误。

        C语言例子函数的输入数据data_p数组,下表从0开始,对于数据载荷,length由WC指定,data是payload data;对于包头CRC计算,length为4个字节,data是:[Reserved, VCX], Data Identifier,WC(LS byte)和WC(MS byte)字段。

 CRC计算的例子

包间隔(Packet Spacing)

        所有的CSI-2实现方案,要支持在LLP包之间进入和退出LPS(Low Power State)状态。但是也有可选的实现方案会在包之间保持高速状态HS。下图展示了使用LPS的包间隔。

         图中所展示的包间隔不需要是8-bit数据字的整数倍,因为接收器会在下一个包的包头之前的SoT序列处理中重新同步并修正对齐字节边界。

猜你喜欢

转载自blog.csdn.net/vivo01/article/details/126483440#comments_30497335
今日推荐