升级EXU CPLD时BCU的传感器会产生告警

问题描述

升级EXU CPLD时触发了BCU的SEL事件:
9984 | 2000-01-01 13:40:32 | Major | 0x2400000E | Deasserted | CPU board voltage (0.000 V) at 0.9V detection point BCU_V_VCC_0V9 is lower than the undervoltage threshold (0.8 V) (SN:1024C8248379).
9983 | 2000-01-01 13:40:31 | Major | 0x2400000E | Deasserted | CPU board voltage (0.000 V) at 1.8V detection point BCU_V_VCC_1V8 is lower than the undervoltage threshold (1.6 V) (SN:1024C8248343).
9982 | 2000-01-01 13:40:31 | Major | 0x2400000E | Deasserted | CPU board voltage (0.400 V) at 12V detection point BCU_V_12V0_IN_COPPER is lower than the undervoltage threshold (10.8 V) (SN:1024C8248379).
事件配置已经关联了CPU的powergood信号:

        "Event_CpuBoard0V9_LowerVoltage": {
            "EventKeyId": "CpuBoard.LowerVoltage",
            "Condition": 0.8,
            "Hysteresis": 0.04,
            "LedFaultCode": "b01",
            "Reading": "<=/Scanner_R0v9.Value |> expr($1 >= 32767 ? 0.9 : ($1 * 2.5 / 32767))",
            "@Default": {
                "Reading": 12
            },
            "OperatorId": 2,
            "Enabled": "<=/CPU_1.PowerGood,<=/Component_ComCpu1.Health |> expr(($1 == 1 && $2 == 0) ? 1 : 0)",
            "AdditionalInfo": "3",
            "DescArg1": "#/Scanner_R0v9.Value |> expr($1 >= 32767 ? 0.9 : ($1 * 2.5 / 32767)) |> string.format('%0.3f', $1)",
            "DescArg2": "0.9V",
            "DescArg3": "BCU_V_VCC_0V9",
            "DescArg4": "0.8",
            "Component": "#/Component_CpuBoard"
        }

如何解决此类抖动?

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

四、总结与建议

措施 类型 推荐等级
添加 Debounce 防抖策略 必须 :star::star::star::star::star:
升级期间屏蔽非关键告警 建议 :star::star::star::star:
使用 JTAG Switch 切换链路 必须(多板共链时) :star::star::star::star::star:
优化 Sensor Reading 表达式 建议 :star::star::star:☆☆
检查 CSR/PSR 中 Unit & Route 配置 必须 :star::star::star::star:

最终建议流程:

  1. 在 SR 中为受影响传感器配置 至少 500ms 的 Assert Debounce
  2. 升级前通过 JtagSwitch 切换至目标链路;
  3. 启动升级流程,期间 BMC 主动抑制 BCU 侧非关键电压告警;
  4. 升级完成后,系统下电再上电,使新 CPLD 生效;
  5. 全面验证传感器读数与事件无异常。

通过以上综合措施,可有效消除因 EXU CPLD 升级引发的 BCU 传感器误告警问题,提升系统稳定性与运维体验。

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

升级 EXU CPLD 时 BCU 传感器产生告警问题的分析与解决方案

在升级 EXU CPLD 过程中触发 BCU 传感器告警,表现为电压类传感器(如 BCU_V_VCC_0V9BCU_V_VCC_1V8BCU_V_12V0_IN_COPPER)上报 欠压(Undervoltage)告警事件,尽管实际硬件并未真正发生断电或电压异常。此类问题属于典型的 升级过程中的误告警(spurious alert),通常由信号抖动、电源同步控制不当、CPLD 升级导致 JTAG/I2C 链路干扰引起。

以下基于提供的上下文信息,从根本原因分析、告警机制解读、防抖策略优化、配置建议等方面系统阐述解决方案。


一、问题现象与事件分析

1. 事件详情

9984 | 2000-01-01 13:40:32 | Major | 0x2400000E | Deasserted | CPU board voltage (0.000 V) at 0.9V detection point BCU_V_VCC_0V9 is lower than the undervoltage threshold (0.8 V)
9983 | 2000-01-01 13:40:31 | Major | 0x2400000E | Deasserted | CPU board voltage (0.000 V) at 1.8V detection point BCU_V_VCC_1V8 is lower than the undervoltage threshold (1.6 V)
9982 | 2000-01-01 13:40:31 | Major | 0x2400000E | Deasserted | CPU board voltage (0.400 V) at 12V detection point BCU_V_12V0_IN_COPPER is lower than the undervoltage threshold (10.8 V)
  • 所有事件为 Deasserted(去断言),说明是短暂触发后恢复。
  • 多个电压传感器几乎同时触发,但电压值显示异常(如全为0或接近0),不符合真实电源故障特征。
  • 升级对象为 EXU CPLD,而告警来源为 BCU 板卡传感器,属于跨板干扰。

2. 告警条件配置解析

Event_CpuBoard0V9_LowerVoltage 为例,其启用条件如下:

"Enabled": "<=/CPU_1.PowerGood,<=/Component_ComCpu1.Health |> expr(($1 == 1 && $2 == 0) ? 1 : 0)"
  • 只有当 PowerGood == 1(电源正常)且 Health == 0 时才会启用该事件。
  • 此逻辑意图是:仅在系统加电且组件健康状态异常时触发。
  • 但即便如此,在 EXU CPLD 升级过程中可能短暂拉低某些共享信号线或造成 I2C 总线拥塞,导致 BCU 侧误读传感器值。

二、根本原因分析

根据知识库和常见硬件设计模式,该问题成因可归纳如下:

1. CPLD 升级过程对 JTAG/I2C 总线的干扰

  • EXU 与 BCU 之间通过 I2C 或 JTAG 链路共享连接(尤其是在非天池架构中使用 SMC 或直接连接的情况)。
  • 在升级 EXU CPLD 时,若采用 JTAG 编程方式(如 SVF 文件写入),会占用 JTAG 总线并可能引发总线上其他设备通信异常。
  • BCU 的电压传感器数据通常由 CPLD/MCU 通过 ADC 采集并经 I2C 上报 BMC,总线拥塞可能导致读取失败或返回 0

:white_check_mark: 文档依据:搜索结果#5 指出,“多厂商cpld升级时,日志中出现‘[cpld]get cpld device info failed’”,可能是 JTAG链路未切换或未选通 所致。

2. 传感器读取超时或返回默认错误值

  • 当 I2C 总线被阻塞时,ADC 读取失败,Scanner 返回默认值 0.000V
  • BMC 依据此值判断低于门限,从而触发 Minor/Major 欠压告警
  • 虽然后续恢复正常(Deasserted),但已记录至 SEL 日志。

3. 防抖策略缺失或不足

  • 虽然事件中引用了 PowerGood 作为使能条件,但 未配置有效的去抖(Debounce)机制
  • 若无足够的时间延迟判断,短暂干扰即可触发告警。

:white_check_mark: 文档依据:搜索结果#1#3#9 多次强调 “防抖策略在SR配置中非常重要,大量的误告警、FIT告警等问题,都与SR中配置的告警防抖策略息息相关。”


三、解决方案与最佳实践

:white_check_mark: 方案一:增强防抖(Debounce)机制

SR 或 CSR 配置中添加 Debounce 策略,避免瞬时干扰触发告警。

推荐配置:

"DebouncePolicy": {
    "AssertDelayMs": 500,
    "DeassertDelayMs": 200,
    "RetriggerCount": 3,
    "HysteresisMs": 100
}
  • AssertDelayMs: 告警触发前延迟 500ms,连续检测到异常超过该时间才上报。
  • 配合 RetriggerCount,防止单次误读触发。
  • 所有涉及 跨板升级影响的传感器 均应配置合理防抖。

:pushpin: 注意:所有 Debounce 对象必须至少被一个 Scanner 引用(见文档原文)。


:white_check_mark: 方案二:升级期间临时屏蔽非关键告警(推荐用于批量升级)

利用 “无感升级”特性(CPLD无感升级特性),在升级期间主动屏蔽无关告警。

实现方式:

  1. 在升级流程开始前,通过 BMC 软件广播信号,通知相关模块进入“升级模式”。
  2. 所有非关键传感器(如非主电源轨、辅助电压等)临时禁用告警上报。
  3. 升级完成后,恢复告警功能。

:white_check_mark: 知识图谱支持:

  • CPLD无感升级特性: “enable seamless firmware updates for CPLD without interrupting 业务, preventing false alarms during upgrades”
  • 关系:CPLD无感升级特性 -- 确保无意外告警 --> 告警无误

:white_check_mark: 方案三:隔离升级链路,避免总线冲突

措施:

  • 确保 EXU 与 BCU 的 JTAG/I2C 链路独立可控
  • 升级前通过 Accessor_JtagSwitch 显式切换链路:
# 切换到 EXU 的 JTAG 链路(假设 FirmwareRoute=0)
busctl --user set-property bmc.kepler.hwproxy \
  /bmc/kepler/Accessor/Accessor_JtagSwitch_010101 \
  bmc.kepler.Accessor Value t 0

# 验证是否生效
busctl --user introspect bmc.kepler.hwproxy /bmc/kepler/Accessor/Accessor_JtagSwitch_010101

:white_check_mark: 依据:搜索结果#5 提供了该命令的标准使用方法。


:white_check_mark: 方案四:优化传感器读取逻辑(软件层)

修改 Scanner 数据获取表达式,加入有效性判断:

"Reading": "<=/Scanner_R0v9.Value |> expr($1 >= 32767 || $1 == 0 ? null : ($1 * 2.5 / 32767))"
  • 当读取值为 0 或最大值(ADC 故障码)时,返回 null,表示不可信数据。
  • BMC 自动忽略无效值,不参与告警判定。

:white_check_mark: 方案五:校验并统一固件路由与硬件设计一致性

检查以下几点:

  • LogicFirmware_EXU_xx.FirmwareRoute 是否正确指向 EXU 的专属链路。
  • CSR 中是否正确定义了 Unit TypeEXU,与 Unit Name 对应。
  • BCU 上的 SMC 是否在非天池架构下被错误配置(参考 搜索结果#7 中关于“非SMC方案中配置SMC”的疑问)。

四、总结与建议

措施 类型 推荐等级
添加 Debounce 防抖策略 必须 :star::star::star::star::star:
升级期间屏蔽非关键告警 建议 :star::star::star::star:
使用 JTAG Switch 切换链路 必须(多板共链时) :star::star::star::star::star:
优化 Sensor Reading 表达式 建议 :star::star::star:☆☆
检查 CSR/PSR 中 Unit & Route 配置 必须 :star::star::star::star:

最终建议流程:

  1. 在 SR 中为受影响传感器配置 至少 500ms 的 Assert Debounce
  2. 升级前通过 JtagSwitch 切换至目标链路;
  3. 启动升级流程,期间 BMC 主动抑制 BCU 侧非关键电压告警;
  4. 升级完成后,系统下电再上电,使新 CPLD 生效;
  5. 全面验证传感器读数与事件无异常。

通过以上综合措施,可有效消除因 EXU CPLD 升级引发的 BCU 传感器误告警问题,提升系统稳定性与运维体验。

意思是产生了告警消除的事件吗,那先联系硬件排查告警产生的原因

9970     | 2000-01-01 13:40:00  | Minor        | 0x24000012   | Deasserted   | Failed to obtain the voltage at 0.9V detection point BCU_V_VCC_0V9 on the CPU board (SN:1024C8248343).
9969     | 2000-01-01 13:39:59  | Major        | 0x2400000D   | Asserted     | CPU board voltage (0.000 V) at 0.9V detection point BCU_V_VCC_0V9 is lower than the undervoltage threshold (0.8 V) (SN:1024C8248379).
9968     | 2000-01-01 13:39:59  | Major        | 0x24000010   | Deasserted   | CPU board voltage (1.250 V) at 0.9V detection point BCU_V_VCC_0V9 exceeds the overvoltage threshold (1.0 V) (SN:1024C8248379).
9967     | 2000-01-01 13:39:53  | Major        | 0x2400000F   | Asserted     | CPU board voltage (1.250 V) at 0.9V detection point BCU_V_VCC_0V9 exceeds the overvoltage threshold (1.0 V) (SN:1024C8248379).
9966     | 2000-01-01 13:39:52  | Major        | 0x2400000D   | Asserted     | CPU board voltage (0.000 V) at 3.3V detection point BCU_V_VCC_3V3 is lower than the undervoltage threshold (3.0 V) (SN:1024C8248343).

EXU CPLD升级在13:39~13:40,这段时间前后有告警产生和告警消除,EXU CPLD管理CPU的供电,升级期间导致了传感器读值的抖动,是否应该从防抖方面进行解决?

事件的数据来源为cpld上报,可以查看Scanner_R0v9是否配置防抖即Debounce属性,没配置应该进行配置,配置了建议联系cpld排查问题

    "MidAvg_R0v9": {
        "WindowSize": 6,
        "DefaultValue": 11796
    },
    "Scanner_R0v9": {
        "Chip": "#/Smc_CpuBrdSMC",
        "Offset": 4868,
        "Size": 2,
        "Mask": 65535,
        "Type": 0,
        "Period": 3000,
        "Debounce": "#/MidAvg_R0v9",
        "ScanEnabled": "<=/CPU_1.PowerGood,<=/Component_ComCpu1.Health |> expr(($1 == 1 && $2 == 0) ? 1 : 0)",
        "NominalValue": 32767,
        "@Default": {
            "ScanEnabled": 0
        },
        "Status": 0,
        "Value": 0
    },

0.9V配置了防抖,其它电压没配,电压值都是从鲲鹏模组CPLD获取的,非自研CPLD。是防抖策略不合理吗?

这块需要你们对应开发和cpld硬件进行确认这块防抖是否合理