新闻详情

新闻详情

首页 / 资讯中心 / 详情

i.MX6ULL 裸机开发|I2C(2)

发布时间:2026/9/28 21:05:53来源:尧图网络
i.MX6ULL 裸机开发|I2C(2)
I2C 作为嵌入式里最常用的同步串行总线前面我们掌握了基础时序、AT24C02 简单读写本节课继续深入 I2C 底层读取逻辑、代码封装优化、跨页写处理并且新增 LM75 温度传感器驱动与 ARM FPU 浮点单元相关知识点打通 I2C 从底层时序到工程化驱动的完整链路。一、I2C 总线底层原理与读取操作实现1. 物理层核心线与特性 开漏输出线与特性I2C 总线 SDA、SCL 具备线与特性总线上任意一个设备拉低总线总线就为低电平只有所有设备全部释放总线变为高阻态依靠外部上拉电阻总线才会变成高电平。这也是 I2C 支持多设备挂载的基础。开漏输出I2C 的通信引脚必须配置成开漏模式不能直接推挽输出。开漏模式输出高时引脚为高阻配合外部上拉电阻供电能够避免不同电压域芯片通信时出现电流倒灌防止芯片烧毁。2. I2C 标准通信时序规范起始 / 停止信号SCL 为高电平期间SDA 由高变低为 Start 起始信号SCL 高电平SDA 由低变高为 Stop 停止信号。数据采样规则SCL 低电平阶段才允许修改 SDA 电平SCL 高电平阶段SDA 电平必须保持稳定主机采样数据。ACK/NACK 应答每传输完 8bit 数据跟随 1bit 应答位。ACK低电平代表接收正常继续传输NACK高电平代表传输结束。3. I2C 读操作核心难点重复起始、伪读重复起始Restart读取从机寄存器数据时先发寄存器地址之后不发送停止信号发送 Restart 信号重新发送带读标志位的从机地址切换传输方向。伪读读取寄存器时第一次读操作是伪读作用是触发硬件产生时钟脉冲启动后续真实数据接收。时钟由主机完全控制主机输出 SCL 时钟脉冲从机跟随时钟输出数据。4. 多字节读取应答处理陷阱读取多字节数据时要在接收倒数第二个字节之前提前配置 NACK保证收到最后一字节后回复 NACK终止通信。同时注意时序风险读完最后一字节立刻发送 Stop有可能 SCL 还没有回到高电平造成停止信号识别失败总线异常最好借助逻辑分析仪抓取波形调试验证。二、I2C 驱动代码调试、Bug 修复与模块化封装1. 接收逻辑经典 Bug 与修复故障现象读取多字节时最后一组数据无法存入缓冲区。根源是提前设置 NACK还没读取数据就判定结束丢失最后字节。修复思路先读取数据存入缓冲区再判断是否发送 NACK总线保护读取最后一字节前切换回发送模式避免多余时钟脉冲防止总线死锁。2. 寄存器地址兼容性优化原生代码只支持单字节寄存器地址无法适配地址超过 255 的器件如 AT24C08。优化方案将寄存器地址变量改为uint16_t增加地址长度参数高位先发同时兼容 1 字节、2 字节寄存器地址的外设。3. 遵循开闭原则封装统一 I2C 传输接口定义IIC_Message结构体整合从机地址、寄存器地址、数据缓冲区、读写方向等参数简化函数传参。对外封装IIC_Transfer统一接口根据消息结构体里的读写标志自动调用底层读 / 写函数底层驱动和上层应用代码分离符合 OCP 开闭原则后续新增外设无需大量修改底层 I2C 代码。4. AT24C02 页写限制处理AT24C02 每页仅 8 字节跨页直接写入会发生数据回绕覆盖。处理逻辑放在 AT24C02 应用驱动中循环判断地址是否跨页地址对 8 取余分页分次调用底层 I2C 写入接口。三、I2C 跨页写入、LM75 温度传感器与 ARM FPU 浮点单元1. I2C 页写入完整逻辑大批量写数据时循环判断地址是否跨页面边界未跨页继续写入即将跨页写完当前页面剩余数据增加延时如 5ms。重点EEPROM 内部烧录需要时间底层通用 I2C 接口不会自带等待必须在器件驱动层手动增加写入等待延时等待存储完成再发起下一次 I2C 通信。循环结束后检查是否还有剩余数据单独发送收尾数据。2. NACK 应答时序坑点复盘多字节读取倒数第二个字节接收完成后主机发送 NACK。如果模式切换时机错误I2C 收发模式没有提前切换会造成 SCL 电平异常出现偶发读取失败。建议在读取最后一个字节前提前切换工作模式避免多余时钟脉冲干扰。3. LM75 温度传感器驱动开发LM75 是 I2C 接口数字温度传感器供电范围 2.7~5.5V。硬件地址A0/A1/A2 引脚全部接地时7 位从机地址为1001000读写位追加在最低位。数据解析温度原始数据占 16bit高字节优先。将高字节左移 8 位和低字节合并得到原始数值LM75 最低位 LSB 0.5℃实际温度 原始数值 / 2。注意Cortex‑A7 裸机默认没有开启 FPU直接浮点运算会触发未定义指令异常程序卡死。4. ARM 内核 FPU 浮点运算单元启用异常原因代码直接写浮点运算但 FPU 未开启内核识别不了浮点指令触发未定义指令异常。开启方式在启动汇编代码里操作 CP10、CP11 协处理器配置 FPEXC 寄存器开启 FPU放在系统初始化阶段。printf 打印浮点数兼容方案部分裸机环境下printf不支持%f。可以将浮点数放大 1000 倍转为整数拆分整数、小数部分再分别打印。四、学习总结I2C 开发不只是看懂时序波形更要关注工程上的各种边界场景跨页写、NACK 应答时机、总线死锁、多字节地址兼容。驱动分层封装是嵌入式工程规范底层 I2C 只负责总线收发AT24C02、LM75 这类外设单独写应用驱动。同时要留意 Cortex-A7 的 FPU裸机开发做浮点计算必须手动开启否则程序直接崩溃
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

手机本地部署大模型实战:从模型量化到Android/iOS推理优化 2026/9/28 21:57:35

手机本地部署大模型实战:从模型量化到Android/iOS推理优化

1. 手机跑大模型这件事,到底靠不靠谱先说结论:能跑,但别指望它替代云端服务。我前后在骁龙8 Gen 2的Android机和iPhone 15 Pro上折腾了差不多两个月,从最初的“这玩意儿真能跑?”到后来把本地模型接进自己的笔记工作流…

阅读更多 →
Agent-Native架构重构实战:设计原理、最小实现与避坑指南 2026/9/28 21:57:28

Agent-Native架构重构实战:设计原理、最小实现与避坑指南

这两年我经手了不少LLM项目,一个感受越来越明显:大多数团队口中的“AI化”,不过是在传统系统外面套了一层会说话的前端。2024年下半年我在做一个客服知识库系统,最初就是标准的RAG加聊天窗口,用户在右上角点开机器人&a…

阅读更多 →
Python电商评论情感分析全流程实战:从数据采集到模型训练 2026/9/28 21:57:28

Python电商评论情感分析全流程实战:从数据采集到模型训练

简介:基于Python的电商买家评论情感分析项目包,专为毕业设计、期末大作业和课程设计场景打造,代码注释详尽,即使完全没有项目经验的新手也能看懂每一步实现,曾获98分且深受导师认可。整个压缩包约54MB,内含…

阅读更多 →
Substrate区块链开发框架详解:从理解核心架构到动手搭建自定义链 2026/9/28 21:56:58

Substrate区块链开发框架详解:从理解核心架构到动手搭建自定义链

1. substrate到底是什么:从一张实验台布说起很多刚接触区块链底层开发的朋友,看到"substrate"这个词都会愣一下——这到底是个框架、一个库、还是一条链?我第一次接触它的时候也绕了不少弯路,这里先给大家一个最直白的说…

阅读更多 →
S500无人机新手入门:Pixhawk4与FS-IA6B对码接线及飞控配置全攻略 2026/9/28 21:56:58

S500无人机新手入门:Pixhawk4与FS-IA6B对码接线及飞控配置全攻略

1. 为什么S500这套配置值得新手拿来练手S500机架配Pixhawk4飞控再加FS-IA6B接收机,这个组合在入门级四轴里算是相当经典的搭配。S500的轴距500mm,机架空间足够大,装起来不憋屈,炸机了维修成本也低。Pixhawk4作为一款成熟的开源飞控…

阅读更多 →
JSP+MySQL在线音乐管理系统:从数据库设计到部署全解析 2026/9/28 21:56:51

JSP+MySQL在线音乐管理系统:从数据库设计到部署全解析

简介:一个基于 JSP 技术栈开发的在线音乐信息管理系统完整项目,采用 Java Web JSP MySQL JavaScript 实现,适合正在学习 Java Web 开发、需要课程设计或毕业设计参考的学生。系统区分管理员与普通用户两类角色:前台支持歌曲查询…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉