mipi dsi屏调试

这二天一个新项目调屏,在旧机器上加上转接线来提前调试。好久没调过屏了,以前的大概记得个1,2。本来就对显示部份没什么研究,但是仅仅是调试来说,工作应该是很easy的。(对mipi协议理解除外)。

首先由于是旧板子,因此不用考虑背光、供电、gpio控制等(整个连接fpc都是与旧板子兼容的),所以工作就变成了仅仅中调软件时序与屏初始化等。

从模组厂那边要来了份实始化参数和一份spec。很遗憾,这是一份精简过的spec,基本只有page0部份寄存器可以看下,而page0的基本是display_on / display_off这类似的,跟初始参数设置的寄存器基本看不到(估计看到了,也不会怎么理解,gamma较正,vcom设置这些,不是很了解屏的估计都是黑的)。

软件部份很简单,加入初始化代码,配好tcon timing时序。

看spec,整个spec我只看到了video模式,一般来说mipi dsi应该有3种模式:cmd video video_burst。但是只看到了video模式的timing说明。  

 

 

对vbp vfp vspw hbp hfp hspw的要求如上。

Bitrate的计算公式也给出来了:

              

我们稍稍转换下,可以得到:

fram_rate *(ht * vt) * bits_per_pix = BitRate * lane_num

对于全志平台来说,也就是:

BitRate = dclk *bits_per_pix/lane_num = dclk * 6 > 385即可

 

上面的公式跟mipiclock的计算公式是不是很像?

{

Mipiclock = [ (width+hsync+hfp+hbp) * (height+vsync+vfp+vbp) ] *(bus_width) * fps/ (lane_num)/2

即mipi 屏的传输时钟频率(CLKN,CLKP)等于(屏幕分辨率宽width+hsync+hfp+hbp)x ( 屏幕分辨率高height+vsync+vfp+vbp) x(RGB显示数据宽度) x 帧率/ (lane_num)/2

简单解释下:

      一帧画面需要的数据量为(单位bit):FRAME_BIT = (屏幕有效显示宽度+hsync+hfp+hbp) x ( 屏幕有效显示高度+vsync+vfp+vbp) x(RGB显示数据宽度24)

     一秒钟内需要传输的数据量为(单位bps):FRAME_BIT  x  fps(帧率)。

     那为何要除以lane_num----因为mipi通讯协议中,一个CLOCK几个lane是可以同时传输数据的。

     为何又要除以2----因为根据mipi通讯协议,CLK_N、CLK_P这两根时钟线的上升沿/下降沿可以获取到数据。

}

看到没,不管你怎样传,ht*vt*bus_width的数据量必须被传完。。。。

 

有了上面的要求与计算,很容易配置一份tcon timing参数,对于全志A64平台来说就是下面的:

                                       

 

上电时序要求如下,软件设置reset控制等。

弄好烧进去发现只有背光亮了,屏没反应。。。

 

弄动屏时无意间发现有时背光会灭,再弄下又亮,明白应该是连接座那里接触不好,用手按着发现也一直不行。在不能确定硬件ok与否的时候,只能看下屏本身是否ok,mipi接口是否正常通信。找到屏的自测模式。

 

发现设置自测模式,屏也没有任何反应,明白就是连接座坏了。接品都不通。无奈只好找硬件说明情况。硬件表示做这个连接座不好做,费时。没办法,任务在那里,不影响进度的情况下,让硬件边新做一个连接座,这边边用飞线板来调。个人来讲是很反感这种高速的东西飞线调的,不能出效果还好,出效果了,达不到理想状态,就不知道是飞线引起的信号问题,还是软件设置不对。

 

飞线板有个有意思的情况, 可以进入屏自测模式,说明屏初始化下cmd时,mipi通信是ok的。但是这时其实我知道是有影范的,下cmd时速率应该是比较低的,初始下cmd ok并不代表真正传数据时就ok,真正传数据时速度是远远大于初始化时下cmd时的。果然,即使飞线板可以进入自测模式,但是正常设置时也是没有任何反应。

再说个题外的,看全志a64平台spec,display部份说的是相当简洁,mipi部份一毛的说明都没有。因此所谓调mipi屏,也就是调调tcon timing与加一下初始化参数与控制。就这样我还以前tcon0是控制mipi dsi的。直到我看到一直没反应,查看tcon0寄存器,发现基本没设置。。。。难道问题在这?

 

                                      

        以为问题是在这里,但是对比了下旧板子机器,发现tcon0的寄存器值也是差不多的,基本没设置,所以我才联想到,全志a64的tcon0并没有来控制mipi dsi或者说没有用全部的tcon0来控制。

马上看dtsi文件,发现还真是有个dsi的玩意,但是这玩意spec中没有一毛的说明,没办法。

                           

 

 

既然还是出不来,那就只有3个办法,1是抓mipi数据包来分析协议,可以自己对mipi协议没研究过,芯片手册上这部份也没说明,就是去抓都不知道怎么抓,从何抓起;2是看下初始化参数是否有问题;第3就是等硬件的新连接座了,如果万一换了新连接座还是不行,那又该怎么办?我还真的不知道。至少在全志平台上调mipi基本就是个算下的简单活,这都搞不好,说不过去。

对了下初始化参数,手上spec中能看到的寄存器基本对过,没什么,就发现了个tear on的设置,这个应该是cmd模式下才有的,video模式根本就没用。去掉发现屏还是一样没反应。

                         {0x35, 1, {0x00}}, //TE ON

 

等了一下午,新的连接座到,连接上电,一切ok。连flick都不用去调。

                          

 

所谓连接座,就是下面的这个小玩意

                           

 

就这个小玩意费了我一天多时间。

所谓turnkey平台方案真的是不好,一个文档说明没有,2个对于一些基本的东西都没有在spec上说明,所谓调也只是小玩下吧,不利于工程师的进步。下一步要细研究下显示部份。

 

再补充下vbp hbp这些基本概念

 

 

<think>嗯,用户这次的问题是关于MIPI DSI屏幕消隐参数配置的技术细节。看来用户正在开发显示驱动或调试屏幕,需要深入理解DSI协议中的时序控制部分。这类问题通常出现在嵌入式显示系统开发中,用户可能是硬件工程师或驱动开发人员。 从专业角度,消隐区参数确实容易混淆,因为涉及多个关联概念。我需要先理清三个核心参数的关系:HBP/HFP和VBP/VFP分别控制水平和垂直方向的空白区域,而HSA/VSA则是同步脉冲本身。这些参数共同决定了有效像素区域在数据流中的位置。 用户可能实际遇到了屏幕边缘异常或撕裂问题,才会专门查询这些底层配置。考虑到MIPI DSI的复杂性,应该提醒参数配置错误可能导致黑等严重故障。在解释时要特别注意区分D-PHY层的数据打包方式和控制器层的时序概念,这两个层面经常被混为一谈。 关于配置方法,不同芯片平台差异较大。Linux DRM框架的配置示例比较通用,但用户如果用MCU可能需要参考具体datasheet。突发传输模式(Burst Mode)的消隐区配置特殊,这点必须强调,因为很多屏幕异常都源于此。 最后生成的问题要覆盖常见痛点:参数计算逻辑、异常排查、调试工具等。用户既然问到配置细节,后续很可能需要调试手段。DSI协议分析仪虽然专业但昂贵,可以补充说明用逻辑分析仪抓取HS/LP信号的方法作为替代方案。</think>MIPI DSI(Display Serial Interface)的消隐参数(Blanking Parameters)是确保屏幕正确显示的关键时序设置,主要涉及水平消隐(Horizontal Blanking)和垂直消隐(Vertical Blanking)的配置。以下是详细解析: --- ### **一、消隐参数定义** 消隐区是帧数据传输中不包含有效像素数据的时段,用于完成行/帧切换和同步。主要参数包括: 1. **水平消隐(Horizontal Blanking)** - **HBP (Horizontal Back Porch)**:行同步信号结束到有效像素数据开始的时间。 - **HFP (Horizontal Front Porch)**:有效像素数据结束到下一行同步信号开始的时间。 - **HSA (Horizontal Sync Active)**:行同步信号脉冲的持续时间。 - **HACT (Horizontal Active Time)**:一行中有效像素的传输时间。 - 总行时间:$$ \text{H\_TOTAL} = \text{HACT} + \text{HBP} + \text{HFP} + \text{HSA} $$ 2. **垂直消隐(Vertical Blanking)** - **VBP (Vertical Back Porch)**:帧同步信号结束到首行有效数据开始的时间。 - **VFP (Vertical Front Porch)**:末行有效数据结束到下一帧同步信号开始的时间。 - **VSA (Vertical Sync Active)**:帧同步信号脉冲的持续时间。 - **VACT (Vertical Active Time)**:一帧中有效行数。 - 总帧时间:$$ \text{V\_TOTAL} = \text{VACT} + \text{VBP} + \text{VFP} + \text{VSA} $$ > **物理意义**:消隐期让屏幕有足够时间复位电子束(CRT)或切换行/帧(LCD),避免图像撕裂[^1]。 --- ### **二、配置方法** #### **1. 参数获取来源** - **屏幕规格书(Datasheet)**:查找“Timing Characteristics”章节,例如: ```plaintext Typical values: HACT = 800, HFP=40, HBP=40, HSA=48 VACT=480, VFP=13, VBP=29, VSA=3 ``` - **EDID (Extended Display Identification Data)**:系统启动时从屏幕读取的标准化数据。 #### **2. 驱动代码配置(以Linux DRM为例)** ```c // 定义显示时序结构体 struct drm_display_mode mode = { .clock = 33333, // 像素时钟频率 (kHz) .hdisplay = 800, // HACT .hsync_start = 800 + 40, // HACT + HFP .hsync_end = 800 + 40 + 48, // HACT + HFP + HSA .htotal = 800 + 40 + 48 + 40, // HACT + HFP + HSA + HBP .vdisplay = 480, // VACT .vsync_start = 480 + 13, // VACT + VFP .vsync_end = 480 + 13 + 3, // VACT + VFP + VSA .vtotal = 480 + 13 + 3 + 29, // VACT + VFP + VSA + VBP }; drm_mode_probed_add(connector, &mode); // 注册显示模式 ``` #### **3. 配置注意事项** - **突发模式(Burst Mode)**:DSI专用模式,消隐区用于传输压缩像素包,需缩短消隐时间[^2]。 - **低功耗优化**:增大VBP/VFP可延长屏幕休眠时间,但需确保总时序符合协议要求。 - **时序验证**:通过逻辑分析仪抓取HSYNC/VSYNC信号,确认实际波形与配置一致。 --- ### **三、典型问题排查** 1. **黑/花**: - 检查HSA/VSA是否过短(同步信号未识别)。 - 确认H_TOTAL/V_TOTAL是否超出屏幕最大支持值。 2. **图像偏移/撕裂**: - 调整HBP/VBP使图像居中。 - 检查像素时钟是否稳定(抖动需<5%)。 --- ### **四、相关标准参考** - **MIPI DSI Specification v1.3**:第9章定义时序模型(需会员访问)[^3]。 - **VESA DMT Standard**:通用时序标准(如分辨率为800x480时,典型消隐值见标准文档)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值