鲲鹏模组CPLD版本不显示

问题描述

查看CpuBoard对象,RunningStatus为0

~ ~ # mdbctl lsprop CpuBoard_1_010101
bmc.kepler.Object.Properties
  ClassName="CpuBoard"
  ObjectIdentifier=[1,"1","1","010101"]
  ObjectName="CpuBoard_1_010101"
  TraceSamplingRate=0
bmc.kepler.Systems.Board
  BoardID=65535
  BoardType="CpuBoard"
  CpldStatus=0
  Description="CpuBoard(1620s)"
  DeviceName="CpuBoard1"
  FruID=3
  LogicUnit=1
  LogicVersion=""
  MCUVersion=""
  Manufacturer="Huawei"
  MultiLogicUnit=[]
  MultiLogicVersion=[]
  Name="BC82AMDT"
  NodeId="BCU1CpuBoard1"
  Number=1
  PSIPVersion=""
  PartNumber="0302064399"
  PcbVersion=".A"
  Position="BCU1"
  PowerWatts=0
  ProductName=""
  RefComponent=""
  RefFru=""
  RunningStatus=0
  SRVersion="0.01"
  SerialNumber=""
  SilkText=""
  Slot=1
bmc.kepler.Systems.Board.CpuBoard
  BIOSVersion=""
  Platform=0
bmc.kepler.Systems.Board.Unit
  CurrentUpgradeStatus=0
  HWSRVersion=""
  Type="BCU"
  UID="00000001020302066283"
Private
  BmcStartFlag=1
  CPLD2VersionID=0
  CPLD3VersionID=0
  Container=""
  Count=0
  CpldTestNum=1
  CpldTestReg=170
  LogicVersionID=17
  PcbID=1
  RefMCUChip=[]
  RefSMCChip="Smc_CpuBrdSMC_010101"

环境信息

  • 软件版本:OpenUBMC2512SP1

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

总结

CPLD 版本不显示 的根本原因很可能是 CPLD 与 BMC 之间的通信链路(尤其是 JTAG 链路)未正常建立,或者硬件链路配置错误导致版本读取失败。同时 RunningStatus=0CpldStatus=0 进一步印证了该组件处于异常状态。建议首先通过 GetChipIdcode 命令验证 JTAG 链路是否畅通,然后核对 CSR 文件中的硬件拓扑配置。

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

根据您提供的 CpuBoard_1_010101 对象信息,RunningStatus=0CpldStatus=0,同时 MCUVersionPSIPVersionLogicVersion 等版本字段均为空。结合上下文中的知识库数据,以下是对“CPLD版本不显示”问题的可能原因分析和建议排查方向。


可能原因

1. CPLD 或 MCU 运行状态异常

  • RunningStatusU8 类型的属性,用于表示 CPLD 和 MCU 的实时运行状态,1 表示正常,0 表示异常
  • CpldStatus 同样为 U8 类型,主要指示 CPLD 的健康状态或自检结果(部分描述中 0 表示正常,但也有描述 1 为正常;从您的结果来看 CpldStatus=0RunningStatus=0,更倾向于该状态表示异常)。
  • 当 RunningStatus 或 CpldStatus 为 0 时,系统可能判断 CPLD 或 MCU 未处于正常工作状态,从而无法通过正常通信路径读取其版本信息,导致版本字段为空。

2. CPLD 与 BMC 之间的通信链路异常

  • 根据知识库记录,CPLD 通常通过 LocalBus、I2C、JTAG 等总线与 BMC 连接。
  • 在多厂商 CPLD 场景中,日志常出现 [cpld]get cpld device info failed,这通常是 ChipInfo 获取失败 的表现。
  • 如果 CPLD 挂在 JTAG 链路 上,常见原因包括:
    • JTAG 链路未正常切换(例如未通过模拟开关选择正确的通道)。
    • 硬件链路配置错误(PCB 或 CSR 文件中定义的链路与实际硬件不匹配)。
    • CSR 文件未正确适配(例如社区提供的 sr 文件需要根据实际硬件修改)。

3. 硬件链路配置或 CSR 文件问题

  • 从相关问题分析文档可知,硬件链路配置错误 可能导致 GetChipIdCode 调用失败,进而无法获取 CPLD 版本信息。
  • 解决方案通常是重新适配硬件链路的 CSR 文件,确保与硬件实际拓扑一致。
  • 此外,CpuBoard_1_010101Private 字段中 CpldTestNum=1CpldTestReg=170,表明系统曾尝试进行 CPLD 测试,但可能因链路问题无法获得有效版本。

4. CPLD 自检失败

  • CpldStatus 被 BMC Interface 用于监测 CPLD 自检失败,并触发告警。
  • 如果 CPLD 自检失败,状态寄存器值可能保持为 0,同时版本读取功能也会受影响。

建议排查步骤

① 检查 JTAG 链路状态

在 BMC 命令行中执行以下命令,测试是否能获取到 CPLD 的 IDCODE:

mdbctl call Cpld_1_010101 bmc.kepler.Chip.JtagTarget GetChipIdcode 0
  • 若返回错误或空值,说明 JTAG 链路未正常建立
  • 此时可尝试手动切换 JTAG 通道(参考 Get Cpld Channel / Set Cpld Channel 命令)。

② 检查 CSR 文件适配

确认当前使用的 CpuBoard 对应 CSR 文件(如 CpuBoard1.sr 或类似的配置文件)是否与实际硬件拓扑一致:

  • 检查 ChipInfo 中 CPLD 的地址、总线类型(JTAG/I2C/LocalBus)是否正确。
  • 对比硬件原理图,确认 JTAG 链路模拟开关控制、通道选择 等配置无误。

③ 检查 CPLD 与 MCU 通信

  • PrivateRefMCUChip=[] 为空,这可能表示 MCU 芯片参考未正确配置,导致系统无法通过 MCU 获取版本。
  • 确保 RefMCUChip 指向正确的 MCU 对象,并检查 MCU 是否正常运行(可通过 RunningStatus 进一步确认)。

④ 查看相关日志

检查 app.log 中是否出现以下关键词:

  • [cpld]get cpld device info failed
  • [cpld]get version failed
  • ChipInfo 获取失败记录

这些日志能帮助定位具体的错误码及失败的接口。


总结

CPLD 版本不显示 的根本原因很可能是 CPLD 与 BMC 之间的通信链路(尤其是 JTAG 链路)未正常建立,或者硬件链路配置错误导致版本读取失败。同时 RunningStatus=0CpldStatus=0 进一步印证了该组件处于异常状态。建议首先通过 GetChipIdcode 命令验证 JTAG 链路是否畅通,然后核对 CSR 文件中的硬件拓扑配置。

cpu板的版本号是基于MultiLogicVersion和MultiLogicUnit这两个属性显示的,其中MultiLogicVersion属性是general_hardware组件代码中进行更新的,MultiLogicUnit属性来自于csr配置。请检查:

  1. 看下csr中CpuBoard这个对象的配置,是否有正确配置MultiLogicUnit属性的内容
  2. 检查general_hardware组件中task_update_logic_version这个函数,根据日志判断下这个函数有没有走进去

把模组重新拔插后恢复了
异常时没有task_update_logic_version的日志