升级riser卡的cpld失败问题分析
更新时间: 2026/06/01
在Gitcode上查看源码

问题背景

  • 单板类型:NA;
  • 软件版本:OpenUBMC2512;
  • 涉及功能:riser卡,cpld,升级;
  • 触发条件:web页面升级riser的cpld。
  • 业务表现:预期升级cpld成功;实际升级cpld到95%时失败了。

问题复现步骤

通过web升级riser卡的cpld固件S950X00-IEU(BC85PRUE)-CPLD_1.12.hpm,查看升级进度;

关键日志信息

web页面升级失败信息: app.log日志文件中相关日志:

定位过程

  1. 确认当前CPLD升级的拓扑场景是否为紫光CPLD级联场景,如果是,进一步确认general_hardware组件版本是否为1.100.51以上; general_hardware组件版本较低时,不支持紫光CPLD级联场景的升级,这种情况下报错日志和提供的日志内容一致。
  2. 确认为紫光场景,general_hardware版本不在1.100.51以上,通过最新的bmc升级,问题不再出现,但是出现升级cpld版本号不更新的问题,日志信息如下
  3. 日志分析上述报错信息和升级无关,日志升级流程应该是没问题的,需要进一步确认下cpld固件的版本和环境版本是否一致;如果两者不一致的话那需要仔细看下具体流程。调试I2C紫光级联升级场景时,紫光cpld要求每次写入都要写满256字节,但是级联场景没法一次写入这么多。于是解决方案为每次写入动作先写入前128字节,然后间隔30ms,再写入后128字节(后写入的数据不包含本次写入的数据头,从而让cpld认为两次写入是同一次写入动作)。如果固件版本号和环境不一致,那就需要找硬件确认下这种写入动作和其中的延时是否有影响。

问题原因

紫光CPLD级联场景下,general_hardware组件版本较低,导致升级失败;紫光的CPLD升级需要固定的版本和环境,如果不一致则会出现升级后信息不全的情况。

解决方案

BMC侧升级general_hardware组件版本重新出包升级后,再次按照问题复现步骤升级riser的cpld即可,同时固件版本需要与环境相匹配。