cpld采用i2c升级失败问题分析
更新时间: 2026/05/30
在Gitcode上查看源码问题背景
- 单板类型:NA;
- 软件版本:openUBMC 2512;
- 涉及功能:安陆cpld,i2c,升级;
- 预制条件:通过i2c2升级BCU板的CPLD,且CPLD升级包出自安路;
- 触发条件:web页面cpld升级。
- 业务表现:预期升级成功;实际升级失败。
问题复现步骤
WEB页面升级BCU的cpld。
关键日志信息
app.log日志如下:
定位过程
查看app.log日志可以看出,cpld在升级的时候block写失败;
把obj_fw.update_chip、obj_fw.update_chip.Write、info打印出来确认是不是nil,发现打印出来的信息的却是nil;
查看linux_kernel日志,对应时间有没有cpld的日志打印,结果发现没有内核打印;
app.log日志日志显示代码流程走的是jtag升级cpld的分支,但实际上功能需要走的是i2c升级;代码在jtag升级分支里缺少相关的属性配置(jtag升级使用UpgradeChip而非I2CUpgradeChip)。
问题原因
日志显示代码流程走的是jtag升级cpld的分支,但实际上需要走的是i2c升级。代码在jtag升级分支里缺少相关的属性配置,jtag升级使用UpgradeChip而非I2CUpgradeChip,因此产生这个错误。
解决方案
配置cpld固件包为i2c链路升级,需要在固件包的update.cfg文件中配置UpdateLink=1,重新出包,尝试CPLD升级即可。