BMC读取CRPS电源的输出电压错误

问题描述:
在基于 2506 社区版本调试一款 CRPS 电源时,使用 PMBus 协议管理电源。调整扩展板 SR 后,可以在 BMC 资源树中看到电源对象,但部分字段获取异常。例如:

  • outputVoltage 字段显示始终为 1

  • 但通过读取电源 psu_chip 并发送对应电压指令 0x8B,解码结果为 12V,与实际值一致。
    image
    image

定位过程:

  • protocol/pmbus.lua 的接口中增加了调试日志。


  • 上板测试时发现日志未输出,包括在 pmbus.lua 构造函数中的日志也未输出。

  • 已确认 csr 中的 physicalinterfaceprotocol 均为 pmbus

环境信息:

  • 测试设备:BMC 模组
  • power_mgmt 组件版本:1.70.59(仅增加调试日志,未做其他改动)
  • OnePower 与 PSUSLOT 均可通过设备树正常加载
  • power_mgmt 使用 bmcgo 工具编译
  • bmcgo 版本:0.5.370

问题:
想请教社区各位专家伙伴,是否有遇到类似现象:

  • pmbus.lua 的日志无法输出,是否意味着协议层没有被调用?
  • outputVoltage 字段与 0x8B 指令读取结果不一致,可能出在哪一层?
  1. pmbus协议中在读取的地方加日志确认是否进入协议,若协议未读取到,则在对应OnePower中fetch_property读取时,加入以下判断

if prop == ‘OutputVoltage’ then
log:notice(‘%s’, debug.traceback())
end
用于确认刷新调用栈逻辑;
2. 日志打印使用log:而不是log.

2 个赞

增加日志得到的堆栈信息输出
stack traceback:
./opt/bmc/lualib/device_tree/adapters/OnePower.lua:211: in function ‘fetch_property’
./opt/bmc/lualib/device_tree/adapters/OnePower.lua:167: in function ‘run_probe’
./opt/bmc/lualib/device_tree/adapters/OnePower.lua:181: in function ‘init’
./opt/bmc/libmc/lualib/mc/class.lua:138: in function ‘old_new’
./opt/bmc/libmc/lualib/mc/mdb/device_tree/device_object.lua:549: in function ‘new’
./opt/bmc/libmc/lualib/mc/mdb/device_tree/dev_object_manage.lua:171: in function ‘create_object’
./opt/bmc/libmc/lualib/mc/orm/factory.lua:123: in function ‘create_object’
./opt/bmc/libmc/lualib/mc/orm/factory.lua:37: in function <./opt/bmc/libmc/lualib/mc/orm/factory.lua:36>
[C]: in function ‘pcall’
./opt/bmc/libmc/lualib/mc/signal.lua:69: in function ‘run_slot’
./opt/bmc/libmc/lualib/mc/signal.lua:89: in function <./opt/bmc/libmc/lualib/mc/signal.lua:79>
./opt/bmc/libmc/lualib/mc/orm/mdb_object_manager.lua:67: in function ‘cb’
./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:91: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:88>
[C]: in function ‘pcall’
./opt/bmc/libmc/lualib/mc/context.lua:194: in function ‘with_context’
./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:88: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:60>
[C]: in function ‘pcall’
./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:202: in function <./opt/bmc/libmc/lualib/mc/mdb/object_manage.lua:197>
[C]: in function ‘pcall’
./opt/bmc/libmc/lualib/mc/context.lua:194: in function ‘’
/opt/bmc/skynet/lualib/skynet.lua: in function </opt/bmc/skynet/lualib/skynet.lua:0>

我在PsuSlot.lua里面增加了日志,得到的输出电压结果为1,但是在protocol/pmbus.lua定义的get_output_voltage方法中缺没有输出,想知道这个下一步如何定位



  1. 在OnePower.lua下的init()中打印self[‘PhysicalInterface’],确认使用的是哪个配置类型
  2. include/device_tree/adapters/power_mgmt/protocol/init.lua中配置的是哪一个协议
1 个赞

多谢, 目前定位的结果是pmbus_FP1420.lua里面重写了pmbus对象的get_output_voltage接口,
导致最终计算的结果为1,此外还发现pmbus.lua中get_output_voltage中获取输出模式时候使用的是self.chip_byteread,导致获取输出模式问题,已经在power_mgmt提交issue、pr


PR触发集成用例测试失败了, 我看集成用例的代码这里像是读取电源的输出电压,是这样吗,为什么期望读到的输出电压是0呢

当前已修改完成,具体见
修复从pmbus读取输出电压失败

好的, 那我把我的PR关了