问题描述
基于950的新机型,借用基础板,扩展板是我们自己的,升级BCU失败。
环境信息
- 软件版本:[OpenUBMC2606]
重现步骤
升级BCU CPLD必现。

分析结论
生成的拓扑:
与硬件原理图保持一致。
目前让硬件写死JTAG链路为Channel1依然无法升级,获取不到cpld device info,手动调用命令打印出来是空,想知道这是什么东西,出现问题可能与什么有关。
基于950的新机型,借用基础板,扩展板是我们自己的,升级BCU失败。
升级BCU CPLD必现。

生成的拓扑:
答案内容由AI生成,仅供参考:
“获取不到cpld device info,手动调用命令打印出来是空”的根本原因在于BMC与目标CPLD之间未建立有效的JTAG通信。这可能由链路切换未完成、CSR定义不匹配、硬件信号异常或总线接口类型错误引起。建议优先验证JTAG链路的软件切换命令是否生效,并对比CSR中的路由配置与实际硬件拓扑,同时结合Linux内核日志和TDO波形测量进一步缩小问题范围。
根据您提供的描述——在基于950的新机型上,借用基础板(BCU),升级自研扩展板上的BCU CPLD时失败,且手动获取“cpld device info”返回空值——结合已知的openUBMC社区资料和知识图谱,这一现象通常指向JTAG链路配置、CSR描述或硬件连通性方面的异常。以下是对该问题的详细分析和排查方向。
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Cpld/Cpld_1_0101 bmc.kepler.Chip.JtagTarget GetChipIdcode a{ss} 0
返回为空或失败,表示BMC未能成功从CPLD读取到预期的响应。[cpld] get cpld device info failed时,大概率是JTAG链路没有切过去,需要先通过busctl设置JtagSwitch的Value属性来选通目标CPLD(例如EXU为0,BCU为1),然后再尝试获取芯片信息。FirmwareRoute与实际选通通道不匹配,BMC仍可能访问错误的链路,导致无法读到IDCODE。关键引用:
知识图谱实体
JtagOverLocalBus_1描述中提到:“JtagOverLocalBus_1 fails to be created due to unsupported bus type or missing required library。”——该接口可能因配置或依赖问题未能正确初始化。
ChipInfo、UpgradeChip、LogicFirmware等属性。若CSR中未正确定义这些属性(如ChipInfo指向错误的Accessor),BMC无法定位到具体的CPLD芯片。BCU_CPLD与Hisport_0的关系指出:“BCU_CPLD uses Hisport_0 during upgrade, which differs from the CSR-defined JtagOverLocalBus_1。”——这表明升级时使用的总线类型与CSR定义不符,可能导致链路访问失败。UpgradeChip属性在JTAG升级中是必需项,若误配置为I2C相关属性(如I2CUpgradeChip),同样会引发兼容性问题。dmesg查看内核日志,若出现svf_scan_register错误或TDO采样值为0,说明JTAG链路虽已选通但无法正确回读数据。社区案例参考:
文档块4(扩展板CPLD Jtag升级失败)中的内核日志显示:“verify TDO [5] expect:0xfe, sample:0x0”——sample为0表示链路完全读不到数据,此情况下需要CPLD逻辑工程师测量TDO波形确认硬件连通性。
Cpld_1被描述为“CLU board”上的CPLD,但仍通过JtagOverLocalBus_1连接,说明不同板卡可能共享同一总线,但需要通过JtagSwitch进行动态选择。基于上下文中的社区实践,建议按以下步骤定位:
确认JTAG链路切换状态
在BMC命令行执行:
busctl --user set-property bmc.kepler.hwproxy /bmc/kepler/Accessor/Accessor_JtagSwitch_010101 bmc.kepler.Accessor Value t 1
设置对应链路(BCU通常为1),然后再次尝试获取IDCODE。
检查CSR文件中的ChipInfo配置
查阅BCU板对应的CSR文件,确认以下属性正确:
UpgradeChip: 应指向具体的Cpld对象(如#Cpld_1);ChipInfo: 应包含有效的Accessor路径;FirmwareRoute: 与实际JTAG通道号一致。分析内核日志与app.log
执行dmesg,查找cpld std load failed、svf execute error等关键字;同时查看/var/log/app.log中的general_hardware日志,确认升级流程是否进入正确的JTAG分支。
硬件波形测量
若所有配置无误但sample值仍为0,需由硬件工程师在CPLD的TDO引脚上测量是否有数据输出,以排除PCB走线或电平转换问题。
验证升级包与CSR的匹配性
确保使用的CPLD升级包(.svf或.hpm)是基于当前硬件版本正确生成的,并且update.cfg中UpdateLink配置为JTAG(通常为空或0),而非I2C(1)。
“获取不到cpld device info,手动调用命令打印出来是空”的根本原因在于BMC与目标CPLD之间未建立有效的JTAG通信。这可能由链路切换未完成、CSR定义不匹配、硬件信号异常或总线接口类型错误引起。建议优先验证JTAG链路的软件切换命令是否生效,并对比CSR中的路由配置与实际硬件拓扑,同时结合Linux内核日志和TDO波形测量进一步缩小问题范围。
注:以上分析严格基于您提供的新机型背景及openUBMC版本,并引用了知识图谱中的实体关系(如
BCU_CPLD、JtagOverLocalBus_1、UpgradeChip等)以及社区FAQ、问题分析文档中的定位方法。
dump_20260717-2327.tar.gz (8.8 MB)
改命令为扫链命令,扫链返回空需要硬件定位具体原因
![]()
这个命令