转自:http://blog.csdn.net/g_salamander/article/details/9163455

版权声明:本文为博主原创文章,未经博主允许不得转载。

以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议有专门的文档,所以这里就记录一些常用知识点:

一、D-PHY

1、传输模式

LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHz

HS(High-Speed)模式:用于高速传输数据,速率范围 [80 Mbps, 1Gbps] per Lane

传输的最小单元为 1 个字节,采用小端的方式及 LSB first,MSB last。

2、Lane States

*  LP mode 有 4 种状态: LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)

* HS mode 有 2 种状态: HS-0、HS-1

HS 发送器发送的数据 LP 接收器看到的都是 LP00,

3、Lane Levels

* LP: 0 ~ 1.2V

* HS: 100 ~ 300mV,HS common level = 200mV,swing = 200 mv

4、操作模式

在数据线上有 3 种可能的操作模式:Escape mode, High-Speed (Burst) mode and Control mode,下面是从停止状态进入相应模式需要的时序:

* Escape mode 进入时序:LP11→LP10→LP00→LP01→LP00,退出时序:LP10→LP11

当进入 Escape mode 需要发送 8-bit entry command 表明请求的动作,比如要进行低速数据传输则需要发送 cmd: 0x87,进入超低功耗模式则发送 cmd: 0x78。在 DSI 中 LP 通讯只用 Data Lane 0。

* High-Speed mode 进入时序:LP11→LP01→LP00→SoT(0001_1101),退出时序:EoT→LP11,时序图如下:

* Turnaround 进入时序:LP11→LP10→LP00→LP10→LP00,退出时序:LP00→LP10→LP11

这是开启 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。

二、DSI

1、线路构成

在 DSI 中需要 1 根时钟线以及 1 ~ 4 根数据线。

2、两种接口的 LCD

* Command mode(对应 MPU 接口)

* Video mode(对应 RGB 接口)

该模式下视频数据只能通过 HS mode 传输。

3、数据包类型

短包:4 bytes,由 3 部分组成:

* Data Identifier (DI) * 1byte: Contains the Virtual Channel[7:6] and Data Type[5: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 be detected.

长包:6 ~ 65541 bytes,同样由 3 部分组成:

* Packet Header(4 bytes) - 包头

Data Identifier (DI) * 1byte:Contains the Virtual Channel[7:6] and Data Type[5: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 2-bit errors to be detected.

* Data Payload(0~65535 bytes) - 有效数据
Length = WC × bytes

* Packet Footer(2 bytes):Checksum - 包尾
If the payload has length 0, then the Checksum calculation results in FFFFh
If the Checksum isn’t calculated, the Checksum value is 0000h

4、控制器到外设发送的包类型

如果希望从外设读取数据或者状态,则在处理器发送完读取命令后还需要发送 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 packet
Generic Read Response、DCS Read Response(1byte, 2byte, multi byte)

读取数据返回值解析示例如下:

[cpp] view plaincopy
  1. - 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 bits[15:0] (8.9.5 of “MIPI Alliance Specification for DSI”)
  5. Byte 4 is the ECC, calculated from byte 1,2,3
  6. - Generic Short READ response
  7. Byte 0 is 0x87 (escape mode low power data transmission header)
  8. Byte 1 is 0x11 or 0x12 (8.10 of “MIPI Alliance Specification for DSI”)
  9. Byte 2,3 are the read data. If only 1 byte is returned, byte 3 will be 0x00
  10. Byte 4 is the ECC, calculated from byte 1,2,3
  11. - Long READ packet response
  12. Byte 0 is 0x87 (escape mode low power data transmission header)
  13. Byte 1 is 0x1A (8.10 of “MIPI Alliance Specification for DSI”)
  14. Byte 3,2 are the word count N (N=0 to 65535)
  15. Byte 4 is the ECC, calculated from byte 1,2,3
  16. Byte 5 to byte 5+N-1 are the N-byte read data
  17. Byte 5+N+1, byte 5+N are the checksum, calculated on byte 5 to byte 5+N-1. If
  18. checksum is not calculated by peripheral, this field is 0x0000.

6、Video 模式的 3 种数据格式

* Non-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 + 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 的时候每条 cmd 发送之后需要 delay 10ms 再发下一条 cmd,所以在这款 LCD 这里不能有 delay,并且经过调试在确保发送成功的情况下将 LP 的传输速度提高了 3 倍(这里需要读取每条 cmd 的返回值 0x84 确认命令是否发送成功),优化后唤醒时间不到 1 秒。

* LCD 参数理解更正

才发现之前一直对 LCD 的几个参数 HFP、HBP、VFP、VBP 理解有错误,正确的应该是以同步信号(HSYNC、VSYNC)为基准,在同步信号之前的称为 Front,在同步信号之后的称为 Back,而不是之前理解的以有效像素为基准。

* LCD 显示呈锯齿状问题

这两天(12.11)还调试了一款 540 x 960 分辨率的 mipi LCD,在开始的时候一直点不亮,和供应商确认了好久无意间才发现是他们给的初始化代码是错的,使用正确的初始化代码就能点亮了,不过显示出来的图像却是呈锯齿状的,即没有对齐。之前在别的平台也遇到过类似问题,也就是分辨率不是 16 的整数倍,LCD controller 在取数据的时候会对不齐。边研究 Datasheet 边和 ASIC 同事讨论,后来确定了一个方案:即在 DSI、LCD 寄存器里面设置分辨率为 540 x 960 以让 LCD 正确识别信号,但 framebuffer 需要设置为 544 x 960 以对齐,并且设置 Source pitch 寄存器为 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。

mipi 调试经验【转】相关推荐

  1. CMOS Sensor的调试经验分享(转)

    源:CMOS Sensor的调试经验分享 转载于:https://www.cnblogs.com/LittleTiger/p/8251670.html

  2. 分享在实际项目中积累的硬件调试经验 - 调试方法,以及常见调试案例

    文章目录 一.硬件调试的四个目标 二.硬件调试心得 三.一块新的板子的调试思路 四.硬件调试,一些网络资料 五.单片机硬件调试中常见的案例(杂记) 往期系列文章: 1.裸机项目开发经验分享 - 完整开 ...

  3. KEIL 调试经验总结

    来源:公众号[鱼鹰谈单片机] 作者:鱼鹰Osprey ID   :emOsprey 通过前面的多篇文章(已整理成专辑)我们已经了解了很多的 KEIL 调试方法,但是到底该怎么使用这些方法呢?这篇文章将 ...

  4. sja1000调试经验

    sja1000调试经验 去年年底的时候,一个公司给我打电话,问我最近有没有空,说要请我帮忙做一个基于CAN总 这里写代码片线通讯的东西,我去看了看,是一个数据采集系统,下面是一系列数据采集的智能板卡, ...

  5. 海思PQTool进行CCM调试经验

    海思PQTool进行CCM调试经验 前提:事先在不同色温环境下抓取好RAW图,进而才能进行CCM调试. 界面位置 在导入RAW图之前,先配置好Options和黑电平,否则校正会出现一些颜色问题. 导入 ...

  6. 东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录

    东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录(20170803YC) 本次总结主要实现的功能如下:用MEXE02软件在步进电机驱动器中设置好控制动作,每个控制动作有一个特定的编 ...

  7. STM32H743多路串口调试经验总结(HAL库)

    STM32H743多路串口调试经验总结(HAL库) 一.硬件基础 1.STM3H743核心板 2.自制串口拓展板(控制485收发使用的TDHx01D485H2隔离模块,该模块EN为低电平是发送,高电平 ...

  8. Hi3518EV200+PS3210调试经验总结

    Hi3518EV200+PS3210调试经验总结 到目前为止,ps3210调试算是告一段落了,忙忙碌碌了两三个星期,经验教训收获良多.本文总结一下踩过的那些坑和调试关键点. 1.        确认硬 ...

  9. 核烧写及UBOOT调试经验总结

    在某项目经历了内核移植的全过程 某项目沿用FORLINX开发板的uboot及内核版本,项目整体版本虽然稳定但比较旧,在调试过程中遇到不少困难,就本次CID项目内核烧写及UBOOT调试经验总结如下: 一 ...

最新文章

  1. python随机产生10个不同的两位数_python解决两位数加减法快速出题问题
  2. Jmeter设置变量与引用变量(三)
  3. LIGHTOJ 1005(组合数学)
  4. 原 水质监测系统解决方案
  5. C++二个数组求交集的实现算法(附完整源码)
  6. 将*.STL转换成顶点索引格式
  7. 编译错误 fatal error C1010: unexpected end of file while looking for precompiled header directive
  8. 【华为云技术分享】【测试微课堂】 有的放矢制定测试计划
  9. 小米这两款手机沦为“难兄难弟”,再降价也清不了库存
  10. 【语法】一些奇怪的语义错
  11. 有限项加和的极限求解思路定式
  12. 云钉一体,支撑5亿用户1900万企业背后的技术复盘
  13. MySQL药品管理系统设计_药店药品管理系统的设计与实现(SSH,MySQL)(含录像)
  14. 贴片钽电容的封装、尺寸和标…
  15. 益而优有机核桃油给宝宝安全放心的油!
  16. sigmoid代码实现
  17. 解决每次弹出“是否允许XX录制/投射您的屏幕”(享做笔记、王者荣耀等)手把手教程
  18. Homekit智能家居DIY设备一智能灯泡
  19. 提供一些网上webservice的WSDL地址
  20. 不敢“犯错”的应试教育

热门文章

  1. [C++]Qt 如何处理密集型耗时的事情(频繁调用QApplication::processEvents)
  2. Oracle 12c 安装及配置
  3. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg...
  4. **PHP中替换换行符
  5. CDOJ 1401 谭爷的黑暗沙拉 数学
  6. Eclipse下Maven工程多模块继承和聚合的创建
  7. 解决parseSdkContent failed java.lang.NullPointerException错误
  8. 本地安装magento无法登陆后台的问题
  9. 《加勒比海盗4:惊涛怪浪》高清图集 剧照欣赏
  10. google浏览器记住密码自动添加input框背景色问题