关于的mipi 的规范,协议及物理接口定义,网上文章确实比较多,想必也是每个想要了解mipi的人首先会阅读的,本人也是其中之一,所以这篇短文主要是想记录自己在调试mipi这个接口时遇到的一些问题;
continue mode: 连续时钟模式,即无论data lane上是否有数据在传输,clock lane总是在HS状态,从不进入LP状态。
如图:
non-continue mode:非连续时钟模式, 即当data lane 进入LP状态时,clock lane也会进入LP状态,在下次data lane进入HS状态时 clock lane会先于 data lane进入提前进入HS状态。
如图:
那到底传输时采用那种模式呢?这取决于发送端,两种模式如何取舍呢?
建议非连续模式,笔者在调试中遇到过,连续模式时传输不稳定,采用非连续模式时就稳定了。
为何?
后面会提到。
何为skew, 从字面意思看是倾斜了,不对齐了;
放在mipi的传输中意思就是clock lane和data lane 及data lane与data lane间出现了相位差;
一旦出现相位差,大家采样数据时就可能不在同一个节拍上,会出现传输错误。
所以就要做deskew,通过做deskew来使得大家重新对齐,在同一个节奏下传输数据. 一般当data rate高于1.5G时建议开启deskew。是否开启deskew也是由发送端决定,拿某主流sensor举例:
它就会明确告诉你要不要开启deskew及 deskew时要用多少个UI
deskew的时机:一旦开启deskew, 在每次mipi的状态由LP-HS时都会先做一次deskew。
即每次开始真正的数据传输前都会做一次deskew:
在高data rate下,deskew确实必要的,笔者曾调试一款sensor的输出data rate是 2496Mbps, 不做deskew 时传输非常不稳定。
加了deskew后就稳定了。
deskew到底做多少个UI,也不是越大越好,合适的才是最好的,怎么是合适的,接收端的 mipi 控制器的的設計説了算。
global timing在某些情况下是有调整的余地的,毕竟硬件环境不一样,
这些时序不会是完全都匹配的。
所以在传出不稳定时,其他方向都调过没有效果时可试试调整global timing:
mipi csi dphy的规范里面有定义 这些的timing的最大值及最小值及推荐值。
同时, sensor中也会有相关描述用来调整这些timing的寄存器说明:
调试三板斧到此结束,后续再补充