cpld采用i2c升级失败问题分析
更新时间: 2026/05/30
在Gitcode上查看源码

问题背景

  • 单板类型:NA;
  • 软件版本:openUBMC 2512;
  • 涉及功能:安陆cpld,i2c,升级;
  • 预制条件:通过i2c2升级BCU板的CPLD,且CPLD升级包出自安路;
  • 触发条件:web页面cpld升级。
  • 业务表现:预期升级成功;实际升级失败。

问题复现步骤

WEB页面升级BCU的cpld。

关键日志信息

app.log日志如下:

定位过程

  1. 查看app.log日志可以看出,cpld在升级的时候block写失败;

  2. 把obj_fw.update_chip、obj_fw.update_chip.Write、info打印出来确认是不是nil,发现打印出来的信息的却是nil;

  3. 查看linux_kernel日志,对应时间有没有cpld的日志打印,结果发现没有内核打印;

  4. app.log日志日志显示代码流程走的是jtag升级cpld的分支,但实际上功能需要走的是i2c升级;代码在jtag升级分支里缺少相关的属性配置(jtag升级使用UpgradeChip而非I2CUpgradeChip)。

问题原因

日志显示代码流程走的是jtag升级cpld的分支,但实际上需要走的是i2c升级。代码在jtag升级分支里缺少相关的属性配置,jtag升级使用UpgradeChip而非I2CUpgradeChip,因此产生这个错误。

解决方案

配置cpld固件包为i2c链路升级,需要在固件包的update.cfg文件中配置UpdateLink=1,重新出包,尝试CPLD升级即可。