尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
i.MX6ULL LCD 驱动开发实战:从引脚到时钟的完整配置
一、前言最近在调试 i.MX6ULL 的 RGB LCD 驱动从最基础的引脚复用开始一步步配到时钟和 eLCDIF 寄存器。整个过程踩了不少坑也把 IOMUXC 和 CCM 的机制搞清楚了。这篇文章把整个流程整理出来希望能帮到同样在调试 LCD 的朋友。二、整体流程LCD 驱动初始化分四大步第 1 步引脚复用 电气特性IOMUXC✅第 2 步PCLK 时钟配置CCM✅第 3 步eLCDIF 寄存器配置⬜第 4 步刷屏 / 图形库⬜本文重点讲前两步。三、第一步引脚复用 电气特性3.1 要配哪些引脚RGB888 接口的引脚是固定的类别引脚数量数据线LCD_DATA00 ~ LCD_DATA2324控制线LCD_CLK / LCD_ENABLE / LCD_HSYNC / LCD_VSYNC4背光GPIO1_IO081合计29 个引脚。3.2 怎么从原理图找到 Pad 名看开发板原理图左边一列是芯片 Pad 名右边框是板级网络名Pad 名芯片网络名板子用途LCD_DATA00LCD1_DATA00数据 bit0.........LCD_DATA23LCD1_DATA23数据 bit23LCD_CLKLCD1_CLK像素时钟LCD_ENABLELCD1_ENABLE数据使能 DELCD_HSYNCLCD1_HSYNC水平同步LCD_VSYNCLCD1_VSYNC垂直同步GPIO1_IO08LCD_BL背光3.3 在头文件里找宏在fsl_iomuxc.h里搜 Pad 名找到对应功能的宏。宏名结构IOMUXC_Pad名_功能名比如IOMUXC_LCD_DATA00_LCDIF_DATA00 // Pad LCD_DATA00 复用为 LCDIF_DATA00 IOMUXC_GPIO1_IO08_GPIO1_IO08 // Pad GPIO1_IO08 复用为 GPIO宏展开后是5 个值#define IOMUXC_LCD_DATA00_LCDIF_DATA00 0x020E0118U, 0x0U, 0x00000000U, 0x0U, 0x020E03A4U顺序值含义10x020E0118SW_MUX_CTL 地址20x0UMUX_MODEALT 编号30x00000000输入选择寄存器40x0U输入 daisy50x020E03A4SW_PAD_CTL 地址3.4 引脚复用SW_MUX_CTL寄存器位域位名称含义4SION软件输入使能3:0MUX_MODE复用模式ALT 编号代码IOMUXC_SetPinMux(IOMUXC_LCD_DATA00_LCDIF_DATA00, 0);宏里的0x0U MUX_MODE 0 ALT0第二个参数0 SION 位不是 ALT注意第二个参数传 0 是 SION 位ALT 藏在宏里。3.5 电气特性SW_PAD_CTL寄存器位域位名称含义7:6SPEED速度5:3DSE驱动强度12PKE保持器使能13PUE上下拉/保持器选择15:14PUS上下拉选择0SRE压摆率0xB9 的含义0xB9 1011 1001b位名称值含义7:6SPEED10中等速度100MHz5:3DSE111最大驱动R0/70SRE1快速压摆率代码IOMUXC_SetPinConfig(IOMUXC_LCD_DATA00_LCDIF_DATA00, 0xB9);3.6 背光 GPIO 配置背光是独立 GPIO除了 IOMUXC 还要配 GPIO 模块// 1. 引脚复用配成 GPIOALT5 IOMUXC_SetPinMux(IOMUXC_GPIO1_IO08_GPIO1_IO08, 0); // 2. 电气特性 IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO08_GPIO1_IO08, 0xB9); // 3. 方向输出1输出0输入 GPIO1-GDIR | (1 8); // 4. 电平高背光亮 GPIO1-DR | (1 8);GDIR 和 DR 是 GPIO 模块的寄存器寄存器偏移GPIO1 地址作用DR0x000x0209C000数据电平GDIR0x040x0209C004方向0输入1输出四、第二步PCLK 时钟配置4.1 时钟路径24MHz 晶振 ↓ PLL5 (PLL_VIDEO) → 744MHz ↓ VIDEO_DIV → 744MHz ↓ LCDIF1_PRE_CLK_SEL → 选 PLL5 ↓ LCDIF1_PRED → ÷4 186MHz ↓ LCDIF1_PODF → ÷6 31MHz ↓ PCLK4.2 PCLK 目标频率怎么算PCLK 刷新率 × (HFP HSPW HBP width) × (VFP VSPW VBP height)代入 800×48060Hz 的参数PCLK 60 × (40 48 88 800) × (13 3 32 480) 60 × 976 × 528 ≈ 30.9 MHz ≈ 31MHz4.3 PLL5 配置PLL 公式PLL 输出 参考时钟 × (DIV_SELECT NUM/DENOM)目标 744MHz744MHz 24MHz × 31所以 DIV_SELECT 31NUM 0DENOM 1。代码// 关闭小数分频 CCM_ANALOG-PLL_VIDEO_NUM 0; CCM_ANALOG-PLL_VIDEO_DENOM 1; // 选择 24MHz 参考时钟 unsigned int r CCM_ANALOG-PLL_VIDEO; r ~(3 19); r | (2 19); // DIV_SELECT 31 r ~(0x7F 0); r | (31 0); CCM_ANALOG-PLL_VIDEO r; // 使能 PLL CCM_ANALOG-PLL_VIDEO | (1 13);4.4 VIDEO_DIVCCM_ANALOG-MISC2 ~(3 30); // VIDEO_DIV 0分频 14.5 LCDIF 时钟树cr CCM-CSCDR2; r | (2 15); // LCDIF1_PRE_CLK_SEL 2选 PLL5 r ~(7 12); r | (3 12); // LCDIF1_PRED 3÷4 r ~(7 9); // LCDIF1_CLK_SEL 0选 PRED 后 CCM-CSCDR2 r; CCM-CBCMR ~(7 23); CCM-CBCMR | (5 23); // LCDIF1_PODF 5÷64.6 完整计算24MHz × 31 744MHz PLL5 744MHz / 1 744MHz VIDEO_DIV 744MHz / 4 186MHz PRED 186MHz / 6 31MHz PODF最终 PCLK 31MHz ✅五、踩过的坑坑 1HSYNC/VSYNC 宏名拼写错误IOMUXC_LCD_HSYNS_LCDIF_HSYNC // ❌ 多了一个 S IOMUXC_LCD_HSYNC_LCDIF_HSYNC // ✅ 正确坑 2以为第二个参数是 ALTIOMUXC_SetPinMux(IOMUXC_LCD_DATA00_LCDIF_DATA00, 0);这里的0是SION 位不是 ALT。ALT 藏在宏里。坑 3GDIR 的 0/1 记反i.MX6ULL 手册明确写0 INPUT输入1 OUTPUT输出坑 4PLL 锁定等待被注释//while ((CCM_ANALOG-PLL_VIDEO (1 31)) 0);建议恢复否则 PLL 没稳定就继续配置可能出错。
RELATED

相关推荐

企微开发API如何保证群发内容可追溯?WeComApi 的内容哈希、素材版本与发送快照设计

企微开发API如何保证群发内容可追溯?WeComApi 的内容哈希、素材版本与发送快照设计

官网友情链接: wecomapi.com 企微外部群群发任务中,大多数团队都会保存: 群发文案; 素材; 目标群; 执行结果。 看起来已经足够。 但真正发生客户投诉或历史复盘时,会出现一个很实际的问题&…

📅 2026/9/28 21:03:04
企业微信二次开发API如何建设回调死信队列?WeComApi 事件多次失败后的兜底设计

企业微信二次开发API如何建设回调死信队列?WeComApi 事件多次失败后的兜底设计

官网友情链接: wecomapi.com 企微二次开发中,只要系统依赖回调事件,就一定会遇到处理失败。 客户新增事件可能失败。 群成员事件可能失败。 标签同步可能失败。 消息任务可能失败。 大多数系统已经会做自动重试,比如失败后重试…

📅 2026/9/28 21:03:04
JavaWeb云盘项目实战:Servlet+Tomcat+MySQL部署与源码避坑指南

JavaWeb云盘项目实战:Servlet+Tomcat+MySQL部署与源码避坑指南

简介:这是一套基于 Java Web 技术仿照百度网盘实现的小型云盘系统源码,主要面向 Java Web 初学者以及需要快速搭建个人或小团队在线存储场景的开发者。项目采用经典分层结构,将控制层、业务逻辑层、数据访问层、数据模型与视图模板清晰分离&a…

📅 2026/9/28 21:03:04
MORE NEWS

更多资讯

📰

Simulink查表插值方法性能与工程选型实战指南

1. 为什么在Simulink里选错插值方法,模型跑得再快也是假快?我在做新能源储能系统仿真时,曾把一个原本20ms步长就能稳住的SOC查表模块,硬生生拖慢到85ms才收敛——不是CPU不行,不是算法不对,而是n-D Lookup …

📰

基于harness-sdk的多智能体编排:从流水线设计到生产落地

搞编排型智能体的这几个月,我几乎把市面上叫得出名字的框架都试了一遍,最后留在生产环境里的,反而是这个一开始没太当回事的harness-sdk。如果你也在做多智能体编排,或者正在把单个模型能力往“能跑流程、能调工具、能协作”的方向…

📰

从零构建应用链:Substrate区块链框架核心解析与实操指南

最近搜“substrate”的人明显变多了。这个词在不同领域含义不同,化学里是底物,材料里是基材,但在区块链开发圈,大家搜的通常是Parity出品的开源区块链构建框架——Substrate。我最早接触它,是想搭一条独立应用链&#…

📰

Mongoose C++多线程避坑指南:连接生命周期与线程安全实战

1. 这不是教科书里的多线程——Mongoose在C实战中真正咬人的地方如果你正在用Mongoose写一个带HTTP服务的C后台程序,刚加上std::thread就出现core dump、请求随机丢失、内存泄漏悄无声息地涨到2GB、或者更诡异的——服务跑着跑着突然所有连接都卡死在ESTABLISHED状态…

📰

LangChain+ChatGLM-6B本地知识库问答实战:RAG全流程与避坑指南

简介:这是一份面向AI开发者的本地知识库问答系统实践项目包,基于LangChain框架并结合ChatGLM-6B等系列大语言模型,实现针对私有文档的自动问答。资源共75个文件,压缩包约17.77MB,主要包含Python脚本、模型缓存与嵌入配…

📰

MSPM0G3507 LaunchPad引脚与跳线配置实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬