V3硬件访问错误排查指南
更新时间: 2025/12/16
在Gitcode上查看源码

V3硬件访问错误排查指南

hwproxy硬件代理组件提供通过不同的总线(I2c、Hisport...)到硬件(Eeprom、SMC、复杂Chip...)的访问能力,通过在SR中描述硬件拓扑关系及对应Bus/Chip/Accessor/Scanner属性后,其他组件通过hwproxy提供的资源树接口访问 --> hwproxy --> 用户态驱动 --> 内核态驱动(一般由SDK提供) --> 物理总线 --> 对应Chip,以下整理常见问题案例,持续更新,欢迎补充;如果以下案例未排查到问题,条件允许可以使用究极定位方法:让硬件在对应的总线上抓取逻分数据进行发送和返回数据的分析;

硬件代理提供的是硬件访问通道与部分调度能力,具体的硬件数据协议,硬件返回错误(如硬件代理已发送数据到总线,但对端器件未响应)等问题与硬件代理无关;

1. 访问报错i2c write/read fail, ret: 5
  • 问题现象
  1. Accessor/Scanner访问报错:
  2. Chip方法访问报错: 通过资源树访问无法查看到具体的错误信息,需要打开hwproxy debug级别日志后在日志中查看:
busctl --user set-property bmc.kepler.hwproxy /bmc/kepler/hwproxy/MicroComponent bmc.kepler.MicroComponent.Debug DlogLevel s 'debug'

查看报错信息如下:

  • 问题原因

I2c数据时序如下: 出现该错误的原因为第(4)步slave未发送ACK信号,通信失败;

查看dmesg有如下报错:

解释如下: 同样原因在Hisport访问报错为:

  • 问题排查
  1. 确认SR配置正确,比如地址配置错误,或拓扑配置错误,导致器件在hwproxy内的拓扑信息与实际硬件连接不一致,访问到错误的总线/地址;
  2. 确认对端器件是否正常(运行状态是否正常,固件版本是否正确等),可通过i2ctool工具直接发送i2c命令给对应器件进行排查;
  3. 通过更换插卡等方法进行交叉验证,排查硬件问题;
  4. 通过硬件抓取数据进行问题排查;
2. 访问Accessor/Scanner/SMC报错
  • 问题现象

与SMC相关的请求均无法访问

  • 问题原因

某些机型的大部分SMC由MCU实现,遇到SMC访问的问题如果确认是MCU实现的,可先排查MCU的版本状态:

busctl --user call bmc.kepler.hwproxy {smc_path} bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x00018500 7

例如:查询基础板MCU版本状态
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_CpuBrdSMC_0104 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x00018500 7

返回值在0.1.45~0.1.50范围内MCU为正常状态,其他返回错误或其他值均为MCU挂死异常状态

正常返回: 异常返回:

  • 问题排查
  1. AC重启MCU,查看状态是否恢复正常;
  2. 若AC无法恢复正常,需要重新烧录MCU固件;
3. Accessor写值异常
  • 问题现象

Accessor写值失败/不生效

  • 问题排查
  1. 如果是SMC的Accessor,首先确定是可由BMC进行写入的,查询<SMC命令字定义>表格,为RW的属性才可由BMC进行写入;
  2. 确定BMC写入值的范围,有些Accessor只能由BMC写0或写1,常见CPLD产生事件,BMC进行清除等情况,例如BMC Accessor只能写0:
  3. 确定Accessor所在Chip(SMC/Pca9555等)属性AddrWidth/OffsetWidth是否配置正确,如果配置不正确将会影响写到总线上的数据,导致写值异常;
  4. BMC发送写数据成功,CPLD/MCU未进行处理;