1712 使用 I2cOverHisport 对象配置I2C的时候访问不通

// 此模板仅供参考,如果不适用可以修改

问题描述

我访问Eeprom是通过 1711 出的 Hisport;也就是 I2C over Hisport;我的配置如下

"I2cOverHisport_3": {

  "Id": 1,

  "ChannelId": 3

},

我尝试手动去读,报如下错误:

% call Eeprom_1_010118 bmc.kepler.Chip.BlockIO Read 0 0x00 0x128
BMC.Error.Unknow: ./opt/bmc/libmc/lualib/mc/context.lua:203: ./opt/bmc/libmc/lualib/sd_bus/object.lua:317: ./opt/bmc/apps/hwproxy/lualib/hwproxy_objects/app_bus.lua:104: ./opt/bmc/apps/hwproxy/lualib/hw_utils/hw_wait_access.lua:101: chip: Eeprom_1_010118, bus: I2cOverHisport_3, read failed: i2c_over_hisport.lua:50: ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:NA

重现步骤

期望结果

NA

实际结果

NA

尝试过的解决方案

NA

分析结论

NA

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

5. 初步结论

基于目前 Context 信息,最可能的原因是:

  1. Hisport 通道上没有挂载目标器件(最常见)。
  2. I2C 地址配置错误(地址未左移一位)。
  3. Hisport 控制器 Id 或通道 Id 与实际硬件不匹配

建议优先检查硬件拓扑和 I2C 地址,并使用调试工具进一步定位。如果上述排查后问题仍存在,可能需要分析具体的 Hisport 控制器日志或硬件信号。

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

问题分析

根据您描述的现象——通过 I2cOverHisport_3(Id=1, ChannelId=3)访问 Eeprom_1_010118 时出现 Connection timed out 错误,结合提供的 Context(知识图谱、文档块、搜索结果)中的信息,可以从以下几个方面进行分析和排查。


1. 超时错误的典型原因

在 Hisport/I2cOverHisport 总线场景中,“Connection timed out”通常意味着:

  • 总线上没有预期的器件,或硬件链路异常导致通信无响应。
  • I2C 地址配置错误(尤其是 7 位地址与 8 位地址的转换问题)。
  • Hisport 控制器或通道参数不匹配(Id / ChannelId 与实际硬件拓扑不符)。
  • 总线拓扑扩展配置遗漏(例如未正确配置 SubBusesBuses)。

2. 来自上下文的直接线索

线索来源 内容 相关性
文档块(故障讨论帖) “说明Hisport通道下没有器件或者硬件链路异常。没有器件是最常见的。 可能是硬件未挂载或链路断裂
同一讨论帖的最终解决方案 i2c 地址配错,i2c 地址需要左移一位 I2C 地址(7 位 vs 8 位)配置错误是典型问题
知识图谱中 EEPROM 芯片失败案例 多个 EEPROM(如 Eeprom_3_9Eeprom_3_10 等)在 Hisport 总线上 read failed,错误码类似 与您遇到的超时错误属于同类问题
关系图谱 Eeprom_BCU 的地址为 174(0xAE),地址宽度 AddrWidth=1 提示 EEPROM 地址通常为 0xAE,但需与硬件实际地址核对
搜索结果“I2cOverHisport 类配置字典” 属性 Id(Hisport 控制器 Id)和 ChannelId(I2c 通道 Id)是必填项 检查您的 I2cOverHisport_3 配置是否与硬件 Hisport 控制器和通道对应
搜索结果“ManagementTopology” 描述了 SubBuses 用于标识 Hisport 向 I2cOverHisport 的拓展示例 如果 Hisport 下的 I2cOverHisport 没有在 SubBuses 中列出,会导致总线连接不完整

3. 建议的排查步骤

步骤一:确认硬件链路

  • 使用 逻辑分析仪 或 Hisport 调试工具,检查 Hisport 控制器是否正常工作。
  • 验证目标 EEPROM 是否确实通过 I2C 挂在该 Hisport 通道下。参考文档块中的拓扑示例(如 Hisport_12 下挂 Eeprom_3_9,Hisport_18 下挂 Eeprom_3_3 等)。

步骤二:核对 I2C 地址

  • 确认目标 EEPROM 的 7 位 I2C 地址 与配置中的 Address 值一致。
  • 常见错误:将 8 位写入地址(如 0xAE)直接当作 7 位地址(实际应为 0x57)。请根据硬件手册左移一位配置。
  • 使用 i2cdetect 等工具(如果存在物理 I2C 总线)或 Hisport 调试接口扫描总线,验证地址。

步骤三:检查 CSR 配置拓扑

  • 确认 I2cOverHisport_3Id(Hisport 控制器 Id)和 ChannelId(I2c 通道 Id)与 Hisport 控制器的实际通道编号一致。
  • 查看 Hisport 总线对象是否在 SubBuses 中正确列出了 I2cOverHisport_3。如果缺少该配置,协议总线无法被框架识别为有效扩展。

步骤四:验证目标 EEPROM 对象配置

  • 检查 Eeprom_1_010118AddressAddrWidthOffsetWidth 是否与硬件匹配。
  • 检查该 EEPROM 对象是否在正确的 Chip 列表下,并位于正确的总线上(应为 Buses: ["I2cOverHisport_3"] 或类似的 Hisport 总线)。

步骤五:使用硬件代理接口进行诊断

  • 参考搜索结果中“硬件代理总线读写接口使用方法”,通过 busctl 调用 bmc.kepler.hwproxy 的相关接口,尝试不同参数(offset、length)的读写,观察错误变化。
  • 可尝试读取一个已知完好的 Hisport 通道上的其他器件,以区分是通道问题还是器件问题。

4. 参考示例

在文档块中有一个完整 Hisport 拓扑的例子(Hisport_12 ~ Hisport_18),其中每个 Hisport 总线都明确挂载了具体的 EEPROM 芯片。例如:

Hisport_12
└─Eeprom_3_9_010101

Hisport_18
├─Eeprom_3_3_010101
└─Pca9545_PCA9545_01010103
  ├─Channel_1 ...
  └─Channel_3 ...

请比对你的 I2cOverHisport_3 的配置,确认目标 EEPROM 是否正确定义在该 Hisport 通道下,且无中间多路复用器(如 Pca9545)通道选择错误。


5. 初步结论

基于目前 Context 信息,最可能的原因是:

  1. Hisport 通道上没有挂载目标器件(最常见)。
  2. I2C 地址配置错误(地址未左移一位)。
  3. Hisport 控制器 Id 或通道 Id 与实际硬件不匹配

建议优先检查硬件拓扑和 I2C 地址,并使用调试工具进一步定位。如果上述排查后问题仍存在,可能需要分析具体的 Hisport 控制器日志或硬件信号。

  1. 1712芯片才有i2covershiport总线;
  2. his_i2c_read 调用 ioctl(HIS_CMD_I2C_STREAM_READ) 超时说明驱动层根本无法与器件建立通信,问题大概率在物理层或地址配置,而非软件逻辑,建议先排除硬件和配置是否正确。

可以补充提供下一键收集日志