0.DPHY可以传输DSI和CSI信号
在CSI-2 V1.2及以前都只能用DPHY传输csi数据。
1.DPHY的输出差分clk是双沿有效
所以DDRCLKHs_I/Q 频率是ByteCLKHS的4倍。ByteclkHs频率是bitrate的1/8.【这里的bitRate是单条active lane上的bitRate,多条activeLane的bitRate相等】但是这些频率和pixclk的关系是不确定的,因为burst传输下,保证所有差分线上bitrate之和大于pixclk domian的bitrate就行。
ByteClkHS保证了进入每条lane上的TxDataHS[7:0]都是一拍8bit连续的,ByteclkHs和lane num没有直接的关系,但lane越多,ByteClkHs的最小值就越小。
ByteclkHS另外的一个错误理解是,对pix stream处理成Byte stream,然后这一路Byte stream的clk,这实际是错误的,在controller中从pixclk到ByteclkHs转换的过程中,不会把pix stream转为一路byte stream【除非就支持一条lane】。如果系统最多支持4条dataLane,这个转换接口输出一拍32bit,如果实际配置只支持2dataLane,可以降低byteClkHs或者让PPI接口通过TxReadyHS给controller反压。
ByteClkHS只有在non-burst传输的时候才需要根据lane Num和pixclk及VC准确计算。
对ByteClkHs的理解同样适用与csi-CPHY的wordclk和symbolclk
2.LP和Escape这些低功耗传输是单端的
差分是两根线上电压在均值上下对称摆动,任意时刻两根线上电压都是相对均值电压对称的,设均值电压为V,则两根线上电压是V+Vswing/2和V-Vswing/2.
单端就是线上电压只和地线做参考,线与线之间的电压没有关系。LP和Escape 低功耗模式下,Dp和Dn各自以0和1.2V电压传输数据。
LP state但也不是Escape mode的情况下【即Control Mode】,主要是传输一些LP的状态或序列来控制PHY是在stop状态还是进入其他状态。比如说data-lane通过LP-11,LP-10,LP-00,LP-01,LP-00序列进入Escape mode。这种情况下clk lane是没有是时钟的。每一个LP 状态都会有一定的持续时间,所以rx端在一定时间内检测到LP电平变化就行,不需要clk。
clk lane处于Esc的LP-00 space状态还是Control Mode的stop state LP-11?
这个要根据protocol对clk lane的配置,如果只是进入LP而不进入ULPS,则clklane为LP-11.要求进入ULPS就是LP_00
Escape mode 所有传输都是用spaced-ont-hot(间隔独热码)编码,是不需要时钟的异步传输,只是需要用Dp ^ Dn来获得EscClk时钟。
3.LP-Contention Detection (竞争检测)
如果两个PHY都是双向时,为了防止两端的PHY同时驱动总线而发生冲突,协议要求PHY必须支持contention detection模块,简称CD模块
CD检测只在LP且非ulps时使用。HS不用是因为都是从LP进入HS的。
4.双向data-lane,可以选择只支持双向HS或Escape
很多情况下,为了成本考虑,没必要支持反向的HS传输,也没有太多这样的场景。此时就只支持反向的Esc
5.传输数据和命令只能在HS和Esc的LPDT
6.正向Esc必须支持ULPS和Triggers
7.ULPS是什么样的状态
首先ULPS是控制TX/RX的PHY及protocol的clk和power状态吗?此时差分线是不是可以下电?
ULPS状态且ulpsActiveNot=0时,TX protocl layer可以关闭TxClkEsc【注意和clkLane状态不是一回事】。对应Rx那边也不能从dataLane异或出RxClkEsc,且要上报protocol,当前是ULPS。dataLane处在LP-00状态。
至于下电 目前并没有看到 这么做。是ULPS的范围太小了,而且还要快速被Wakeup,所以没有用来控制下电?
8.clk lane只支持Escape的ULPS
由于clk lane不传输数据和命令,所以要么在HS下传时钟,要么在Esc的ULPS状态下LP-00或者contorl mode下stop 状态LP-11。clk lane的进入Escape程序不像dataLane需要LP-11,LP-10,LP-00,LP-01,LP-00,而是直接LP-11,LP-10,LP-00。
只有HS传输才需要clk,所以当所有的dataLane都不在HS传输后,可以关闭clklane
9.DPHY可以直接传输8bit原始数据也可以用8b/9b编码
10.HS的反向速率只有正向速率的1/4,反向的接收端需要调整选择合适的clk相位
因为反向传输,只是datalane的方向发生了变化,clklane没变,所以反向后的Tx【slave侧】用的是反向后的Rx【master】那边输出的ddr clk。数据经过line delay和在master,slave的内部delay。达到master侧采样点时,有一个固定的未知的delay。所以在master接收侧需要首先利用slave在SOT发送的sync sequence进行synchronization。
简单的做法在master接收端用4个相位采样反向数据,哪个相位能正确采样到syncWord "0x1D",就用这个相位采样数据。有这4个相位,基本就可以正确采样,而不需要PLL和DLL来产生更多的相位。
11.DPHY 三个operating Mode :control、HS、Escape
如果dataLine不在HS和Escape mode,那就一定在control mode。control mode的stop state LP-11可以作为clk lane/data lane的待机state。
12.DPHY最小传输单元是Byte,数据量是byte整数倍
DPHY没有规定最大的burst传输长度,但是PHY没有有效的错误恢复处理,实际误码率不会是0,所以需要合理的选择最大burst Length;而对于短burst,header和trailer的时间可能比payload还长。
另外一点burstLength还影响了protocol layer【dsi controller】里面的dataBuf有关,所以不能设置过大的burstLen
13.多dataLane传输时,它们可以独立的开始和结束
多个dataLane可以传输不同数据量,也可以在不同时间开始和结束。但一般情况下所有dataLane都是同时开始的,结束时间不一样。
14.Remote Triggers
是TX protocol层通过Escape mode发送到对端protocol layer的一个flag,不会影响PHY的行为。Reset-Trigger就是协议已经定义的Triggers。目前还没看到除此之外的其他协议定义的Triggers。
15.DPHY的初始化
上电之后,master PHY会被系统或PPI接口初始化,此时需要master PHY驱动LP-11 stop state超过Tinit时间。需要注意的是第一个持续超过Tinit的stop state 才是初始化period。
slave PHY是在上电后第一个超过Tinit的stop state,才被认为完成初始化。在没有检测到第一个超过Tinit的stop state之前,所有的line state都会被忽略。多lane配置,要同时初始化。
slave只在上电之后初始化,并在检测到LP-11持续超过Tinit时间后认为初始化完成。并不是说在PHY 上电初始化完成之后,不能在LP-11停留超过Tinit时间。正常运行状态下,很容易出现在LP-11这种standBy状态停留超过Tinit时长【比如Burst间隙,行消隐区】,但此时slave是不会重新进入初始化的。如果在上电初始化之后PHY出了问题,可以走复位流程,复位流程解决不了问题,就需要下电再走上电初始化。
16.Calibration
- 只有超过1.5Gbps的 transmitter在初始化时必须通过Calibration deskew。
- 周期性deskew是可选的
- 小于等于1.5Gbps的传输,deskew是可选的
- 当从其他状态转到HS rate > 1.5Gbps, deskew也是可选的
- deskew调整的是clklane与datalane之间的skew
TX先发16'hFFFF作为sync pattern;
接着在发至少2^15个0101用来initial deskew calibration
周期性校准只需要发至少2^10 个0101
校准之后再发送HS的同步序列:‘00011101’ 【0x1D】
说明:dataLane发送校准序列'0101',就是和clkLane是同频的时钟,在Rx端用DLL就可以完成dataLane和clkLane之间的相位校准。
17.clklane扩频
dphy clklane可以进行频率扩频调制用以降低EMI。clk lane的ddr变化沿在发送端是和数据中间对齐的,而不是和数据变化对齐
18.Escape进入流程
LP11->LP10->LP00-LP01->LP00
其内的LPDT/ULPS/Triggers子状态还有专门的entry command
19.SOT/EOT/BTA/syncWord
SOT: start of transmission
HS的同步序列就是在SOT阶段发送的,而且只在SOT过程发送,中间可以有初始化校准的过程。但周期校准后面不会跟syncWord【虽然DPHY的spec High-Speed Data Transmission这一节提到前导码和拖尾码都可以做sync,但实际上DPHY的拖尾码是固定的HS-1或HS-0,没有翻转做不了sync,CPHY的拖尾码Post1经过确认也不用于sync】
相比CPHY的SOT少了一个在SYncWord之前发送 data normal preamble的步骤。猜测CPHY的前导码是为了RX先恢复出稳定的clk
EOT: end of transmission
BTA: Bus turn-around
以上每一个过程都有专用处理流程,可以参见
Specification for D-PHY Version 1.2.pdf |
20.DPHY 3.0的ALP和FBTA
DPHY 3.0新增了特性:
- ALP (alternative low power) 备用低功耗
- FBTA (Fast Bus trun-around) 快速Bus反向
都是可以让PHY在HS mode下进入低功耗和BTA的操作,具体参考:
CSI及CPHY的学习知识点_cy413026的博客-优快云博客
21.DPHY最少1clk+1datalane,最大无限制
协议只规定了最小lane,没有规定最大lane数,可以多于4data lane
500.DPHY HS长包数据(long packet)格式
数据长包允许payloadSize=0,此时checkSum为0xFFFF,checkSum是对payload进行计算的。
501.DSI多lane传输 分配和合并
TODO
502.DSI支持virtual channel
dsi v1.1支持最多4个virtual channel。有可能在更高版本支持更多的虚拟通道。比如csiv3.0的DPHY就支持16个virtual channel,是因为ECC由8bit变为了6bit,多的两bit用于VC