hisport无法扫描到i2c地址问题分析
更新时间: 2026/05/27
在Gitcode上查看源码

问题背景

  • 单板类型:Kunpeng 920 7282C;
  • 软件版本:OpenUBMC 25.12;
  • 涉及功能:raid,i2c;
  • 触发条件:使用hisportdetect工具扫描i2c地址;
  • 业务表现:预期可以扫描到正确的地址;实际扫描到的地址配置到CSR后通信异常;

问题复现步骤

调试raid卡,raid卡使用的i2c通信,使用i2c_write写raid寄存器失败;使用hisportdetect工具扫描i2c,发现扫描并配置到CSR中配置的i2c地址导致i2c通信异常。

关键日志信息

framework日志:

定位过程

  1. 扫描hisport-18结果如下图,实际存在0x57和0x5f两个地址;

  2. 确认hisport_18的拓扑结构正常:

  3. 分析日志报错“block_write_read ret -1”表明底层I2C写操作失败。

  4. 尝试直接调用器件的读写方法进行操作如下:

    text
      busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Eeprom/Eeprom_3_3_010101 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0 1

结果报错290:

  1. 怀疑硬件问题,参考下面这个文档Hisport总线介绍进行总线定位,排除硬件链路问题;错误码290,不在问题定位返回码范围内;需要进一步确认;
  2. 尝试通过hisport读取多个Eeprom,结果发现都不通;说明Hisport通道下没有器件或者硬件链路异常。但是硬件回复,Hisport存在,且正常按照硬件原理进行配置;
  3. i2c不通,硬件确认正常链接,需要进一步确认i2c配置;与硬件确认i2c为7位地址,7位地址的配置方式与8位不通,即7位地址的话需要将扫描出来的地址左移一位,最低位(第 0 位)必须留给读/写标志,硬件才可以正常识别,保证BMC与硬件通过i2c通信。

问题原因

i2c地址实际为7位地址,实际i2c总线上发的是8位地址,在BMC侧需要将实际的7位地址左移以一位的数值配置为i2c地址才可以正常识别即通信。

解决方案

实际的7位地址左移一位,配置到i2c中才可以实现正常通信。