news 2026/7/7 16:28:13

I2C读写EEPROM(AT24C02)QA

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
I2C读写EEPROM(AT24C02)QA


传输时序:
1.器件地址通过AT24C02上的A0、A1、A2三个地址位引脚提前设定;
2.地址指的是挂载在总线上的存储的器件的地址;
3.器件内部的存储地址是第一个要发送的数据(Data1);

SCB寄存器:
位于内核中;

为什么要使用中断:
硬件按SCL时序完成数据收发和ACK检测后,触发中断,中断服务函数读取硬件的状态标志,确认操作是否成功,再指挥硬件执行后续的数据发送/接收动作;

若在轮询模式下使用while循环,CPU会死等应答信号,造成CPU资源浪费,ACK 检测是硬件的活,CPU 不参与、不等待,全程可以处理其他任务,仅当硬件检测到ACK结果(成功/失败)然后触发中断触发时CPU才花极短时间处理结果,这正是中断模式效率高的核心原因;

多地址模式中的第二地址:
为挂载更多的设备在总线上;

Debug时遇到的问题:
1.在循环处打断点,设置循环次数,出现debug不停的现象,可以选择程序中的行号打断点,也可以选择汇编指令中的地址号打断点,ctrl+b调出菜单define断
点位置和循环次数;
2.设置条件断点 define a = 10
3.在读写内存的时候设置断点,通过选择菜单中的read或write并写入要监测的变量;

I2C的数据传输:
采用半双工的传输方式,主从设备通过地址帧握手实现数据传输;

I2C的数据寄存器:
同SPI一样,I2C外设中的数据寄存器也是数据收发的窗口,不是正真的buffer寄存器;

Systick:
是CM4的内核外设,其中重装载寄存器的值递减到0,触发一次中断,VAL保存的是当前倒计数的值,若需记录触发中断的次数需要软件记录;

数据传输时的状态读取:
由软件记录Systick的中断次数,为等待状态设定等待时间上限,防止死等;


数据流向:
由stm32向eeprom写:32的内存(pBuffPtr指针,指向的时32内存中的一块区域,里面保存有要写入的内容) -> i2c外设(数据寄存器) —> 通过i2c总线到eeprom

由stm32从eeprom读:eeprom通过i2c总线 -> i2c外设的数据寄存器 -> 32内存


为什么在向寄存器写入后又读一遍:

SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\
/* Delay after an RCC peripheral clock enabling */ \
tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);\
UNUSED(tmpreg); \
为了实现硬件同步,在软件写入之后,寄存器会更新内容,在读的过程中会检查寄存器中的数据是否稳定,从而实现硬件同步的目的;

遇到了一次Debug显示的Pin值与程序中选择的Pin不一致:
重新编译了一次再次Debug又一致了,可能时编译器缓存或硬件调试器缓存的问题;

为什么在 HAL_I2C_MspInit 函数里先强制复位I2C再释放复位:
1.清理 “烂摊子”:保证 I2C 从一个干净、已知的状态开始初始化,清除之前可能残留的错误或异常设置。
2.配合硬件启动:硬件要求这样做,能让 I2C 与其他部分在启动时同步,还能等时钟和电源稳定后再正常工作。
3.规范与通用:遵循 HAL 库设计规范,形成标准流程,方便维护和移植,也为错误恢复提供基础。
该函数会在HAL_I2C_Init中调用;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 17:59:29

Windows系统维护终极指南:如何快速修复Windows Update服务问题

Windows系统维护终极指南:如何快速修复Windows Update服务问题 【免费下载链接】Windows-Maintenance-Tool 项目地址: https://gitcode.com/gh_mirrors/wi/Windows-Maintenance-Tool 你是否曾经遇到过这样的情况:Windows更新卡在某个进度不动&am…

作者头像 李华
网站建设 2026/7/7 8:26:24

Pyecharts与Spark DataFrame融合实战:突破性大数据可视化解决方案

Pyecharts与Spark DataFrame融合实战:突破性大数据可视化解决方案 【免费下载链接】pyecharts 🎨 Python Echarts Plotting Library 项目地址: https://gitcode.com/gh_mirrors/py/pyecharts 在当今数据驱动的时代,如何将海量数据处理…

作者头像 李华
网站建设 2026/7/7 16:52:40

从20步到4步:Qwen-Image-Lightning如何让AI绘图实现秒级响应

从20步到4步:Qwen-Image-Lightning如何让AI绘图实现秒级响应 【免费下载链接】Qwen-Image-Lightning 项目地址: https://ai.gitcode.com/hf_mirrors/lightx2v/Qwen-Image-Lightning 还在为AI绘图漫长的等待时间而烦恼吗?传统扩散模型动辄需要20-…

作者头像 李华
网站建设 2026/7/7 3:13:51

Open-AutoGLM任务调度死锁预警,4大征兆及提前干预方案

第一章:Open-AutoGLM任务调度死锁预警概述在分布式任务调度系统中,Open-AutoGLM作为基于大语言模型的自动化工作流引擎,其核心依赖于多节点间的协同执行与资源竞争管理。当多个任务因相互等待资源释放而陷入无限阻塞状态时,即触发…

作者头像 李华
网站建设 2026/7/7 9:42:23

掌握ImGui Node Editor:构建可视化编程界面的终极指南

掌握ImGui Node Editor:构建可视化编程界面的终极指南 【免费下载链接】imgui-node-editor Node Editor built using Dear ImGui 项目地址: https://gitcode.com/gh_mirrors/im/imgui-node-editor ImGui Node Editor是基于Dear ImGui构建的现代化可视化节点编…

作者头像 李华
网站建设 2026/7/7 15:02:44

Scan Tailor:扫描图像处理终极解决方案完全解析

Scan Tailor:扫描图像处理终极解决方案完全解析 【免费下载链接】scantailor 项目地址: https://gitcode.com/gh_mirrors/sc/scantailor 在数字化时代,扫描文档的处理质量直接影响着信息的可读性和传播效率。Scan Tailor作为一款专业的开源扫描图…

作者头像 李华