在嵌入式系统开发中,I²C 总线被广泛用于 MCU 与外设之间的通信,其中 24Cxx 系列 EEPROM 是应用最普遍的非易失性存储器。它支持掉电保存数据,体积小,接口简洁,非常适合存储参数配置、运行日志或小容量数据。然而,工程实践中常有人抱怨 MCU 使用 硬件 I²C 控制器时容易“死机”,因此不得不转向软件模拟 I²C。但实际上,只要理解 I²C 协议本质、结合硬件特性与防护措施,MCU 的硬件 I²C 同样能够稳定运行。
一、24C02 与 I²C 通信要点
存储容量:256 字节
页大小:8 字节,页写入时不可跨页
硬件配置:
A2/A1/A0 接 GND → 器件地址固定为 0xA0;
WP 接 GND → 允许写入。
在 MCU 端,使用 STM32F030 的 硬件 I²C 外设,可实现字节读写与页读写操作。若迁移至其他型号 EEPROM(如 24C04、24C16),需要注意 页大小(Page Size) 与 高位地址映射方式 的差异。
二、I²C 死机的常见原因
硬件 Bug(Errata)
部分 MCU I²C 控制器存在已知问题(如 ACK 处理异常、Stop 条件丢失),应查阅官方勘误表。
总线锁死(Bus Hang)
在传输过程中若 SDA 或 SCL 被意外拉低(可能来自干扰、未完成的传输或异常中断),MCU 和从设备都可能进入等待状态,导致通信无法继续。
错误的中断处理
若中断优先级不当或处理流程出错,可能导致硬件 I²C 状态机异常。