一、MIPI简介
MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。MIPI官网https://mipi.org/
MIPI目前应用最广泛的还是基于DPHY的接口,有手机和平板的屏幕接口,即DSI接口。还有就是MIPI接口的摄像头,即CSI接口。如下图所示。
MIPI物理层 D-PHY支持两种传输模式。
High-speed (HS) 高速模式
数据传输通过差分信号;
低电压差分信号LVDS-200mv;
Low-power (LP) 低速模式
在camera和display应用中, 设备在blanking期间进入LP模式以降低功耗;
在display应用中, LP 模式用于屏幕配置;
LP模式独立驱动Lane0的两根互连线;
通道上有4中不同状态 (LP-00, LP-01, LP-10, LP-11)
LP模式电压为1.2V LVCMOS信号
LP数据包格式示例波形如下图,LSB先传输。DI可以分为4种,0x05,0x15,0x29,0x39。
其中0x05和0x15这两种DI之后紧跟2个字节数据,然后是1个字节的ECC值。
另外0x29和0x39这两种DI之后是2个字节的Word Count值(低字节先传),然后是1个字节的ECC值。再之后是Word Count个字节的数据,最后是两个字节的CRC值。
HS数据包格式如下图,分为short packet短包和long packet长包两种。
短包是1个字节的DI,然后是2个字节的数据,最后是1个字节的ECC值。
长包是1个字节的DI,然后是2个字节的Word Count值,然后是1个字节的ECC值。再之后是Word Count个字节的数据,最后是两个字节的checksum值,也就是CRC值。
例如常见的短包有VS start包 0x07000001,HS start包 0x21000012。
1. ECC计算方式
ECC值是3个字节的纠错码计算结果。ECC纠错码生成方法如下。
2. CRC计算方式
CRC计算多项式 polynomial: x^16 + x^12 + x^5 + 1,通常用如下的移位寄存器实现。实际的电路或实现代码通常会转换成并行实现方式。只是由于Data width数据位宽有8bit,16bit或32bit等区分,所以并行实现方式会不同。
二、ECC和CRC计算工具介绍
在MIPI传输的LP数据包中,例如用于MIPI屏初始化,会有大量的初始化数据需计算ECC和CRC值。在MIPI传输HS数据包中,一些短包的数据往往是固定的,但有时填充0的DI为0x19的包因为0的字节数会变动,所以也需要计算ECC和CRC值。
为了方便计算,用python写了个小工具,用于计算ECC和CRC值。不过工具软件在Windows10系统下能正常显示,在Windows7系统下可能会显示错位。其界面如下图。软件下载路径如下https://download.csdn.net/download/cjie221/90536177
1.ECC计算
软件界面上半部分可以计算的3个字节的ECC值。举例,要计算0x39,0x03,0x00三个字节的ECC值,与LP的波形图示例符合。
因为三个字节的ECC计算,经常第2和第3字节表示的是Word Count值,如果是计算Word Count个字节0的CRC值,这个界面也会一同计算显示。
2.N个字节0的CRC计算
如果只是单纯计算N个字节0的CRC值,软件界面的中间部分就可以完成计算。例如计算的3个字节0的CRC值。
3.N个字节数据的CRC计算
软件界面可以计算任意数据的CRC值。不过数据需先放在一个txt文档中,例如test.txt文件,需计算数据如下。
点击按钮打开txt文档,再点击计算按钮,会提示保存文件,保存的文件每行最后为这一行数据的CRC计算值。