I2C通道扫描不到设备

平台: 1711 BMC 模组

硬件连接:

  • I2C6 → CPLD

  • I2C7 → CRPS 电源

现象:

  1. 使用 i2cdetect 扫描 I2C6、I2C7 均无法发现设备

  2. 有其他 I2C 通道可以正常

  3. 硬件示波器抓波形结果:未检测到波形,I2C7的被拉低(正常应为高电平)

BMC版本为2509,这个BMC版本在其他产品上可以正常使用I2C7的,换到新到产品就出现上述问题了这个问题和BMC版本有关系吗, 是否和CSR配置相关,BMC该如何定位I2C的通道问题呢?

答案内容由AI生成,仅供参考:

总结

该问题不太可能是BMC版本导致,而更可能是特定产品上的硬件配置或CSR适配问题。建议按照"硬件连接→复用配置→CSR定义→软件工具"的顺序进行逐级排查,优先解决I2C7总线被异常拉低的硬件问题,再检查相关的软件配置。

点击此处查看详细分析解答

I2C通道扫描不到设备问题分析与定位

问题概述

在1711 BMC模组平台上,I2C6和I2C7通道无法正常扫描到设备。具体现象包括:

  • 使用i2cdetect工具扫描I2C6(连接CPLD)和I2C7(连接CRPS电源)均无法发现设备
  • 硬件示波器检测显示无正常I2C通信波形
  • I2C7总线被拉低(正常应为高电平状态)
  • 其他I2C通道工作正常
  • 相同BMC版本25.09在其他产品上能正常使用I2C7

问题分析

1. 关于BMC版本影响

此问题与BMC版本无直接关系。根据已知信息,同一BMC版本25.09在其他产品上可以正常使用I2C7,说明BMC固件本身功能正常。问题更可能源于当前产品的硬件设计或配置差异。

2. CSR配置相关性

CSR配置是关键排查方向之一。CSR(Control and Status Register)文件定义了系统的硬件拓扑和资源配置:

  • ManagementTopology配置文件中必须正确定义I2c_6和I2c_7总线
  • 需要确认CSR中对I2C总线的地址范围、速率等参数设置是否正确
  • 查看CSR是否配置了正确的设备连接关系

可通过以下命令检查CSR加载情况:

busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/ObjectGroup/{position} bmc.kepler.ObjectGroup GetObjects a{ss}s 0 'event'

3. I2C复用配置问题

从搜索结果可知,"I2C的复用关系可能没有配置"是导致I2C不工作的常见原因。需要确认:

  • I2C6和I2C7通道的GPIO复用关系是否已正确配置为I2C功能
  • 硬件上是否有其他功能占用了这些引脚

诊断方法

1. 环境初始化检查

参考论坛案例[Topic 4745],需确认执行环境初始化:

source /etc/profile

未执行环境变量加载可能导致工具无法正常使用。

2. 工具支持验证

i2cdetect工具虽然能检测标准I2C总线,但无法扫描hisport上的设备。不过本场景中I2C6和I2C7并非hisport接口,因此不应受此限制。

3. 硬件层诊断

I2C7总线被拉低说明存在硬件层面的问题:

  • 检查上拉电阻:确认SCL和SDA线上有适当的上拉电阻
  • 检查从设备状态:CRPS电源模块是否处于正常工作状态
  • 检查短路情况:测量线路是否存在短路
  • 确认PCA9545等多路复用器:如果有使用I2C多路复用器,需确认其配置和状态

4. 软件层诊断

结合日志分析,BMC系统中存在多个I2C相关错误线索:

  • [I2c_6] read failed: iror, i2c read fail 错误表明I2C读取失败
  • BMC.Error.Unknow错误出现在I2C通信过程中
  • 这些错误通常与硬件链路异常或设备未响应有关

解决方案建议

1. 配置检查

  1. 使用BMC Studio工具验证I2C配置
  2. 确认sr文件中正确定义了I2c_6和I2c_7
  3. 检查I2C总线速率、地址等参数配置

2. 硬件调试

  1. 优先解决I2C7被拉低问题
    • 断开所有从设备,观察总线电平
    • 逐步接入设备,定位导致拉低的组件
  2. 使用示波器验证时钟延展情况
  3. 检查电源供应是否稳定

3. 软件操作

  1. 尝试重新加载I2C驱动
  2. 检查dmesg日志中的I2C相关错误信息
  3. 执行i2cdetect -l确认系统识别到I2C总线列表

总结

该问题不太可能是BMC版本导致,而更可能是特定产品上的硬件配置或CSR适配问题。建议按照"硬件连接→复用配置→CSR定义→软件工具"的顺序进行逐级排查,优先解决I2C7总线被异常拉低的硬件问题,再检查相关的软件配置。

软件层基本不感知这个变化,可以检查一下插卡/模组硬件的链路设计

波形测试情况:I2C5和I2C6下面没有挂任何器件(硬件电路已断开),但又上拉4.7K电阻,测试波形SDA和SCL均有高电平,但i2cdetect 5和6运行时没有看到波形有变化,也没扫描到器件。

可以看下linux_kernel日志有没有关于i2c_7的报错,以及你们硬件组网是什么样的?看一下是否管脚没有复用成I2C功能。

内核日志在扫描的时候有记录:iBMC kernel: [I2C-06-RT<-5|-5>] M<0x12|0x1|0x0|1|10> L<0|1|0> C<0|0|1> E<0x801|0x0|0x0|0x1> I<0x0|0x110|0x0>
错误是0x801,应该是链路异常, 但不清楚原因。
硬件组网就是i2c_6连到载板CPLD,i2c_7到PSU。
怎么确认管脚有没有复用成I2C功能呢,这个是通过什么配置复用的?

通道 确认关键复用状态 预期值
I2C5 devmem 0x0874505c 32 0x00
devmem 0x08745060 32 0x00
I2C6 devmem 0x08745064 32 0x00
I2C7 devmem 0x08745068 32 0x00

可以根据这个确认复用状态,不过你那边能打印,应该是使用的i2c

读了寄存器数值,和预期值是一样全为0,那看来管脚的i2c配置是没问题的。
波形测试结果显示i2c_4、i2c_5、i2c_6、i2c_7都是没有波形变化,另外在重启BMC的过程中,i2c_7时钟会先拉高一会后一直拉低,这个现象能说明什么问题吗?
现在能有什么方法判断出是属于硬件问题还是软件配置问题呢,目前同一批次的多个设备都发现这个问题。

BMC软件没有拉低i2c电平的配置,这种一般是硬件问题。csr的配置主要也是配置topo数据,也不会控制底层i2c电平高低。

目前定位属于硬件问题,BMC模组使用了RMII1互联,断开此链接后I2C功能正常,正在与模组硬件PAE沟通明确此问题。