i2cdetect扫描单个EEPROM显示0x50-0x57共8个从地址的原因咨询
问题描述
项目开发过程中需与从设备EEPROM建立I2C通信,硬件侧已将该设备从地址配置为0x54。执行i2cdetect -r -y 10命令扫描10号I2C总线时,单块硬件被识别出8个不同从地址,地址范围覆盖0x50~0x57,命令执行输出如下:
$ sudo i2cdetect -r -y 10 ... 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
故障根本原因
这是I2C EEPROM硬件地址引脚浮空导致的典型现象:
- 市面上绝大多数通用I2C EEPROM(如常用的AT24C全系列)的7位I2C从地址格式是固定的:高4位为固化值
1010,对应地址段的基址就是0x50;低3位由芯片引出的A0、A1、A2三个硬件地址选择引脚的电平决定,三个引脚的电平可以组合出8种状态,正好对应0x50~0x57这8个连续地址。 - 当A0/A1/A2三个引脚没有可靠连接到确定的高电平或低电平(即浮空状态)时,引脚电平会受芯片内部漏电流、周边走线串扰、总线电磁干扰影响处于不确定的随机状态。
i2cdetect扫描时会依次向总线上的每个地址发送寻址信号,只要设备给出应答就会判定该地址存在。因为三个地址脚电平随机,每次寻址时芯片都有概率刚好匹配到当前发送的地址值并返回应答,最终就会出现8个地址全部被扫描到的异常现象。- 你预期配置的地址0x54对应二进制为
1010100,也就是A2=1、A1=0、A0=0,出现该问题基本可以判定为三个地址引脚的硬件连接存在故障,和EEPROM芯片本身、I2C总线驱动逻辑无关。
快速排查方向
- 断电后用万用表通断档测量EEPROM的A0、A1、A2三个引脚,确认是否和设计要求的VCC/GND端可靠连通,排查是否存在虚焊、走线断裂问题
- 检查三个引脚的上下拉电阻是否存在漏焊、虚焊,或阻值选型过大(常规选1kΩ~10kΩ即可,阻值过大会无法将引脚电平拉到确定阈值)
- 硬件问题修复后重新扫描总线,将只会出现你配置的0x54单个有效从地址。
内容的提问来源于stack exchange,提问作者chandru
相关产品推荐
相关产品推荐

