WH11003
(恒扬-胡田野)
1
问题描述
查看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"
环境信息
答案内容由AI生成,仅供参考:
总结
CPLD 版本不显示 的根本原因很可能是 CPLD 与 BMC 之间的通信链路(尤其是 JTAG 链路)未正常建立,或者硬件链路配置错误导致版本读取失败。同时 RunningStatus=0 和 CpldStatus=0 进一步印证了该组件处于异常状态。建议首先通过 GetChipIdcode 命令验证 JTAG 链路是否畅通,然后核对 CSR 文件中的硬件拓扑配置。
点击此处查看详细分析解答
根据您提供的 CpuBoard_1_010101 对象信息,RunningStatus=0 且 CpldStatus=0,同时 MCUVersion、PSIPVersion、LogicVersion 等版本字段均为空。结合上下文中的知识库数据,以下是对“CPLD版本不显示”问题的可能原因分析和建议排查方向。
可能原因
1. CPLD 或 MCU 运行状态异常
RunningStatus 为 U8 类型的属性,用于表示 CPLD 和 MCU 的实时运行状态,1 表示正常,0 表示异常。
CpldStatus 同样为 U8 类型,主要指示 CPLD 的健康状态或自检结果(部分描述中 0 表示正常,但也有描述 1 为正常;从您的结果来看 CpldStatus=0 且 RunningStatus=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_010101 的 Private 字段中 CpldTestNum=1、CpldTestReg=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 通信
Private 中 RefMCUChip=[] 为空,这可能表示 MCU 芯片参考未正确配置,导致系统无法通过 MCU 获取版本。
- 确保
RefMCUChip 指向正确的 MCU 对象,并检查 MCU 是否正常运行(可通过 RunningStatus 进一步确认)。
④ 查看相关日志
检查 app.log 中是否出现以下关键词:
[cpld]get cpld device info failed
[cpld]get version failed
ChipInfo 获取失败记录
这些日志能帮助定位具体的错误码及失败的接口。
总结
CPLD 版本不显示 的根本原因很可能是 CPLD 与 BMC 之间的通信链路(尤其是 JTAG 链路)未正常建立,或者硬件链路配置错误导致版本读取失败。同时 RunningStatus=0 和 CpldStatus=0 进一步印证了该组件处于异常状态。建议首先通过 GetChipIdcode 命令验证 JTAG 链路是否畅通,然后核对 CSR 文件中的硬件拓扑配置。
cpu板的版本号是基于MultiLogicVersion和MultiLogicUnit这两个属性显示的,其中MultiLogicVersion属性是general_hardware组件代码中进行更新的,MultiLogicUnit属性来自于csr配置。请检查:
- 看下csr中CpuBoard这个对象的配置,是否有正确配置MultiLogicUnit属性的内容
- 检查general_hardware组件中task_update_logic_version这个函数,根据日志判断下这个函数有没有走进去
WH11003
(恒扬-胡田野)
4
把模组重新拔插后恢复了
异常时没有task_update_logic_version的日志