一、基本信息

  • 开发板:RV1126
  • linux版本:4.19.111
  • 显示屏:HX070JGI50(7寸)
  • 显示器分别率:1024 * 600

二、MIPI协议

  1. 连接示意图(图片来源,正点资料)

  2. MIPI DSI 分层

    注意: 屏幕,应用层有 DCS,协议层主要有 DSI,物理层有 A-PHY、C-PHY、D-PHY

  3. 数据发送和接收示意图

    注意: 多 lan 通信数据非整数倍传输时,没数据的 lan 通道先进入 EoT 模式。

  4. 通道 lan 模块

    注意: 实际的 Lane 模块是图中简化而来的,其中高速收发器有 HS-TX、HS-RX,低速收发器有 LP-RX 和 LP-TX,以及一个低速竞争检测器 LP-CD,对于高速单向数据通道,可能只有 HS-TX 或者 HS-RX

  5. D-PHY 信号电平

    注意: 图中蓝色实线是 LP 模式下的信号波形示例,电压为 0~1.2V。绿色虚线是 LP 模式下信号的高低电平门限。红色实线是 HS 模式下的信号波形示例,中心电平 200mV

  6. 通道状态

  • HS 模式采用差分信号,所以只有两种状态:

    HS-0: 高速模式下 Dp 信号低电平,Dn 信号高电平的时候。

    HS-1: 高速模式下 Dp 信号高电平,Dn 信号低电平的时候。

  • LP 模式下有两根独立的信号线驱动,所以有 4 个状态:分别是: LP-00、LP-01、LP-10、LP-11

  1. 数据 Lane 三种工作模式

    D-PHY 协议规定了,通过 Lane 的不同状态转换有三种工作模式:控制模式、高速模式和 Escape 模式。控制模式和 Escape 模式都属于 LP,高速模式属于 HS。正常情况下,数据 Lane 工作在控制模式或者高速模式下

    • 控制模式

      这个我也不清楚,据说 LAN 复位后,数据通道处于 control 模式(LP-11)。其他模式都是开始或者结束于control模式。常见的如 HS-Rqst,LP-Rqst,STOP

    • 高速模式

    • Escape 模式

      对于数据 Lanes,进入 Escape 模式以后,应该紧接着发送一个 8bit 的命令来表示接下来要做的操作,命令如图所示





      注意: 低 bit 先发送,所以对应的十六进制就是 0X87(0X10000111)

      Escape 模式下发送这三个命令的时序图如图 24.3.4.4 所示:

三、LCD 屏幕概念

  1. 名词含义

    缩写 英文全称 含义
    HSYNC Horizontal Sync 水平同步
    HLW/HPW Horizontal Low Pulse Width 水平同步信号宽度
    HSA Horizontal Sync Active 水平同步有效
    HSS Horizontal Sync Start 水平同步开始
    HSE Horizontal Sync End 水平同步结束
    HBP Horizontal Back Porch 水平后肩
    HFP Horizontal Front Porch 水平前肩
    HACT Horizontal Active 水平有效区域,也就是屏幕有效宽度
    VSYNC Vertical Sync 垂直同步
    VLW/VPW Vertical Low Pulse Width 垂直同步信号宽度
    VSA Vertical Sync Active 垂直同步信号宽度
    VSS Vertical Sync Start 垂直同步开始
    VSE Vertical Sync End 垂直同步结束
    HBP Vertical Back Porch 垂直后肩
    VACT Vertical Active 垂直有效区域,也就是屏幕有效高度
    VFP Vertical Front Porch 垂直前肩
    RGB 在这里指 RGB 原始像素数据流
    LPM Low Power Mode 低功耗模式
    BLLP Blanking or Low-Power periods 没有包含有效数据的数据包或者进入 LP 模式下的状态,称为 BLLP
  2. video 和 command 模式

    简单来说,就是显示器有中有无缓冲区,有缓冲区时是 command 模式,刷新时直接从缓冲区获取刷新,通过命令更改缓冲区内容;无缓冲区时是 video 模式,所有数据都是从通道中获取刷新

    • command 模式

    • video 模式

  3. LCD 显示结构

  4. 长短数据包

    • 长数据包



      图中绿色的部分就是长包结构,长包有 3 部分:32-bit 的 PH(包头)、用于自定义的负载数据、16-bit 的包尾(PF)。PH 有 3 部分:8-bit 的 DI,16-bit 的 WC 以及 8-bit 的 ECC。PF 只有 1 部分:16-bit 的校验和,因此长包数据长度范围是 6~65541 个字节。

    • 短数据包



      图就是短数据包结构,只有一个 PH(包头),PH 分为 3 部分:和长数据包一样,第 1 个就是 8-bit 的 DI 域;接下来是 2 个字节的数据负载域,也就是用户要实际发送的内容;最后是一个 8-bit 的 ECC 域,可以实现 1bit 纠错,2 比特错误检测

  5. 常用指令

  6. MIPI DSI 时钟计算



    注意:一般说的 MIPI DSI 时钟要在这个时间测量到的频率上乘以 2,因为双边沿采集。

四、DSI 调试

弄明白上面的知识点后,调试 DSI 相对就比较简单了,有不明白的地方可以参考正点的教程和瑞芯微的手册已经MIPI协议文档,这里我只是做一个总结,便于自己在调试的时候好查找资料

  1. 设备树

    &dsi {
    status = "okay";
    // rockchip,lane-rate = <480>; panel@0 {
    compatible = "ilitek,ili9881d", "simple-panel-dsi";
    reg = <0>;
    backlight = <&backlight>;
    power-supply = <&vcc18_lcd_n>;
    prepare-delay-ms = <5>;
    reset-delay-ms = <1>;
    init-delay-ms = <80>;
    disable-delay-ms = <10>;
    unprepare-delay-ms = <5>; width-mm = <68>;
    height-mm = <121>; // reset-gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>; dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
    MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>; dsi,format = <MIPI_DSI_FMT_RGB888>;
    dsi,lanes = <4>; panel-init-sequence = [
    15 00 02 80 8B
    15 00 02 81 78
    15 00 02 82 84
    15 00 02 83 88
    15 00 02 84 A8
    15 00 02 85 E3
    15 00 02 86 88 ]; display-timings {
    native-mode = <&timing0>;
    timing0: timing0 {
    clock-frequency = <53000000>;
    hactive = <1024>;
    vactive = <600>;
    hback-porch = <160>;
    hfront-porch = <160>;
    hsync-len = <10>; vback-porch = <23>;
    vfront-porch = <12>;
    vsync-len = <1>; hsync-active = <0>;
    vsync-active = <0>;
    de-active = <0>;
    pixelclk-active = <0>;
    };
    }; ports {
    #address-cells = <1>;
    #size-cells = <0>; port@0 {
    reg = <0>;
    panel_in_dsi: endpoint {
    remote-endpoint = <&dsi_out_panel>;
    };
    };
    };
    }; ports {
    #address-cells = <1>;
    #size-cells = <0>; port@1 {
    reg = <1>;
    dsi_out_panel: endpoint {
    remote-endpoint = <&panel_in_dsi>;
    };
    };
    };
    };

    注意: lane-rate 不配置时,时钟在驱动中会自动计算,所以多事情况下都会屏蔽即可

  2. 设备树修改说明

    看着设备说的信息很多,不要怕,其实很简单,对应的注释这里我就不详细说明了,网上也有很多博客介绍,此笔记主要是记录流程以及遇到的一些问题

  3. clock-frequency 计算

    clock-frequency ≈ (hactive + hback-porch + hfront-porch + hsync-len) * (vactive + vback-porch + vfront-porch + vsync-len) * fps
  4. 文档位置

    • Kernel (develop-4.4)

      drivers/gpu/drm/rockchip/dw-mipi-dsi.c

      drivers/phy/rockchip/phy-rockchip-inno-video-combo-phy.c

      Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt

      Documentation/devicetree/bindings/phy/phy-rockchip-inno-video-combo-phy.txt

    • U-Boot (next-dev)

      drivers/video/drm/dw_mipi_dsi.c

      drivers/video/drm/inno_video_combo_phy.c

    • U-boot (rkdevelop)

      drivers/video/rockchip-dw-mipi-dsi.c

      drivers/video/rockchip-inno-mipi-dphy.c

    注意: 一般调试 DSI 不用修改驱动文件,只需要修改设备树即可

  5. 确认驱动加载



    注意: Drm 驱动的加载存在依赖关系,所以可能会多次因为驱动资源暂时获取不到而返回 -EPROBE_DEFER(-517),但是只要配置正确,待相关组件驱动能够完整获取到资源后,最终就会 bound 成功。

  6. 当前显示信息

  7. 查看 LCD 信息

五、调试问题

  1. 不论修改设备树中的说明内容,显示屏都无明显变化

    解决办法:可能是设备树不是当前使用的

  2. 左半边花屏

    解决办法:检查设备树配置的尺寸,降低时钟

  3. 横竖屏转换

    解决办法:这个需要注意 LCD 的扫描方式,有的 LCD 可能是通过命令配置,有的可能是通过硬件配置。

参考资料

  1. 【正点原子】ATK-DLRV1126嵌入式Linux驱动开发指南V1.2.pdf
  2. Rockchip_DRM_Panel_Porting_Guide_V1.6_20190228.pdf
  3. MIPI DSI Specification_v1-3.pdf
  4. Linux MIPI DSI驱动调试笔记-LCD时序参数配置(三):https://developer.aliyun.com/article/1326393

RV1126 DSI 调试的更多相关文章

  1. LCD之mipi DSI接口驱动调试流程【转】

    转自:http://blog.csdn.net/liwei16611/article/details/68146912 1.LCD MIPI DSI协议 MIPI-DSI是一种应用于显示技术的串行接口 ...

  2. msm8916 lcd 相关调试点指导

    主要代码:LINUX\android\kernel\arch\arm\boot\dts\qcom\dsi-panel-trust-hx8379c-fwvga-video.dtsiLINUX\andro ...

  3. 高通平台 lcd driver 调试小结

    一.概述 1.1 简介 本文档主要包括LCD模块的驱动流程分析.Framebuffer相关知识.Gralloc等相关内容,以及LCD调试的一些经验和相关bug的分析和讲解. 1.2  开发环境 And ...

  4. mipi 调试经验

    转载自http://blog.csdn.net/g_salamander/article/details/9163455 以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议 ...

  5. mipi 调试经验(转)

    以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议有专门的文档,所以这里就记录一些常用知识点: 一.D-PHY 1.传输模式 LP(Low-Power) 模式:用于传输控制 ...

  6. MIPI DSI之DBI DPI含义和区别(3-1)

    一.MIPI MIPI(Mobile Industry Processor Interface/移动工业处理器接口)是2003年由ARM.Nokia.ST 等公司成立联盟并为移动应用处理器制定的一个开 ...

  7. mipi 调试经验【转】

    转自:http://blog.csdn.net/g_salamander/article/details/9163455 版权声明:本文为博主原创文章,未经博主允许不得转载. 以下是最近几个月在调试 ...

  8. MIPI调试经验(转载)

    目录 一.D-PHY 1.传输模式 2.Lane States 3.Lane Levels 4.操作模式 5.时序要求 二.DSI 1.线路构成 2.两种接口的 LCD 3.数据包类型 4.从控制器到 ...

  9. MIPI DBI\DPI\DSI简介【转】

    本文转载自:http://blog.csdn.net/longxiaowu/article/details/24249971 (1)DBI接口 A,也就是通常所讲的MCU借口,俗称80 system接 ...

  10. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

随机推荐

  1. DB2复制表结构及数据

    在DB2数据库中,复制已经存在的表的结构及其数据.我们采用两步走方式:第一步先复制表结构,第二部拷贝数据. 第一步:复制表结构 方法一: Create table test_Rate as (sele ...

  2. 9.1 运用API创建多线程

    在Windows平台下创建多线程有两种方式,读者可以使用CreateThread函数,或者使用beginthreadex函数均可,两者虽然都可以用于创建多线程环境,但还是存在一些差异的,首先Creat ...

  3. Python面试题——面向对象题

    1.简述面向对象的三大特性. 封装: 封装指的是把一堆数据属性与方法数据放在一个容器中,这个容器就是对象.让对象可以通过 "." 来调用对象中的数据属性与方法属性. 继承: 继承指 ...

  4. fasthttp + `page partial gziped cache`: 页面输出服务性能提升20%

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 接上一篇:http 中使用 gzip 输出内容时,如何预先 ...

  5. np.random.beta

    numpy.random.beta(a,b,size=None) 从β分布中提取样本.β分布是狄里克莱分布的一个特例,与伽马分布有关. 在这里我们将参数(3个参数)设置为32 32 3 参数1:32次 ...

  6. 记一次 openSUSE Tumbleweed 下安装 k8s

    出现的问题 因为没有K8s基础的而踩了不少坑. kubeadm kubelet 最好指定版本安装,因为kubelet的版本需要小于等于kubeadm的版本,否则就会报错. 运行 kubeadm ini ...

  7. 飞码LowCode前端技术系列(二):如何便捷配置出页面 | 京东云技术团队

    一.配置解法 飞码LowCode前端技术(一)中飞码提出了至少需要满足2个大能力点以及对应16个细化点.在业务复杂的场景下数据具有流转性质,事件的触发会改变数据.同时也会触发其他事件等情况.飞码使用数 ...

  8. DOM级别

    DOM1 DOM1级由两个模块组成:DOM核心(DOM CORE)和DOM HTML.其中,DOM核心规定的是如何映射基于XML的文档结构,以便简化对文档中任意部分的访问和操作.DOM HTML模块则 ...

  9. AirSim 自动驾驶仿真 (6) 设置采集参数和属性

    https://cloud.tencent.com/developer/article/2011384 1.配置文件在哪 默认情况下,文件位于用户目录下的AirSim文件夹,比如在Windows下,文 ...

  10. [C++]P3379 LCA 最近公共祖先

    最近公共祖先 LCA 倍增写法 LCA的倍增主要由三个重要的过程组成 预处理lg数组 DFS求fa depth 倍增节点 观看以下内容前建议先把完整代码大致纵览一遍,有利于理解各个函数的意义 倍增思想 ...