1、一、MIPIMIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准。已经完成和正在计划中的规范如下:二、MIPI联盟的MIPI DSI规范1、名词解释 DCS (DisplayCommandSet):DCS是一个标准化的命令集,用于命令模式的显示模组。 DSI, CSI (DisplaySerialInterface, CameraSerialInterface DSI 定义了一个位于处理器和显示模组之间的高速串行接口。 CSI 定义了一个位于处理器和摄像模组
2、之间的高速串行接口。 D-PHY:提供DSI和CSI的物理层定义2、DSI分层结构DSI分四层,对应D-PHY、DSI、DCS规范、分层结构图如下: PHY 定义了传输媒介,输入/输出电路和和时钟和信号机制。 Lane Management层:发送和收集数据流到每条lane。 Low Level Protocol层:定义了如何组帧和解析以及错误检测等。 Application层:描述高层编码和解析数据流。3、Command和Video模式 DSI兼容的外设支持Command或Video操作模式,用哪个模式由外设的构架决定 Command模式是指采用发送命令和数据到具有显示缓存的控制器。主机通过
3、命令间接的控制外设。Command模式采用双向接口 Video模式是指从主机传输到外设采用时实象素流。这种模式只能以高速传输。为减少复杂性和节约成本,只采用Video模式的系统可能只有一个单向数据路径三、D-PHY介绍1、 D-PHY 描述了一同步、高速、低功耗、低代价的PHY。 一个 PHY配置包括 一个时钟lane 一个或多个数据lane 两个Lane的 PHY配置如下图 三个主要的lane的类型 单向时钟Lane 单向数据Lane 双向数据Lane D-PHY的传输模式 低功耗(Low-Power)信号模式(用于控制):10MHz (max) 高速(High-Speed)信号模式(用于高
4、速数据传输):80Mbps 1Gbps/Lane D-PHY低层协议规定最小数据单位是一个字节 发送数据时必须低位在前,高位在后. D-PHY适用于移动应用 DSI:显示串行接口 一个时钟lane,一个或多个数据lane CSI:摄像串行接口2、Lane模块 PHY由D-PHY(Lane模块)组成 D-PHY可能包含: 低功耗发送器(LP-TX) 低功耗接收器(LP-RX) 高速发送器(HS-TX) 高速接收器(HS-RX) 低功耗竞争检测器(LP-CD) 三个主要lane类型 单向时钟Lane Master:HS-TX, LP-TX Slave:HS-RX, LP-RX 单向数据Lane M
5、aster:HS-TX, LP-TX Slave:HS-RX, LP-RX 双向数据Lane Master, Slave:HS-TX, LP-TX, HS-RX, LP-RX, LP-CD3、Lane状态和电压 Lane状态 LP-00, LP-01, LP-10, LP-11 (单端) HS-0, HS-1 (差分) Lane电压(典型) LP:0-1.2V HS:100-300mV (200mV)4、操作模式 数据Lane的三种操作模式 Escape mode, High-Speed(Burst) mode, Control mode从控制模式的停止状态开始的可能事件有: Escape m
6、ode request (LP-11LP-10LP-00LP-01LP-00) High-Speed mode request (LP-11LP-01LP-00) Turnaround request (LP-11LP-10LP-00LP-10LP-00) Escape mode是数据Lane在LP状态下的一种特殊操作 在这种模式下,可以进入一些额外的功能:LPDT, ULPS, Trigger数据Lane进入Escape mode模式通过LP-11LP-10LP-00LP-01LP-00一旦进入Escape mode模式,发送端必须发送1个8-bit的命令来响应请求的动作 Escape mo
7、de 使用Spaced-One-Hot Encoding超低功耗状态(Ultra-Low Power State)这个状态下,lines处于空状态 (LP-00) 时钟Lane的超低功耗状态时钟Lane通过LP-11LP-10LP-00进入ULPS状态通过LP-10 TWAKEUP LP-11退出这种状态,最小TWAKEUP时间为1ms 高速数据传输发送高速串行数据的行为称为高速数据传输或触发(burst)全部Lanes门同步开始,结束的时间可能不同。时钟应该处于高速模式 各模操作式下的传输过程进入Escape模式的过程 :LP-11LP-10LP-00LP-01LP-00Entry Code
8、 LPD (10MHz)退出Escape模式的过程:LP-10LP-11进入高速模式的过程:LP-11LP-01LP-00SoT(00011101) HSD (80Mbps 1Gbps)退出高速模式的过程:EoTLP-11控制模式 - BTA 传输过程:LP-11LP-10LP-00LP-10LP-00控制模式 - BTA 接收过程:LP-00LP-10LP-11 状态转换关系图四、DSI介绍1、DSI是一种Lane可扩展的接口,1个时钟Lane/1-4个数据Lane DSI兼容的外设支持1个或2个基本的操作模式: Command Mode(类似于MPU接口) Video Mode(类似于RG
9、B接口)- 必须用高速模式传输数据,支持3种格式的数据传输 Non-Burst 同步脉冲模式 Non-Burst 同步事件模式 Burst模式 传输模式: 高速信号模式(High-Speed signaling mode) 低功耗信号模式(Low-Power signaling mode) - 只使用数据lane 0(时钟是由DP,DN异或而来)。 帧类型 短帧:4 bytes (固定) 长帧:665541 bytes (可变) 两个数据Lane高速传输示2、短帧结构 帧头部(4个字节) 数据标识(DI) 1个字节 帧数据- 2个字节 (长度固定为2个字节) 错误检测(ECC) 1个字节 帧大
10、小 长度固定为4个字节3、长帧结构 帧头部(4个字节) 数据标识(DI) 1个字节 数据计数- 2个字节 (数据填充的个数) 错误检测(ECC) 1个字节数据填充(065535 字节) 长度=WC*字节 帧尾:校验和(2个字节) 帧大小: 4 + (065535) + 2 = 6 65541 字节4、帧数据类型五、MIPI DSI信号测量实例1、MIPI DSI在Low Power模式下的信号测量图2、MIPI的D-PHY和DSI的传输方式和操作模式 D-PHY和DSI的传输模式 低功耗(Low-Power)信号模式(用于控制):10MHz (max) 高速(High-Speed)信号模式(用
11、于高速数据传输):80Mbps 1Gbps/Lane D-PHY的操作模式 Escape mode, High-Speed(Burst) mode, Control mode DSI的操作模式 Command Mode(类似于MPU接口) Video Mode(类似于RGB接口)- 必须用高速模式传输数据3、小结论 传输模式和操作模式是不同的概念 Video Mode操作模式下必须使用High-Speed的传输模式 Command Mode操作模式并没有规定使用High-Speed或Low Power的传输模式,或者说 即使外部LCD模组为Video Mode,但通常在LCD模组初始化时还是使
12、用Command Mode模式来读写寄存器,因为在低速下数据不容易出错并且容易测量。 Video Mode当然也可以用High-Speed的方式来发送指令,Command Mode操作模式也可以使用High-Speed,只是没有必要这么做。以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议有专门的文档,所以这里就记录一些常用知识点:一、D-PHY1、传输模式LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHzHS(High-Speed)模式:用于高速传输数据,速率范围 80 Mbps, 1Gbps per Lane传输的最小单元为 1 个字节,
13、采用小端的方式及 LSB first,MSB last。2、Lane States* LP mode 有 4 种状态: LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)* HS mode 有 2 种状态: HS-0、HS-1HS 发送器发送的数据 LP 接收器看到的都是 LP00,3、Lane Levels* LP: 0 1.2V* HS: 100 300mV,HS common level = 200mV,swing = 200 mv4、操作模式在数据线上有 3 种可能的操作模式:Escape mode, High-Speed (Burst) mode and Contro
14、l mode,下面是从停止状态进入相应模式需要的时序:* Escape mode 进入时序:LP11LP10LP00LP01LP00,退出时序:LP10LP11当进入 Escape mode 需要发送 8-bit entry command 表明请求的动作,比如要进行低速数据传输则需要发送 cmd: 0x87,进入超低功耗模式则发送 cmd: 0x78。在 DSI 中 LP 通讯只用 Data Lane 0。* High-Speed mode 进入时序:LP11LP01LP00SoT(0001_1101),退出时序:EoTLP11,时序图如下:* Turnaround 进入时序:LP11LP1
15、0LP00LP10LP00,退出时序:LP00LP10LP11这是开启 BTA 的时序,一般用于从 slave 返回数据如 ACK: 0x84。5、时序要求在调试 DSI 或者 CSI 的时候, HS mode 下的几个时序非常重要:T_LPX,T_HS-SETTLE T_HS-PREPARE + T_HS-ZERO,T_HS-TRAIL,一般遵循的原则为:Host 端的 T_HS-SETTLE Slave 端的 T_HS-SETTLE。二、DSI1、线路构成在 DSI 中需要 1 根时钟线以及 1 4 根数据线。2、两种接口的 LCD* Command mode(对应 MPU 接口)* Vi
16、deo mode(对应 RGB 接口)该模式下视频数据只能通过 HS mode 传输。3、数据包类型短包:4 bytes,由 3 部分组成:* Data Identifier (DI) * 1byte: Contains the Virtual Channel7:6 and Data Type5:0.* Packet Data * 2byte:Length is fixed at two bytes* Error Correction Code (ECC) * 1byte:allows single-bit errors to be corrected and 2-bit errors to
17、be detected.长包:6 65541 bytes,同样由 3 部分组成:* Packet Header(4 bytes) - 包头Data Identifier (DI) * 1byte:Contains the Virtual Channel7:6 and Data Type5:0.Word Count (WC) * 2byte:defines the number of bytes in the Data Payload.Error Correction Code (ECC) * 1byte:allows single-bit errors to be corrected and
18、2-bit errors to be detected.* Data Payload(065535 bytes) - 有效数据Length = WC bytes* Packet Footer(2 bytes):Checksum - 包尾If the payload has length 0, then the Checksum calculation results in FFFFhIf the Checksum isnt calculated, the Checksum value is 0000h4、从控制器到外设发送的包类型如果希望从外设读取数据或者状态,则在处理器发送完读取命令后还需要
19、发送 BTA 命令,非读取命令在外设接收成功后会返回 trigger message 0x84。5、从外设到处理器数据包类型返回的数据一般分为 4 个类型:* Tearing Effect (TE):trigger message (BAh)* Acknowledge:trigger message (84h)* Acknowledge and Error Report:short packet (Data Type is 02h)* Response to Read Request:short packet or long packetGeneric Read Response、DCS Re
20、ad Response(1byte, 2byte, multi byte)读取数据返回值解析示例如下:cpp view plaincopy1. - Acknowledge and Error report (if error occurs) 2. Byte 0 is 0x87 (escape mode low power data transmission header) 3. Byte 1 is 0x02 (Data type, 8.10 of “MIPI Alliance Specification for DSI”) 4. Byte 3,2 are error report bits15
21、:0 (8.9.5 of “MIPI Alliance Specification for DSI”) 5. Byte 4 is the ECC, calculated from byte 1,2,3 6.7. - Generic Short READ response 8. Byte 0 is 0x87 (escape mode low power data transmission header) 9. Byte 1 is 0x11 or 0x12 (8.10 of “MIPI Alliance Specification for DSI”) 10. Byte 2,3 are the re
22、ad data. If only 1 byte is returned, byte 3 will be 0x00 11. Byte 4 is the ECC, calculated from byte 1,2,3 12.13. - Long READ packet response 14. Byte 0 is 0x87 (escape mode low power data transmission header) 15. Byte 1 is 0x1A (8.10 of “MIPI Alliance Specification for DSI”) 16. Byte 3,2 are the wo
23、rd count N (N=0 to 65535) 17. Byte 4 is the ECC, calculated from byte 1,2,3 18. Byte 5 to byte 5+N-1 are the N-byte read data 19. Byte 5+N+1, byte 5+N are the checksum, calculated on byte 5 to byte 5+N-1. If 20. checksum is not calculated by peripheral, this field is 0x0000. 6、Video 模式的 3 种数据格式* Non
24、-Burst Mode with Sync Pulses* Non-Burst Mode with Sync Events* Burst Mode* 调试记录LCD半边闪屏问题,原厂给的信息:分析了系統板送出的 video mode timing,資訊摘要如下HSCLK: 160MHz Per lane bit-rate: 320Mbps (UI=3.125ns) HS SoT HS-prepare + HS-zero 約 155ns 由上述的 timing 懷疑與現象是因為 IC HS data settle timing 搭配不當所導致看来是我们输出的mipi信号 HS-prepare +
25、 HS-zero 比 LCD 默认设置短引起的。还有随机整屏闪动的问题通过调节 VFP 和 VBP 的值调到了理想状态。另外 LCD 的 VCC 在使用 mos 管控制后休眠后会有 2.0V 的悬浮电压,通过 RC 电路将电压放掉,将 C78 换成了 10K 电阻。LCD电路上有几个比较重要的电压: AVDD、VCC、VGH、VGL、HAVDD、VCOM(由AVDD通过电阻分压得到)* 唤醒慢的问题在最初调试的几款 LCD 里面初始化 cmd 都比较少,后来在调试一款 IPS 屏的时候发现唤醒需要 3 秒左右,这款 LCD 初始化 cmd 有100多条,之前在调试一款 LCD 的时候每条 cm
26、d 发送之后需要 delay 10ms 再发下一条 cmd,所以在这款 LCD 这里不能有 delay,并且经过调试在确保发送成功的情况下将 LP 的传输速度提高了 3 倍(这里需要读取每条 cmd 的返回值 0x84 确认命令是否发送成功),优化后唤醒时间不到 1 秒。* LCD 参数理解更正才发现之前一直对 LCD 的几个参数 HFP、HBP、VFP、VBP 理解有错误,正确的应该是以同步信号(HSYNC、VSYNC)为基准,在同步信号之前的称为 Front,在同步信号之后的称为 Back,而不是之前理解的以有效像素为基准。* LCD 显示呈锯齿状问题这两天(12.11)还调试了一款 54
27、0 x 960 分辨率的 mipi LCD,在开始的时候一直点不亮,和供应商确认了好久无意间才发现是他们给的初始化代码是错的,使用正确的初始化代码就能点亮了,不过显示出来的图像却是呈锯齿状的,即没有对齐。之前在别的平台也遇到过类似问题,也就是分辨率不是 16 的整数倍,LCD controller 在取数据的时候会对不齐。边研究 Datasheet 边和 ASIC 同事讨论,后来确定了一个方案:即在 DSI、LCD 寄存器里面设置分辨率为 540 x 960 以让 LCD 正确识别信号,但 framebuffer 需要设置为 544 x 960 以对齐,并且设置 Source pitch 寄存
28、器为 544,这样显示就正常了,相当于 framebuffer 里每一行的最后 4 个 pixel 会被 LCD controller 丢掉。今天(12.12)在和 ASIC 同事的讨论下更正了之前的理解:LCD controller 在计算取数据的时候,地址是根据(x,y)坐标来算的,差不多是address = y * pitch + x + base,pitch 就是一行 pixel 在内存里的大小,这个至少是要对齐到 8byte, 因为 bus 宽度是 8byte,如 Data sheet 中的描述 ”Source pitch for RGB channel, QWORD aligned if linear mode“。之前计算 pitch 值的公式为:xres / 8 * bits_per_pixel / 8,如果 xres = 540,bits_per_pixel = 32,计算的结果因为取整的原因为 0x10c,实际上正确的值应该是 0x10e,所以需要将公式改为:xres * (bits_per_pixel / 8) / 8,即在每个像素占 4byte 的情况下只要 xres 为偶数就可以满足对齐的要求,而不用改为 544。