痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)

这篇具有很好参考价值的文章主要介绍了痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤

  我们知道 LCD 屏的接口有很多:DPI-RGB、MIPI DSI、DBI/MCU(I8080)、LVDS、SPI 等等,接口不同,对应的软件驱动也不同。RT1170 片内外设对以上接口都能很好地支持,今天我们主要聊最近比较火的 MIPI DSI 接口。

  在恩智浦官方 SDK (v2.14) 里目前支持的 MIPI DSI 接口的 LCD 屏主要有如下四款,但客户在实际应用中选择的屏五花八门(生产 MIPI DSI 接口的 LCD 厂商非常多),如果我们拿到一款全新 LCD 屏,该如何快速点亮它呢?今天痞子衡教你方法:

LCD屏型号 LCD分辨率
width * height
LCD驱动IC
晶鸿电子 RK055AHD091 720x1280 瑞鼎科技 RM68200
晶鸿电子 RK055MHD091 720x1280 奇景光电 HX8394-F
晶鸿电子 RK055IQH091 540x960 瑞鼎科技 RM68191
定制屏 G1120B0MIPI 400x392 瑞鼎科技 RM67162

一、点屏准备工作

  磨刀不误砍柴工,在开始点屏之前我们需要准备如下材料,这在后续修改和调试 LCD 屏相关代码时非常重要。其中 LCD 屏数据手册一般需要向屏厂获取,有了屏数据手册我们就能知道其相应驱动 IC,从而下载这个驱动 IC 的数据手册。

1. LCD 屏配套的数据手册
2. LCD 屏内置驱动 IC 的数据手册
3. RT1170 板卡连接 LCD 屏的原理图
4. 恩智浦 SDK_2_14_0_MIMXRT1170-EVKB
5. 能够访问 github

  痞子衡就以深圳柯达科电子生产的 KD050FWFIA019-C019A 屏为例,这款 MIPI DSI 屏分辨率是 480x854,其驱动 IC 是来自奕力科技的 ILI9806E。

二、点屏标准步骤

2.1 熟悉SDK标准例程

  恩智浦 SDK 里的 elcdif_rgb 例程是一个很好的基础工程,我们可以基于这个工程来修改代码做调试。工程里我们主要关注 elcdif_support.c/h 文件,在这个文件里,恩智浦已经把不同屏之间的差异做了抽离处理,你搜索 MIPI_PANEL_ 宏就能找到那些差异,这些差异的地方就是我们需要改动的地方。

\SDK_2_14_0_MIMXRT1170-EVKB\boards\evkbmimxrt1170\driver_examples\elcdif\rgb\cm7\iar

  这个 elcdif_rgb 例程里没有看到 G1120B0MIPI 身影,因为小分辨率的圆屏不太适合这个 example,其驱动可在 RT595_SDK\boards\evkmimxrt595\vglite_examples 里找到。

2.2 调整屏控制I/O脚(Power_en、Reset、Backlight)

  先来关注硬件上需要注意的改动,RT1170 上 MIPI DSI 这个外设不同于其它外设有很多 pinmux 选项,其就一组固定的引脚(并且是专用的),所以这组引脚我们不需要做任何代码上的配置。

  • Note: DN/P 信号对一共两组,即 RT1170 支持的是 MIPI-DSI 2 lane。

  但是 LCD 屏除了 MIPI DSI 相关信号以及电源、地之外,通常还有三个控制信号,即 Power_en(电源使能-可选)、Reset(硬复位)、Backlight(背光控制),这三个信号一般是通过普通 GPIO 来控制的。

  所以我们需要打开板卡原理图,找到 LCD 相关连接把这三个信号所用的 GPIO 找出来,并在代码里如下地方做相应改动:

  elcdif_rgb 例程会在共享函数 BOARD_InitLcdPanel() 里操作 BOARD_MIPI_PANEL_BL 宏所指向的 GPIO 来打开背光。此外 BOARD_MIPI_PANEL_RST 和 BOARD_MIPI_PANEL_POWER 宏所指向的 GPIO 操作已经被封装在如下函数里,这个函数被进一步封装进 display_handle_t 里供后续驱动灵活使用:

static void PANEL_PullResetPin(bool pullUp);
static void PANEL_PullPowerPin(bool pullUp);

2.3 创建LCD驱动IC源文件

  现在我们需要在如下目录下,创建 ILI9806E 的驱动文件,可以先直接拷贝 hx8394 文件夹下的文件并将其改名后添加进工程,并且在 elcdif_support.c/h 里也复制添加相应代码保证编译通过(后续再参考 ILI9806E 数据手册修改代码)。

\SDK_2_14_0_MIMXRT1170-EVKB\components\video\display

2.4 调整屏上电复位延时(Power_en、Reset)

  有了 fsl_ili9806e.c/h 基本源文件后,现在我们需要根据 ILI9806E 数据手册来修改代码。首先是调整屏上电以及复位延时时间,这个延时一般既可以在 KD050FWFIA019-C019A 屏的数据手册也可以在 ILI9806E 的数据手册里找到。

  有了延时数值之后,在 ILI9806E_Init() 函数里做相应设置即可:

status_t ILI9806E_Init(display_handle_t *handle, const display_config_t *config)
{
    const ili9806e_resource_t *resource = (const ili9806e_resource_t *)(handle->resource);
    /* Only support 480 * 854 */
    if (config->resolution != FSL_VIDEO_RESOLUTION(480, 854))
    {
        return kStatus_InvalidArgument;
    }
    /* Power on. */
    resource->pullPowerPin(true);
    ILI9806E_DelayMs(1U);
    /* 根据屏数据手册调整复位延时时间. */
    resource->pullResetPin(true);
    ILI9806E_DelayMs(10U);
    resource->pullResetPin(false);
    ILI9806E_DelayMs(10U);
    resource->pullResetPin(true);
    ILI9806E_DelayMs(120U);
    
    /* 代码省略 */
}

2.5 调整屏显示相关参数

  现在我们需要在 elcdif_support.h 里根据 KD050FWFIA019-C019A 屏的数据手册修改如下定义包含:屏分辨率、六个行列扫描参数、四个信号极性(APP_POL_FLAGS)、数据位宽,这些都是屏本身的特性。

#if (USE_MIPI_PANEL == MIPI_PANEL_KD050FWFIA019)
#define APP_PANEL_HEIGHT 854
#define APP_PANEL_WIDTH  480
#define APP_HSW          4
#define APP_HFP          18
#define APP_HBP          30
#define APP_VSW          4
#define APP_VFP          20
#define APP_VBP          30
#endif
#define APP_POL_FLAGS \
    (kELCDIF_DataEnableActiveHigh | kELCDIF_VsyncActiveLow | kELCDIF_HsyncActiveLow | kELCDIF_DriveDataOnFallingClkEdge)

#define APP_DATA_BUS       24
#define APP_LCDIF_DATA_BUS kELCDIF_DataBus24Bit

  关于六个行列扫描参数(HSW/HFP/HBP/VSW/VFP/VBP)稍稍科普一下,这些信号是以行列同步信号(VSYNC/HSYNC)为时间起点来做的延时,相当于在实际显示的图像宽高基础上做了外围扩大,从而提高图像有效区域显示的可靠性(实际上是等待面板做好每行数据刷新前的准备工作)。

  分辨率和行列扫描参数均设置正确了之后,别忘了根据想要的刷新率(比如 60Hz)计算得出所需的 pixel clock,在 BOARD_InitLcdifClock() 函数里做相应设置。

void BOARD_InitLcdifClock(void)
{
    /*
     * The pixel clock is (height + VSW + VFP + VBP) * (width + HSW + HFP + HBP) * frame rate.
     * Use PLL_528 as clock source.
     * For 60Hz frame rate, the KD050FWFIA019 pixel clock should be 29MHz.
     */
    const clock_root_config_t lcdifClockConfig = {
        .clockOff = false,
        .mux      = 4, /*!< PLL_528. */
#if (USE_MIPI_PANEL == MIPI_PANEL_RK055AHD091) || (USE_MIPI_PANEL == MIPI_PANEL_RK055MHD091)
        .div = 9,
#elif (USE_MIPI_PANEL == MIPI_PANEL_RK055IQH091)
        .div = 15,
#elif (USE_MIPI_PANEL == MIPI_PANEL_KD050FWFIA019)
        // 我们需要设置 29MHz 的 pixel clock
        .div = 18,
#endif
    };
    CLOCK_SetRootClock(kCLOCK_Root_Lcdif, &lcdifClockConfig);
    mipiDsiDpiClkFreq_Hz = CLOCK_GetRootClockFreq(kCLOCK_Root_Lcdif);
}

2.6 配置LCD驱动芯片

  现在到了最难也是最重要的环节了,KD050FWFIA019-C019A 面板主要是由 ILI9806E 芯片驱动的,ILI9806E 本身是个万能驱动芯片,其支持的接口很多,MIPI DSI 仅是其一,而且 2.5 节里设置的那些关于屏显示相关参数,我们都需要设置进 ILI9806E 内部寄存器里。

  打开 ILI9806E 数据手册(V097版),一共 328 页,寄存器一大堆,我们难道要看着数据手册一个个去设置吗?当然不是!这时候需要打开万能的 github,搜索跟 ili9806e 相关的代码,看看前人有没有调试好的现成代码。

  其实关于屏的支持,Linux 里做得比较多,痞子衡找了个 RaspberryPI 移植的分支,里面有 ili9806e 参数初始化表,注意这个表不一定完全适用 KD050FWFIA019-C019A(因为用 ILI9806E 芯片驱动的面板非常多),我们需要在这个参数表基础之上做一些调整。

https://github.com/raspberrypi/linux/blob/rpi-6.1.y/drivers/gpu/drm/panel/panel-ilitek-ili9806e.c

  把 RaspberryPI 仓库里的参数表移植进我们的 fsl_ili9806e.c 文件里后,粗粗看了一下注释,其配置的是 480x800 的屏,极性设置相关也都和 KD050FWFIA019-C019A 有差异。

  最后我们再对照 ILI9806E 数据手册里的寄存器定义做一些参数上的微调,如下四个寄存器需要重点关注。这些微调做完之后,把代码下载进板卡运行,这时候你应该能看到屏开始正常工作了。

  至此,在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。文章来源地址https://www.toymoban.com/news/detail-777035.html

到了这里,关于痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 痞子衡嵌入式:借助i.MXRT10xx系列INIT_VTOR功能可以缩短程序热重启时间

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 借助i.MXRT10xx系列INIT_VTOR功能可以缩短程序热重启时间 。 最近痞子衡写了篇文章 《i.MXRT从Serial NAND启动时间测量》,这篇文章详细测试了不同长度的 Non-XIP 程序在不同 NAND 访问速度下由 BootROM 加载启动所

    2024年02月14日
    浏览(43)
  • 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 使能i.MXRT1050, 1060 Hab签名或加密启动时App链接在片内SRAM的限制 。 最近有客户反馈,在 RT1060 上测试 Non-XIP 程序启动,如果程序体部分链接进 0x20280000 地址之后的片内 OCRAM 区域(这部分是由 FlexRAM 分配出

    2024年04月12日
    浏览(37)
  • 痞子衡嵌入式:i.MXRT1xxx系列GPIO提早供电会影响上电时序导致内部DCDC启动失败

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 i.MXRT1xxx系列GPIO提早供电会影响上电时序导致内部DCDC启动失败 。 最近有一个 RW612 产品线的同事在设计一个双 MCU 系统 Demo 时发现,当 RW612 板卡和 RT1060 板卡通过 UART 对接时,如果 RW612 板卡提前上电,

    2024年03月27日
    浏览(50)
  • 痞子衡嵌入式:如果i.MXRT1xxx离线无法启动,请先查看SRC_SBMRx寄存器

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 SRC_SBMRx寄存器对于定位i.MXRT1xxx离线无法启动问题的意义 。 最近有一位开源社区大佬在使能 RT1050 BEE 加密过程中遇到无法启动问题,折腾到一度崩溃,甚至想要弃坑。痞子衡哪能让这位“老乡”跑掉,连

    2024年02月19日
    浏览(39)
  • 痞子衡嵌入式:在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 在i.MXRT1xxx系列上用NAND型启动设备时可用两级设计缩短启动时间 。 去年痞子衡写过一篇骚操作文章 《借助i.MXRT10xx系列INIT_VTOR功能可以缩短程序热重启时间》,这对于 NAND 型启动设备上程序热重启时间的

    2024年04月22日
    浏览(64)
  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10.A)- FlexSPI NAND启动时间(RT1170)

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 恩智浦i.MX RT1170 FlexSPI NAND启动时间 。 本篇是 i.MXRT1170 启动时间评测第四弹,前三篇分别给大家评测了 Raw NAND 启动时间(基于 MIMXRT1170-EVK_Rev.B)、Serial NOR 启动时间(基于 MIMXRT1170-EVB_Rev.A2)、1bit SPI NO

    2024年02月15日
    浏览(85)
  • 痞子衡嵌入式:使用恩智浦GUI Guider快速创建全新LCD屏示例工程的步骤

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 使用恩智浦GUI Guider快速创建全新LCD屏示例工程的步骤 。 在痞子衡旧文 《在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤》 里,痞子衡介绍了在官方 SDK 裸机驱动 elcdif 示例工程基础上做修改以支持一

    2024年03月13日
    浏览(49)
  • 《痞子衡嵌入式半月刊》 第 92 期

    这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《痞子衡嵌入式半月刊: 第 91 期》

    2024年02月20日
    浏览(46)
  • 《痞子衡嵌入式半月刊》 第 77 期

    这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《痞子衡嵌入式半月刊: 第 76 期》

    2024年02月08日
    浏览(60)
  • 《痞子衡嵌入式半月刊》 第 98 期

    这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《痞子衡嵌入式半月刊: 第 97 期》

    2024年04月27日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包