news 2026/1/29 14:47:57

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/1/25 3:06:13

揭秘CVAT自动标注:AI驱动的高效数据标注革命

揭秘CVAT自动标注:AI驱动的高效数据标注革命 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/gh_mi…

作者头像 李华
网站建设 2026/1/25 3:49:20

3分钟搞定FFXIV快速启动器:新手必备的安装使用全攻略

3分钟搞定FFXIV快速启动器:新手必备的安装使用全攻略 【免费下载链接】FFXIVQuickLauncher Custom launcher for FFXIV 项目地址: https://gitcode.com/GitHub_Trending/ff/FFXIVQuickLauncher FFXIV快速启动器是一款专为最终幻想14玩家设计的强大工具&#…

作者头像 李华
网站建设 2026/1/29 4:07:20

2023年6月英语六级真题完整获取与使用指南

2023年6月英语六级真题完整获取与使用指南 【免费下载链接】2023年6月英语六级真题下载 2023年6月英语六级真题下载 项目地址: https://gitcode.com/Open-source-documentation-tutorial/9bfd8 还在为英语六级备考寻找高质量的真题资源吗?本文为您详细介绍如…

作者头像 李华
网站建设 2026/1/28 22:03:29

MPV播放器终极调校:专业级色彩管理与HDR视觉优化指南

MPV播放器终极调校:专业级色彩管理与HDR视觉优化指南 【免费下载链接】mpv 🎥 Command line video player 项目地址: https://gitcode.com/GitHub_Trending/mp/mpv 在数字影像时代,MPV播放器凭借其强大的色彩管理能力和精准的HDR渲染效…

作者头像 李华
网站建设 2026/1/27 18:44:51

无障碍播放器终极指南:键盘导航与屏幕阅读器完全攻略

无障碍播放器终极指南:键盘导航与屏幕阅读器完全攻略 【免费下载链接】jessibuca Jessibuca是一款开源的纯H5直播流播放器 项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca 用户痛点:视力障碍者的播放困境 在现代直播流播放场景中&…

作者头像 李华