cpld i2c升级失败

问题描述

需要I2C 2下升级安路cpld 0x3c,每次在升级到47%时失败,
sr相关主要配置如下:
“Chip_Cpld”: {
“Address”: 120,
“AddrWidth”: 1,
“OffsetWidth”: 1,
“WriteTmout”: 0,
“ReadTmout”: 0
},
“LogicFirmware_BCU_1”: {
“UId”: “00000001020302031825”,
“Name”: “BCU_CPLD1”,
“Manufacturer”: “Huawei”,
“Version”: “#/Accessor_LogicVerId.Value”,
“Location”: 5,
“I2CUpgradeChip”: “#/Chip_Cpld”,
“I2CUpgradeLockChip”: “#/Chip_Cpld”,
“Routes”: “#/Accessor_JtagSwitch.Value”,
“DefaultRoute”: 0,
“FirmwareRoute”: 0,
“ValidMode”: 1,
“ValidAction”: “#/Accessor_AC.Value”,
“SoftwareId”: “CPLD-BC83AMDA”
},
日志如下:

详细日志如下:
2026-04-16 19:48:55.871502 web_backend NOTICE: init.lua(98): upload content length:number 173757, remaining capacity space:number 133885952
2026-04-16 19:48:56.012674 firmware_mgmt NOTICE: active_fructl.lua(96): get host type is Singlehost
2026-04-16 19:48:56.013213 firmware_mgmt NOTICE: utils.lua(34): The file path is Local.
2026-04-16 19:48:56.015945 firmware_mgmt NOTICE: init.lua(80): Upgrading_Flag is true
2026-04-16 19:48:56.046853 firmware_mgmt NOTICE: init.lua(41): update status to FS_SIMPLE_UPGRADING.
2026-04-16 19:48:56.070923 firmware_mgmt NOTICE: task_mgmt.lua(312): Create task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 0, State: New] successfully
2026-04-16 19:48:56.072348 firmware_mgmt NOTICE: task_service.lua(55): task create success, task id: 1839241420
2026-04-16 19:48:56.072944 firmware_mgmt NOTICE: task_id_mgmt.lua(30): add serial task id(1839241420) successfully
2026-04-16 19:48:56.074479 firmware_mgmt NOTICE: tasks_scheduling.lua(122): start tasks processer
2026-04-16 19:48:56.169777 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 0, State: Running] successfully
2026-04-16 19:48:56.170691 firmware_mgmt NOTICE: file_transfer.lua(169): start to move file [temp_upgrade_file.hpm] from tmp to shm
2026-04-16 19:48:56.178683 firmware_mgmt NOTICE: file_transfer.lua(174): move_file_s ok:true, err:0
2026-04-16 19:48:56.230037 firmware_mgmt NOTICE: validate_sign.lua(195): verify signature successfully
2026-04-16 19:48:56.231335 firmware_mgmt NOTICE: action.lua(37): Validate signature successfully
2026-04-16 19:48:56.233835 firmware_mgmt NOTICE: hpm_package.lua(782): ManufacturerValidateEnabled is false, there is no need to validate manufacture_id.
2026-04-16 19:48:56.311454 firmware_mgmt NOTICE: hpm_package.lua(582): parse cfg file successfully, Version:1.0 FileNum:2
2026-04-16 19:48:56.312688 firmware_mgmt NOTICE: hpm_package.lua(456): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:56.327278 firmware_mgmt NOTICE: hpm_package.lua(463): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:56.327932 firmware_mgmt NOTICE: hpm_package.lua(474): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:56.328640 firmware_mgmt NOTICE: hpm_package.lua(413): System product info:ProductId(0), ProductVendorID(0x00000001), ProductUniqueID(0x030ABF00)
2026-04-16 19:48:56.328959 firmware_mgmt NOTICE: hpm_package.lua(327): check product id successfully
2026-04-16 19:48:56.340983 firmware_mgmt NOTICE: hpm_package.lua(395): cfg-BoardIDList(65535) match all devices
2026-04-16 19:48:56.342500 firmware_mgmt NOTICE: hpm_package.lua(449): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:56.343205 firmware_mgmt NOTICE: hpm_package.lua(507): hard_revision:0, soft_revision:0
2026-04-16 19:48:56.343582 firmware_mgmt NOTICE: hpm_package.lua(440): get obj nil for Id=5
2026-04-16 19:48:56.344041 firmware_mgmt NOTICE: hpm_package.lua(527): revision number check successfully. Target revision=(0, 0, nil) and hpm revision=nil
2026-04-16 19:48:56.444834 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 0, State: Running] successfully
2026-04-16 19:48:56.456607 firmware_mgmt NOTICE: action.lua(47): Parse hpm package successfully
2026-04-16 19:48:57.058373 firmware_mgmt NOTICE: task_instance.lua(238): upgrade_task file_name=RIS-7631_2604014_1061110.hpm, FirmwareType=Cpld, fw_num=1, UniqueIDList=nil, sys_id=1, info_key=1_Cpld_1839241420
2026-04-16 19:48:57.154141 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 0, State: Running] successfully
2026-04-16 19:48:57.154687 firmware_mgmt NOTICE: info_mgmt.lua(71): create_info: info_key=1_Cpld_1839241420, FirmwareType=Cpld, task_id=1839241420, upg_fw_num=1
2026-04-16 19:48:57.256647 firmware_mgmt NOTICE: task_instance.lua(710): firmware(info key:1_Cpld_1839241420) do upgrade stages
2026-04-16 19:48:57.255553 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 0, State: Running] successfully
2026-04-16 19:48:57.257258 firmware_mgmt NOTICE: task_instance.lua(322): public initialize action start
2026-04-16 19:48:57.257643 firmware_mgmt NOTICE: hpm_package.lua(485): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:57.258333 firmware_mgmt NOTICE: hpm_package.lua(539): now uptime = 1435, firmware init time = 0
2026-04-16 19:48:57.260297 firmware_mgmt NOTICE: hpm_package.lua(456): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:57.261234 firmware_mgmt NOTICE: task_instance.lua(327): public initialize action end
2026-04-16 19:48:57.262508 firmware_mgmt NOTICE: info_mgmt.lua(230): info_key(1_Cpld_1839241420) upgrade set_stage: INITIALIZE → DIFF_PREPARE, 5
2026-04-16 19:48:57.358031 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 5, State: Starting] successfully
2026-04-16 19:48:57.366492 general_hardware NOTICE: upgrade_subject.lua(112): [on_upgrade_prepare] firmware_type:Cpld cur_firmware_type:Cpld
2026-04-16 19:48:57.367511 general_hardware NOTICE: upgrade_subject.lua(120): [on_upgrade_prepare] start upgrade Cpld
2026-04-16 19:48:57.368094 general_hardware NOTICE: signal.lua(173): [cpld]Start the system[1] Cpld upgrade prepare phase
2026-04-16 19:48:57.469382 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 7, State: Running] successfully
2026-04-16 19:48:57.475429 general_hardware NOTICE: upgrade_subject.lua(127): [on_upgrade_prepare] end upgrade Cpld
2026-04-16 19:48:57.482886 general_hardware NOTICE: fw_upgrade.lua(139): [cpld]get cpld_valid :nil
2026-04-16 19:48:57.486383 general_hardware NOTICE: fw_cfgs.lua(69): check fw uid(00000001020302031825) id(255) id_ex(4294967295) exist success
2026-04-16 19:48:57.634080 general_hardware NOTICE: fw_init.lua(194): get fw version 1.01
2026-04-16 19:48:57.634522 general_hardware NOTICE: fw_upgrade.lua(97): [cpld]get verion[1.01]
2026-04-16 19:48:57.636787 firmware_mgmt NOTICE: info_mgmt.lua(384): set FirmwareMode to Single
2026-04-16 19:48:57.637286 firmware_mgmt NOTICE: info_mgmt.lua(230): info_key(1_Cpld_1839241420) upgrade set_stage: DIFF_PREPARE → COMMON_PREPARE, 7
2026-04-16 19:48:57.651476 firmware_mgmt NOTICE: action.lua(86): public prepare action start
2026-04-16 19:48:57.694726 firmware_mgmt NOTICE: worker: start action in worker
2026-04-16 19:48:57.734399 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 7, State: Running] successfully
2026-04-16 19:48:57.785670 firmware_mgmt NOTICE: worker: execute before action script successfully
2026-04-16 19:48:58.074763 firmware_mgmt WARNING: listen_cpu_idle.lua(81): cpu idle rate : 72.280701754386
2026-04-16 19:48:58.692414 firmware_mgmt NOTICE: action.lua(92): public prepare action end
2026-04-16 19:48:58.693012 firmware_mgmt NOTICE: task_instance.lua(722): upgrade FirmwareMode Single
2026-04-16 19:48:58.798749 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 7, State: Running] successfully
2026-04-16 19:48:58.799704 firmware_mgmt NOTICE: info_mgmt.lua(230): info_key(1_Cpld_1839241420) upgrade set_stage: COMMON_PREPARE → PROCESS, 15
2026-04-16 19:48:58.896255 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 15, State: Running] successfully
2026-04-16 19:48:58.896776 firmware_mgmt NOTICE: task_instance.lua(352): sys_id=1, fw_type=Cpld, filename=/dev/shm/upgrade/1839241420/Firmware1
2026-04-16 19:48:58.903476 firmware_mgmt NOTICE: hpm_package.lua(492): get obj table: 0x5b3a2b7874c0 for Id=5
2026-04-16 19:48:58.907914 general_hardware NOTICE: upgrade_subject.lua(139): [on_upgrade_process] start upgrade Cpld
2026-04-16 19:48:58.909307 general_hardware NOTICE: signal.lua(196): [cpld]Start the system[1] Cpld upgrade process phase
2026-04-16 19:48:59.017638 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 47, State: Running] successfully
2026-04-16 19:48:59.020312 general_hardware NOTICE: upgrade_subject.lua(146): [on_upgrade_process] end upgrade Cpld
2026-04-16 19:48:59.021746 general_hardware NOTICE: fw_upgrade.lua(180): [CPLD] start jtag cpld upgrade
2026-04-16 19:48:59.022929 general_hardware NOTICE: fw_cfgs.lua(69): check fw uid(00000001020302031825) id(255) id_ex(4294967295) exist success
2026-04-16 19:48:59.023774 general_hardware NOTICE: process.lua(43): cpld fw matched, system_id = 1, fw.uid = 00000001020302031825, fw.csr.Name = BCU_CPLD1
2026-04-16 19:48:59.061688 general_hardware NOTICE: process.lua(464): [cpld]get cpld packages successful
2026-04-16 19:48:59.062922 general_hardware NOTICE: process.lua(198): [cpld]load_cpld_single
2026-04-16 19:48:59.063700 general_hardware NOTICE: process.lua(61): load file[0xa7d24]
2026-04-16 19:48:59.068704 general_hardware ERROR: process.lua(84): [cpld]block_write fail:attempt to call a nil value
2026-04-16 19:48:59.072494 firmware_mgmt ERROR: control.lua(205): Upgrade Cpld process failed, ret=-1
2026-04-16 19:48:59.072915 firmware_mgmt NOTICE: info_mgmt.lua(230): info_key(1_Cpld_1839241420) upgrade set_stage: PROCESS → COMMON_FINISH, 95
2026-04-16 19:48:59.079043 firmware_mgmt WARNING: listen_cpu_idle.lua(81): cpu idle rate : 72.789115646259
2026-04-16 19:48:59.098387 firmware_mgmt NOTICE: task_instance.lua(293): wait_msg_result stage=COMMON_FINISH, timeout=7200S, loop=1
2026-04-16 19:48:59.098886 firmware_mgmt NOTICE: info_mgmt.lua(341): info_key(1_Cpld_1839241420) upgrade failed, set_stage: COMMON_FINISH → COMPLETED
2026-04-16 19:48:59.161398 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 95, State: Running] successfully
2026-04-16 19:48:59.252893 firmware_mgmt NOTICE: tasks_scheduling.lua(127): upgrade queue is empty, exit the tasks processer
2026-04-16 19:48:59.253342 firmware_mgmt NOTICE: tasks_scheduling.lua(146): stop tasks processer
2026-04-16 19:48:59.255126 firmware_mgmt NOTICE: active_fructl.lua(96): get host type is Singlehost
2026-04-16 19:48:59.255635 firmware_mgmt NOTICE: active_single_host_fructrl.lua(73): active_single_host_fructrl fructrl get power status
2026-04-16 19:48:59.259285 firmware_mgmt NOTICE: state_simple_upgrading.lua(97): simple upgraded, current active mode is:nil, wait restart seconds:360000
2026-04-16 19:48:59.264298 firmware_mgmt NOTICE: init.lua(41): update status to FS_IDLE.
2026-04-16 19:48:59.266779 firmware_mgmt NOTICE: init.lua(80): Upgrading_Flag is false
2026-04-16 19:48:59.274432 firmware_mgmt NOTICE: task_mgmt.lua(174): task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 95, State: Exception] will be destroyed after 10 minutes
2026-04-16 19:48:59.275677 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 1839241420, StartTime: 2026-04-16T19:48:56+08:00, Progress: 95, State: Exception] successfully
2026-04-16 19:48:59.276041 firmware_mgmt NOTICE: task_instance.lua(626): Upgrade 1_Cpld_1839241420 completely, pre_version=1.01
2026-04-16 19:48:59.277527 firmware_mgmt NOTICE: task_instance.lua(632): firmware(info key:1_Cpld_1839241420) do upgrade ret:-1, pre_version:1.01
2026-04-16 19:49:00.161305 unknown_service NOTICE: prefix.lua(99): eth2: parse and save prefix info, router_addr: fe80::e654:e8ff:fea3:b07a, prefix_len: 64

环境信息

  • 软件版本:2512 lts sp1

分析结论

在块写失败了,是这么原因?

答案内容由AI生成,仅供参考:

总结

项目 内容
错误现象 I2C 升级安路 CPLD 在 47% 失败
错误代码 attempt to call a nil value
错误位置 process.lua(84)block_write 调用
根本原因 软件版本过低,缺少对 CPLD I2C 写操作的支持
推荐方案 升级至 OpenUBMC 930 或更高版本
参考依据 CpldChip Object 930 版本才支持写操作

结论:该问题极有可能由 软件版本不兼容 引起,建议优先升级系统版本以获得完整的 CPLD 写入支持能力。

点击此处查看详细分析解答

CPLD I2C 升级失败问题分析

问题概述

用户在使用 I2C 协议升级安路(Anlu)CPLD 时遇到失败问题,升级过程在 47% 进度处中断。日志显示关键错误信息为:

process.lua(84): [cpld]block_write fail: attempt to call a nil value
control.lua(205): Upgrade Cpld process failed, ret=-1

根本原因分析

错误类型定位

根据知识库和日志分析,attempt to call a nil value 是一个 Lua 脚本运行时错误,表明程序试图调用一个未定义或为 nil 的函数。这种错误通常发生在:

  1. 函数未正确加载或定义
  2. 依赖的模块或库缺失
  3. 版本兼容性问题导致 API 变更

结合上下文,该错误发生在执行 block_write 操作时,说明在调用写操作函数时出现了空值调用。

与现有案例的关联分析

此问题与知识库中【Document Chunks(DC)】引用编号为 56 的案例高度相似:

  • BCU CPLD 升级失败:同样的 process.lua(84) 行出现 block_write fail 错误
  • 升级进度模式:均在初级阶段(47%或相近)失败,表明问题出现在写入初始化阶段而非数据传输过程中
  • I2C 升级路径:均通过 I2C 接口执行升级操作

特别值得注意的是,在 DC #5 中已经明确指出:

“web 页面升级BCU CPLD 失败”,并伴随相同的 block_write fail 日志,说明此类问题是系统性的,而非个别硬件故障。

可能原因详解

1. 硬件链路问题(已验证)

尽管硬件链路不稳定可能是常见原因,但根据知识库案例 7 的分析结论:

“630版本升级失败的原因是因为硬件链路不通,330版本上升级没有报错,是因为软件没有检测这类错误,实际升级未生效。通过更换硬件,问题已解决。”

而在本案例中错误是明确抛出的 Lua 运行时异常,而非通信超时或响应错误,因此 硬件链路问题的可能性较低

2. 固件/软件版本兼容性问题(高概率)

关键证据:

  • 知识库中提到 CpldChip Object 的 630 版本不支持 BitIO 写操作,而 930 版本才支持
  • 当前升级流程可能依赖了不存在或不完整的驱动接口

推断结论:

当前环境可能存在 OpenUBMC 或 general_hardware 组件版本过低 的情况,导致无法正确支持安路 CPLD 的 I2C 写入操作,从而在调用 block_write 时触发 nil 函数调用。

解决方案建议

:white_check_mark: 推荐解决方案:升级至兼容版本

根据知识库文档 4 中技术支持的回答:

“CpldChip 630版本还不支持,需要930版本才可以支持。”

建议立即采取以下措施:

  1. 将系统升级至包含 CpldChip 930 版本及以上的 OpenUBMC 发行版
  2. 确保 mdb_interface 仓库版本为 1.80.88 或更高
  3. 验证 general_hardware 组件版本是否满足安路 CPLD 升级需求

:warning: 补充验证步骤

  1. 确认当前软件版本

    cat /etc/openubmc-release
    opkg list-installed | grep general-hardware
    
  2. 检查是否存在 BitIO 支持
    查询 /bmc/kepler/Chip/CpldChip/:Id 路径下是否有 BitIO 接口

  3. 临时规避方案(不推荐长期使用)
    若无法立即升级版本,可尝试:

    • 增加 I2C 写入重试机制(参考 DC#3)
    • 检查并优化 I2C 总线电气特性(上拉电阻、噪声干扰等)

总结

项目 内容
错误现象 I2C 升级安路 CPLD 在 47% 失败
错误代码 attempt to call a nil value
错误位置 process.lua(84)block_write 调用
根本原因 软件版本过低,缺少对 CPLD I2C 写操作的支持
推荐方案 升级至 OpenUBMC 930 或更高版本
参考依据 CpldChip Object 930 版本才支持写操作

结论:该问题极有可能由 软件版本不兼容 引起,建议优先升级系统版本以获得完整的 CPLD 写入支持能力。

看下linux_kernel日志,对应时间有没有cpld的日志打印

local ok, error = pcall(obj_fw.update_chip.Write, obj_fw.update_chip,
                        require'mc.context'.new(), 0, info)
if not ok then
    log:error('[cpld]block_write fail:%s', error)
    return defs.RET.ERR
end

把obj_fw.update_chip、obj_fw.update_chip.Write、info打印出来看看是不是nil

感谢回复,看了,内核没有打印