关于MIPI协议(二)——利用Cypress的工具实例分析MIPI收发器时钟参数配置方法

来源:互联网 发布:饿了么算法工程师 编辑:程序博客网 时间:2024/06/03 22:52

关于MIPI协议(二)——利用Cypress的工具实例分析MIPI收发器时钟参数配置方法

接下来小编打算以一种载荷格式传输为实例,详细探讨一下行场有效时间和总时间的估算方法,以便进一步探讨一些MIPI传输方案在接收器上的时钟参数选取方法,因此,下面先贴上上述各操作时间参数的典型值表(UI即MIPI的CLK lane的高速时钟High-Speed clock cycles周期的一半,为什么,因为MIPI是采用DDR时钟)。
 

MIPI协议层文档总结得就比较简单和清晰了,一个类I2C的控制接口,Low Level下的长短包格式内容也较少,就请读者自行去阅读了,小编我这里打算以RAW12载荷来进行讲解,分辨率为640*960.这里小编我使用Cypress的Cx3配置工具来辅助讲解,有如下的设定:
先贴上IDE【FX3_SDK_Windows_v1.3.3.exe】下载链接http://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit
然后我们打开CX3配置工具。
 
小编我在sensor输出页随便设置了一种输出格式如下:
 
接下来Cypress自动为我们推荐了一种接收器配置如下:
 
自动归自动,小编我这里就来探讨一下怎么算的,既然要计算高速数据传输时间,时序图肯定是要拿过来的,贴在下面,然后我们开始从左至右按时间轴分析时序图。
 
Tterm-en  最小时间忽略,最大时间35ns+4*UI=35+4*3.846/2 = 42.692ns.

Tlpx 最小时间50ns;

Ths-prepare 最小时间40ns+4*UI,最大85ns+6*UI,由于我们CSI高速时钟为260Mhz,因此周期为1/260 = 3.846ns,但是请注意MIPI采用的DDR时钟,所以数据是上升下降双边触发的,因此实际数据传输速率是满足half-rate的关系,所以我们根据以上表格,算出最小、最大时间分别为40+4*3.846/2=47.692ns,85+6*3.846/2 = 96.538ns,与CX3配置工具左边估算的时间相符,而这里小编我随意设置了一个时间为70ns。

Ths-zero 查表中定义了Ths-prepare+Ths-zero总的最小时间为145ns+10*UI,即145+10*3.846/2 = 164.23ns,由于上面小编我随便设置了一个Ths-prepare时间为70ns,所以这里Ths-zero最小时间为164.23-70= 94.23ns,但这与CX3工具算出来的不符,这里一开始不清楚Cypress工程师咋回事,他们的公式似乎是145+4*3.846/2-70=82.692ns,小编我开始不清楚为什么他们这里舍弃了6个UI的时间,后来联系东芝工程师,得到的回复是以上是MIPI的Tx端的要求,而在接收器这一方,需要稍稍比Tx端短些,以便提前做好准备接收同步码,因此用的是4倍UI,还是有些道理的。为了满足要求,小编我这里随手设置了一个100ns。

Ths-trail 查表为max(n*8*UI,60+n*4*UI),由于是前向通道,根据表格下方小字内容,这里n取1,所以,max(8*3.846/2,60+4*3.846/2) = 67.692ns

OK,有了以上这些信息,我们可以来估算行场有效时间和总时间了,如下:
H-active =  H-Active*UI*位数/lane数 = 640 * 3.846/2 *12 / 2 = 7.38432us 
H-total = V-total / (V-Active+ V-Blanking) = 33.33 / (960+30) * 1000 = 33.67us
V-active = V-total-V-Blanking*H-total = 33.33 - 30*33.67/1000 = 32.32ms
V-total = 1/帧率 = 1 / 30 *1000 = 33.33ms

然后左边还有一个最小CSI时钟,小编我这里估摸着这个公式应该如下,但是具体Cypress为什么这么算,有待高人指点一二:
CSImin = H-Active * (V-Active+ V-Blanking) *位数 *帧率 /lane数/DDR时钟系数2 = 640*(960+30)*12*30/2/2/1000/1000 = 57.024Mhz.
最后,小编这里贴一下官方对于MIPI的DDR时钟的解释,读者可以自己看看。
 
 
接下来说点题外话,啥,说说右边咋算,不过这跟MIPI本身的协议就没有什么关系了,至多只能为配置MIPI接收器,提供一点思路。
REFCLK是CX3的外部晶振时钟,这里接的外部晶振是19.2Mhz。
首先我们需要理解的是我们这里配置出来的接收器H-Active值需要比左边的略大,因为要包裹住发送器的有效时间,但是为了保证速度,又不应当大太多。

然后小编我这里结合CX3的说明文档以及上面的一些CX3配置工具自动生成的数据有如下一些计算结果,具体怎么来的,读者可以自行查阅Cypress的CX3技术参考手册:
PLL_CLK = REFCLK * 上表中倍频系数(Multiplier of Unit Clk)/ 预分频系数(Pre Divider Value)/ 指数级分频系数(PLL OutRange对应枚举值);
PLL_CLK = 19.2Mhz * 90 / 3 / 2 = 288Mhz
其中Multiplier of Unit Clk对应于(PLL_FBD-1),Pre Divider Value对应于(PLL_PRD-1),PLL OutRange对应于PLL_FRS的枚举值。
而右下方的H-Active则是通过MIPI转并口以后,通过并口传输时间来换算的,即:
H-active = 1 / 并口传输像素时钟(Output Pixel Clock)* H-Active = 1/72*640= 8.89us
并口时钟则是对应于PLL_CLK/并口分频系数(Output Parallel Clock Divider)=288/4=72Mhz



 
 
 
原创粉丝点击