news 2026/10/1 15:30:19

IMX6ULL裸机|SPI、LCD、PWM脉冲调制、电容触控屏学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IMX6ULL裸机|SPI、LCD、PWM脉冲调制、电容触控屏学习笔记

📝摘要:本文完整梳理IMX6ULL裸机外设知识点:SPI串行外设接口、CPOL/CPHA四种模式;UART/I2C/SPI总线横向对比;ADXL345三轴加速度计;LCD液晶显示原理、像素格式、显存与时序信号;PWM脉冲宽度调制原理、周期/占空比;GT9147/GT1158电容多点触控屏硬件、I2C驱动流程;附带计算公式、代码片段。
🔖标签:#SPI#LCD#PWM#电容触控屏#IMX6ULL裸机开发


1. SPI总线协议基础

SPI(Serial Peripheral Interface)串行外设接口,同步全双工串行通信。
SPI四根硬件信号线:

信号含义方向
SCLKSerial Clock 串行时钟主机输出,产生通信时钟
MOSIMaster‑Out Slave‑In 主机输出,从机输入主机→从机
MISOMaster‑In Slave‑Out 主机输入,从机输出从机→主机
CS/SSChip Select 片选信号主机输出,选中某一个从机设备

SPI特点:高位先行(MSB优先),先传输bit7,最后bit0;写即是读,读即是写。
同步通信:所有比特由主机SCLK时钟同步,不需要双方协商波特率。
拓扑:一主多从架构;多个从机使用独立CS片选线,同一时刻只能选中一个从机。
通信速率范围:1MHz ~ 上百MHz,速度远高于I2C。

IMX6ULL主机可以对SPI外设分频,例如系统时钟60MHz,分频得到1MHz SPI时钟输出。

SPI硬件内部有移位寄存器 shift register;发送和接收同步移位;发送一个bit的同时就会收到一个bit。
TXFIFO发送缓冲区、RXFIFO接收缓冲区,用于缓存数据,降低CPU占用。

2. CPOL时钟极性、CPHA时钟相位、四种SPI模式

两个核心参数CPOL、CPHA,组合得到4种SPI工作模式。

CPOL Clock Polarity 时钟极性

决定总线空闲状态时SCLK电平

  • CPOL=0:空闲时 SCLK 为低电平
  • CPOL=1:空闲时 SCLK 为高电平

CPHA Clock Phase 时钟相位

决定在哪一个时钟边沿进行数据采样

  • CPHA=0:第一个时钟边沿采样数据
  • CPHA=1:第二个时钟边沿采样数据

SPI四种模式汇总表

模式CPOLCPHA空闲SCLK电平采样边沿典型器件
Mode000低电平SCLK上升沿采样ADXL345、OLED
Mode101低电平SCLK下降沿采样
Mode210高电平SCLK下降沿采样
Mode311高电平SCLK上升沿采样

⚠️主机和从机SPI模式必须完全一致,否则通信乱码。

3. UART / I2C / SPI三大串行总线横向对比

对比项UARTI2CSPI
通信模式异步、串行、全双工同步、串行、半双工同步、串行、全双工
信号线2根:TXD、RXD2根:SCL、SDA4根:SCLK、MOSI、MISO、CS
速率<5MHz100KHz ~ 3.4MHz1MHz ~ 100MHz
设备拓扑点对点多主多从一主多从,独立片选CS
比特顺序低位先行高位先行高位先行
同步方式波特率,无时钟线SCL同步时钟SCLK同步时钟

4. SPI读写特性、FIFO、Dummy占位字节

SPI“写即是读”:只要主机输出SCLK时钟,MOSI往外发数据的同时,MISO就会同步接收从机的数据。

  1. SPI写操作流程
    主机发送寄存器地址 → 主机发送要写入的数据;SCLK持续输出时钟,MISO返回无效数据直接丢弃。

  2. SPI读操作流程
    SPI读不能单纯只接收,必须发送Dummy占位字节(一般0xFF或0x00)用来产生SCLK时钟。

流程:主机发送寄存器地址 → 发送Dummy占位字节产生时钟,此时MISO线上得到从机返回有效数据。

伪代码软件SPI发送接收示例:

//SPI发送1字节,同时返回读到的1字节unsignedcharspi_rw_byte(unsignedchardat){unsignedchari,ret=0;for(i=0;i<8;i++){//输出MOSI数据MOSI=(dat&0x80)?1:0;dat<<=1;SCLK=1;//时钟边沿ret<<=1;if(MISO)ret|=0x01;//读取MISOSCLK=0;}returnret;}

5. SPI实战器件 ADXL345三轴加速度计

ADXL345是SPI接口三轴加速度传感器

  • 分辨率:13bit;数值范围:0 ~ 2^13‑1 = 8191
  • 硬件量程:可配置 ±16g
  • 灵敏度系数:1g对应 32g / 8191 ≈ 0.0039g/LSB

换算公式:
加速度(g)=原始采样值×0.0039加速度(g) = 原始采样值 × 0.0039加速度(g)=原始采样值×0.0039

示例:

x轴采样值=123 → ax = 123 * 0.0039 g y轴采样值=200 → ay = 200 * 0.0039 g z轴采样值=300 → az = 300 * 0.0039 g

g为重力加速度,1g = 9.8m/s²。

6. LCD液晶屏幕基础概念

分辨率

格式:横向像素 × 纵向像素。

  • 800 × 480:横向800个像素点,纵向480个像素点;
  • 1920 ×1080:1080P高清;
  • 2560 ×1440:2K分辨率。

屏幕物理尺寸

单位英寸 inch,1英寸 =2.54 cm;代表屏幕对角线长度。

规律:

  1. 分辨率相同,屏幕尺寸越小 → PPI像素密度越高,画面越细腻清晰;
  2. 屏幕尺寸相同,分辨率越高 → 画面越细腻清晰。

刷新率

单位HZ,代表每秒钟刷新多少帧完整图像,常见60HZ。

显存FrameBuffer

专门用来存放一帧图像像素数据的内存空间,LCD控制器会不断读取显存数据输出到屏幕。

示例:800*480屏幕,每个像素4字节ARGB
显存大小 =800 * 480 *4 = 1536000 Byte ≈1.5MB
IMX6ULL DDR地址范围0x80000000 ~ 0xA0000000,显存开辟在DDR内存区域。

7. 像素颜色格式:RGB888 / RGB565 / ARGB

格式每个像素占用字节RGB说明
RGB5652字节R(5bit)G(6bit)B(5bit)16bit,嵌入式LCD最常用,节省显存
RGB8883字节R(8bit)G(8bit)B(8bit)24bit,1670万色彩
ARGB88884字节A(Alpha透明度8bit)R(8bit)G(8bit)B(8bit)
RGB1010104字节R(10bit)G(10bit)B(10bit)高色深,视频剪辑专业面板

Alpha:透明度通道;0完全透明,255完全不透明。

8. 显存与像素点内存映射计算

假设显存起始地址:0x89000000;分辨率800×480,32bit ARGB格式。

  • x:横坐标(列,0~799)
  • y:纵坐标(行,0~479)

像素内存地址计算公式:

像素地址 = 显存基地址 + 4 * ( 800 * y + x )

C语言指针访问示例:

//显存起始地址,ARGB每个像素4字节unsignedint*fb=(unsignedint*)0x89000000;//向坐标(x,y)像素点写入颜色0x00FF0000(红色)fb[800*y+x]=0x00FF0000;

fb是unsigned int指针,指针自增自动偏移4字节,不需要手动×4。

9. LCD时序控制信号 PCLK、HSYNC、VSYNC、DE

信号全称功能说明
PCLKPixel Clock 像素时钟每个PCLK周期输出1个像素点数据
HSYNCHorizontal Sync 行同步信号同步每一行图像;标志一行的开始
VSYNCVertical Sync 帧同步信号同步整帧图像;标志一帧画面开始
DEData Enable 数据使能高电平代表当前传输的数据是有效像素

LCD控制器按照时序输出,DE有效期间输出RGB像素数据。

10. IMX6ULL LCD裸机配置步骤

  1. IOMUXC配置引脚复用功能,配置引脚电气属性;
  2. 配置LCD外设时钟(典型31MHZ);
  3. 配置LCD控制器寄存器:分辨率、时序参数、显存起始地址;
  4. 开启LCD控制器,屏幕输出图像。

11. PWM脉冲宽度调制原理

PWM(Pulse‑Width Modulation)脉冲宽度调制,利用计数器输出周期性方波;广泛用于LED亮度调节、电机调速、蜂鸣器。

关键概念:

  1. PWM周期:一次完整方波循环占用时间;例如PWM频率1KHz,周期 =1ms。
  2. 占空比:一个周期内高电平时间占整个周期的百分比,例如50%占空比。
  3. 内部计数器:计数器从0向上计数,计数到达比较采样点触发电平翻转;计数到达**回滚点(周期值)**计数器清零重新计数。

示例:计数器时钟源1MHz,计数器每加1代表1us。

简单伪代码逻辑:

//周期回滚值 1000 → 周期1ms,频率1KHzuint16_tperiod=1000;uint16_tcompare_val=500;//比较点,占空比50%

12. PWM寄存器:周期寄存器、比较采样寄存器、引脚极性

  1. 周期寄存器:设置计数器回滚点,决定PWM输出周期、输出频率。
  2. 采样/比较寄存器:设置比较点,决定占空比。
  3. 引脚极性配置:决定引脚默认电平,会改变占空比效果
    • 引脚默认高电平:比较寄存器数值越大 → 高电平时间越长,占空比越大。
    • 引脚默认低电平:比较寄存器数值越大 → 高电平时间越短,占空比越小。

PWM硬件内部自带FIFO,可以存放多组比较值,支持输出复杂波形。

13. 触控屏分类:电阻屏、电容屏

  1. 电阻触控屏:依靠压力按压,需要做屏幕校准;支持硬物、手写笔按压;不支持多点触控。
  2. 电容触控屏:感应人体感应电荷,手指触摸生效,不需要按压;支持多点触控。

开发板常用电容触控芯片:

  • GT1158:I2C设备地址0x14
  • GT9147:I2C设备地址0x5D,最多支持5点多点触控;读取寄存器可以获取触摸点数、X/Y坐标。

14. GT9147电容多点触控I2C裸机驱动完整流程

GT9147使用I2C总线和IMX6ULL通信,有RST复位引脚、INT中断引脚。完整执行步骤:

  1. IOMUXC配置:配置RST复位引脚、INT中断引脚复用功能与电气属性;
  2. 操作RST引脚,对触控芯片执行硬件复位;
  3. 初始化I2C控制器;
  4. 封装gt9147_read()、gt9147_write()I2C读写函数;
  5. 读取芯片ID寄存器0x8140,确认芯片通信正常;
  6. 配置INT引脚中断触发方式(下降沿触发);
  7. GIC配置:注册GT9147中断服务函数、设置中断优先级、使能GIC该路中断;
  8. 使能内核INT引脚对应的外设中断;
  9. 发生触摸触发INT中断,进入中断服务函数:
    • 判断实际按下的触摸点数;
    • 读取坐标寄存器0x8158 ~ 0x815B,获取多点触摸X、Y坐标;
  10. 清除中断标志位,退出中断。

寄存器说明:0x804D、0x8056用来配置INT中断触发方式。

//伪代码,读取GT9147芯片IDunsignedcharid_buf[4];gt9147_read(0x8140,id_buf,4);

15. 英文缩写全称对照表

缩写英文全称中文释义
SPISerial Peripheral Interface串行外设接口
SCLKSerial ClockSPI串行时钟
MOSIMaster‑Out Slave‑In主机输出从机输入信号线
MISOMaster‑In Slave‑Out主机输入从机输出信号线
CSChip Select片选信号
CPOLClock Polarity时钟极性
CPHAClock Phase时钟相位
FIFOFirst‑In First‑Out先进先出缓冲区
DummyDummy Byte占位虚字节
ADXL345Analog‑Devices Accelerometer 345三轴加速度传感器型号
ggravity重力加速度单位
LCDLiquid Crystal Display液晶显示器
PCLKPixel Clock像素时钟
HSYNCHorizontal Sync行同步信号
VSYNCVertical Sync帧/垂直同步信号
DEData Enable数据使能信号
RGBRed Green Blue红绿蓝三原色
ARGBAlpha Red Green Blue带透明度的RGB像素格式
fbFrame Buffer帧缓存(显存)
HZHertz赫兹,频率单位
PWMPulse‑Width Modulation脉冲宽度调制
INTInterrupt中断引脚
RSTReset硬件复位引脚

💡复习小结

  1. SPI同步全双工,写即是读;读从机必须发送Dummy字节来产生SCLK时钟;CPOL、CPHA主机从机模式必须匹配。
  2. SPI对比I2C:SPI速度更高;I2C支持多主,SPI一主多从,每个从机需要独立CS片选。
  3. ADXL345加速度:原始值 ×0.0039得到g单位加速度。
  4. LCD显存:fb[y*宽 + x]定位像素;RGB565节省内存,RGB888色彩丰富;PCLK输出像素,HSYNC行同步,VSYNC帧同步,DE有效表示像素数据有效。
  5. PWM由周期寄存器、比较寄存器决定频率与占空比;引脚极性会改变占空比逻辑。
  6. GT9147电容触控使用I2C通信,依靠INT引脚中断上报触摸事件;先硬件复位,再读取ID,中断回调读取多点坐标。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 15:30:01

厘米级定位技术原理拆解:从载波相位测量到 PPP-RTK 的演进

面向做定位 / 导航 / 时空服务的工程同学。本文梳理伪距与载波相位两类观测量的物理特性、整周模糊度固定的算法机理、RTK / PPP / PPP-RTK 三条路线的差异、误差预算与系统性消减手段&#xff0c;以及低轨增强与 AI 带来的新变量。关键词&#xff1a;载波相位、整周模糊度、PP…

作者头像 李华
网站建设 2026/10/1 15:29:44

AI搜索答案层竞争:GEO如何重塑企业内容供给逻辑

一、多模态AI搜索的四个常见问题随着豆包、文心一言、DeepSeek等国产大模型逐步成为用户获取信息的入口&#xff0c;多模态AI搜索正从单纯的文本问答向图文、视频、结构化数据混合呈现演进。这一变化给企业内容供给带来四个现实问题。第一&#xff0c;用户提问方式变了&#xf…

作者头像 李华
网站建设 2026/10/1 15:29:41

HRTOS 高速任务与中断嵌套的 8051 寄存器组资源说明

在 8051 架构上实现实时操作系统&#xff0c;与在 ARM、RISC-V 等处理器上实现 RTOS 有一个比较明显的区别&#xff1a;8051 的硬件资源非常有限。其中&#xff0c;8051 内部的 4 组工作寄存器&#xff08;Register Bank&#xff09;就是 HRTOS 进行任务切换和中断处理时需要重…

作者头像 李华
网站建设 2026/10/1 15:29:38

为什么服务器需要监控?

为什么服务器需要监控&#xff1f; 服务器上线以后&#xff0c;是不是就不用管了&#xff1f; 其实并不是。 服务器长期运行过程中&#xff0c;可能出现CPU过高、内存不足、磁盘空间不足、网络异常等情况。 如果没有监控&#xff0c;很多问题可能直到用户反馈之后才被发现。 服…

作者头像 李华
网站建设 2026/10/1 15:28:10

多设备文件同步实战:从工具选型到Syncthing配置全解析

我面前摆着三台电脑&#xff1a;工作室的台式机、客厅的笔记本、还有一台常驻背包里的轻薄本。过去很长一段时间,我的日常是这样&#xff1a;在台式机上改完方案,把文件传到网盘,再在笔记本上重新下载&#xff1b;后来懒得传了,直接U盘拷贝&#xff1b;再后来U盘忘带,人到了会议…

作者头像 李华
网站建设 2026/10/1 15:28:05

图纸防泄密怎么做?制造业专属加密软件选型全解析

制造业的图纸管理&#xff0c;和普通写字楼办公不是一回事。车间、研发、采购、外协连成一条链&#xff0c;图纸在链上不停流动。一张总装图&#xff0c;牵动设计、工艺、采购、外协厂、驻场工程师。任何一环脱手&#xff0c;图就可能流出去。对制造企业来说&#xff0c;图纸外…

作者头像 李华