1. 开篇:从一块“黑屏”到第一缕光
大家好,我是老张,在MTK平台和智能硬件这块摸爬滚打了十几年,点亮过的屏幕少说也有上百款。今天想和大家聊聊一个非常具体、但又让很多新手工程师头疼的问题:在MT8167S这类MTK平台上,如何从零开始,在LK(Little Kernel,也就是Bootloader阶段)把一块新屏幕给驱动起来。
你可能刚拿到一块新的屏幕模组,接上开发板,上电后却是一片深邃的“黑”。别慌,这太正常了。点亮屏幕,尤其是Android系统启动前那个Logo的显示,是整个系统启动流程中非常靠前且关键的一步。这个过程主要发生在LK阶段,它不依赖复杂的Android框架,而是直接与硬件对话。我们今天要做的,就是成为这个“对话”的搭建者。
简单来说,LK层LCM驱动的移植,核心就是两件事:一是告诉平台“屏幕是谁”(配置参数),二是教会平台“怎么和屏幕打招呼”(初始化序列)。听起来简单,但里面的门道不少。一个参数配错,可能屏幕就是不亮,或者亮了也是花屏、闪屏。这篇文章,我就以MT8167S(Android 9.0)平台为例,带大家走一遍完整的移植流程,从解读规格书开始,到最终看到启动Logo,把每一步的细节和踩过的坑都摊开来讲清楚。
2. 移植前的准备:读懂屏幕的“身份证”
在动手写代码之前,最重要的一步是研读屏幕厂商提供的规格书(Datasheet)。这份文档就是屏幕的“身份证”和“使用说明书”,我们需要的所有关键信息都在里面。很多移植失败的问题,根源就在于参数没从规格书里找准。
首先,找到屏幕的基本身份信息。 通常规格书的前几页就会写明型号、尺寸、分辨率和接口类型。对于MT8167S,我们最常见的是MIPI DSI接口的屏幕。你需要确认你的屏幕是否是DSI接口,以及是几对数据通道(Lane)。比如,我手头这块屏的规格书就明确写着:1920x1200 (WUXGA), MIPI DSI 4-lane。这直接决定了我们后面代码里 LCM_TYPE_DSI 和 LANE_NUM = LCM_FOUR_LANE 的配置。
其次,也是最容易出错的部分:时序参数。 这部分参数直接决定了主板发送给屏幕的数据流是否合规。它们通常在规格书的“输入信号时序特性”章节里。你需要找到类似下面这样的一个表格,里面会定义各种时间参数:
| 参数符号 | 描述 | 典型值 (单位: 像素时钟周期) | 备注 |
|---|---|---|---|
HSA |
行同步脉冲宽度 (Horizontal Sync Active) | 20 | |
HBP |
行后沿 (Horizontal Back Porch) | 40 | |
HFP |
行前沿 (Horizontal Front Porch) | 80 | |
HACT |
行有效像素 (Horizontal Active) | 1920 | 即屏幕宽度 |
VSA |
场同步脉冲宽度 (Vertical Sync Active) | 4 | |
VBP |
场后沿 (Vertical Back Porch) |


6660

被折叠的 条评论
为什么被折叠?



