i.MX6ULL 裸机开发|GT9147 触控 + SPI 与 ADXL345 加速度传感器驱动

发布时间:2026/10/8 13:10:48

i.MX6ULL 裸机开发|GT9147 触控 + SPI 与 ADXL345 加速度传感器驱动 前言本篇继续 i.MX6ULL 裸机外设驱动学习从电容多点触控芯片 GT9147/GT9151再到 SPI 通信协议、ECSPI 控制器配置、ADXL345 三轴加速度传感器完整驱动覆盖硬件原理、引脚配置、寄存器操作、代码实现与调试踩坑打通 I2C 触控与 SPI 高速外设开发两条链路。一、GT9147/GT9151 多点电容触摸屏驱动1. 触控硬件原理采用电容式触控原理手指触碰屏幕会改变极板间电容芯片检测电压变化计算触摸坐标芯片通过 I2C 和 i.MX6ULL 主控通信最多支持5 点同时触摸。2. 核心引脚功能I2C 引脚I2C2 的 SDA、SCL负责坐标数据交互CTINT触控中断引脚有触摸事件时触发中断通知 SOCCTRST芯片硬件复位引脚通信方式使用中断方式获取触摸数据相比轮询节省 CPU 资源不会丢失触摸事件3. I2C 从机地址配置时序GT9147/GT9151 的 I2C 从机地址由复位、中断引脚的上电时序决定拉低 CTRST、CTINT 保持大于 100us拉高 CTRST保持大于 5ms完成地址配置两种时序对应不同从机地址0x5D、0x14调试读 ID 失败优先核对从机地址4. 芯片识别读取寄存器0x8140的 Product ID判断是 GT9147 还是 GT9151读取出 ID 不对优先排查 I2C 地址、引脚电气配置。5. 中断触发方式与 GPIO 配置中断触发模式寄存器GT9147 读取0x804DGT1158 读取0x8056寄存器低两位代表触发方式00上升沿01下降沿02低电平03高电平本开发板触控芯片为下降沿触发中断引脚 GPIO 配置设置 GPIO 方向为输入引脚配置为开漏模式悬浮输入由触控芯片主动拉低产生中断配置中断控制器 ICR 寄存器为下降沿触发解除 IMR 中断屏蔽位进入坐标读取状态向命令寄存器0x8040写入 0开启触摸检测。6. 中断服务函数处理规范中断服务函数原则短平快禁止耗时操作不要在中断里 printf只更新标志位主循环处理数据。读取状态寄存器0x814E读完必须写 0 清除中断标志否则会持续触发中断寄存器低 4 位获取触摸点数循环读取多点 X/Y 坐标坐标为小端存储低字节在前高低字节拼接得到完整坐标用结构体存储触摸点数、有效标志、最多 5 组触摸点 XY 坐标上层对接驱动拿到坐标后可以供给 LVGL 图形库做控件点击命中检测。二、SPI 通信协议基础1. SPI 特点SPI串行外设接口同步、全双工、串行通信通信速率高起步 1Mbps可达 10Mbps传输效率高于 I2C。四线标准 SPISCLK时钟线主机输出通信节拍MOSI主机输出、从机输入MISO主机输入、从机输出CS/SS片选引脚SPI 无设备地址拉低对应 CS 引脚选中从机其余从机保持静默。2. 时序核心CPOL、CPHACPOL时钟极性总线空闲时 SCLK 电平。0 空闲低电平1 空闲高电平CPHA时钟相位数据采样边沿。0 第一个边沿采样1 第二个边沿采样4 种组合模式必须严格按照传感器手册配置 ECSPI 控制器。3. SPI 读写逻辑SPI 全双工特性主机发数据的同时从机同步回传数据。读从机寄存器时主机发送寄存器地址后需要发送哑字节 (Dummy Byte)用来产生时钟驱动从机返回数据。ADXL345 通过寄存器地址最高 bit 区分读写bit70 为写bit71 为读|0x80。4. ADXL345 三轴加速度传感器简介ADXL345 是三轴加速度计测量 X/Y/Z 三个方向加速度可以检测姿态、震动、自由落体支持量程±2g、±4g、±8g、±16g内置 ADC13 位分辨率开发板使用 ECSPI3 总线通信。三、i.MX6ULL ECSPI 增强 SPI 控制器原理与寄存器配置1. ECSPI 硬件架构ECSPI 自带 TX、RX FIFO 收发队列移位寄存器完成串行收发全双工传输。对比 I2CSPI 不需要 ACK 应答、启停信号协议简单传输速度更快。模块时钟独立本例模块时钟 60MHz经过两级分频得到最终 SPI 总线时钟。2. 关键寄存器配置CONREG 控制寄存器BURST_LENGTH单次传输比特长度8 位数据设置为 7PRE_DIVIDER、POST_DIVIDER两级分频把模块时钟降到目标 SPI 时钟例 1MHzCHANNEL_MODE设置为主机模式SMC置 1写入 TX FIFO 后自动启动 SPI 通信CONFIGREG 配置寄存器SCLKCTL配置 CPOL、CPHA本实验 CPOL1CPHA1片选方案不使用硬件自动片选CS 引脚复用为 GPIO软件手动拉高 / 拉低。3. 代码配置要点引脚复用SCLK/MOSI/MISO 配置为 ECSPI3 外设功能CS 引脚复用 GPIO 输出默认高电平。高速通信开启高压摆率 SRE1让信号边沿更陡减少波形失真。收发流程写 STAT 状态寄存器轮询 TXF发送 FIFO 空再写入数据等待 RXF 置位读取 RXDATA 接收数据。SPI 天然全双工一套底层接口同时支持收发。四、ADXL345 驱动完整实现与调试1. SPI 读写接口封装ADXL345_Read拉低 CS发送带读标记的寄存器地址addr | 0x80发送哑字节读取数据读完拉高 CSADXL345_Write拉低 CS直接发送寄存器地址最高位 0 待写入数据通信结束拉高 CS2. 硬件接线VCC →3.3VGND→GNDCSGPIO1_20SDOMISO、SDIMOSI、SCLK 接到 ECSPI3 对应引脚调试第一步读取 ID 寄存器0x00正确返回0xE5代表 SPI 通信正常读取失败优先检查接线、CS 时序。3. ADXL345 寄存器初始化配置0x2E INT_ENABLE0x00 关闭中断 / 0x08 开启指定中断0x31 DATA_FORMAT写入 0x0B开启全分辨率量程 ±16g0x2C BW_RATE0x08配置输出速率正常工作模式0x2D POWER_CTL0x08开启测量模式传感器开始采集加速度4. 多轴数据读取与显示连续读取寄存器0x32 ~ 0x37依次是 X、Y、Z 轴低字节、高字节数据拼接(high_byte 8) | low_byte存为 16 位有符号 short 类型主循环持续读取 XYZ 三轴加速度输出到 LCD 屏幕转动传感器观察数值随姿态变化验证驱动。总结GT9147 电容触控基于 I2C 中断重点掌握 I2C 从机地址时序、中断服务函数规范、小端坐标数据拼接中断内只更新标志主循环处理业务。SPI 是高速全双工串行总线依靠 CS 片选选中设备CPOL/CPHA 时序必须严格匹配外设手册全双工带来哑字节读取的特殊写法。ECSPI 控制器通过两级分频设置波特率FIFO 队列收发软件 GPIO 控制 CS 是裸机常用方案。ADXL345 三轴加速度传感器驱动流程硬件接线→ID 校验→寄存器初始化→SPI 读取三轴原始数据最后可以把姿态数据送到 LCD 显示。
延伸阅读

更多相关文章

2026/10/8 13:10:48

免费二级域名 + API 管理:一个开发者的小工具实践

做 Demo、临时测试、个人项目的时候,经常需要一个能公网访问的域名。买一个吧,一年几十块,用几天就闲置;用内网穿透吧,每次重启地址就变,分享出去别人还得重新问。我把自己用的一个方案整理出来&#xff1a…

2026/10/8 13:55:55

医药管理系统源码拆包:从class反编译到MySQL落库的完整链路

简介:这是一套基于Java Web技术栈的医药管理系统源码,面向计算机专业学生、课程设计开发者及需要练手SSM/JSP项目的初学者,可帮助快速搭建药品进销存管理场景。系统覆盖药品添加与查看、高级查询、库存管理、类别维护与统计、购买药品、销售管…

2026/10/8 13:55:55

商用热水系统远程监控系统实战指南

1. 这不是“远程看个温度”,而是商用热水系统真正的神经中枢商用热水工程远程监控系统,这个词组里藏着三个关键角色:商用、热水工程、远程监控。它不是给自家热水器装个APP那么简单,而是面向酒店、学校、医院、工厂这类24小时不间…

2026/10/8 13:55:55

10个免费离线开发工具清单:从DevToys到DBeaver提升日常效率

做开发这些年,真正让我觉得“好用得不敢发朋友圈”的工具,往往不是发布会宣传得满天飞的东西,而是藏在 GitHub 某个角落、只在同事群里小声流传的小玩意儿。这篇要说的 10 个工具,基本都符合一个特点:免费、可离线使用…

2026/10/8 13:55:55

Git实战笔记:三大区域模型与高频命令,告别记不住

很多人学Git,其实是卡在“命令太多记不住”这个坎上。我自己刚开始也是这样,每天打开终端就对着一个git help发呆,今天提交忘了加文件、明天分支合并变出一堆冲突,最后干脆回到老办法:把代码压缩包改名加日期。直到后来…

2026/10/8 13:50:54

Qt+C++模拟经营游戏源码:毕设级实战项目解析

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

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑