hi1711 上下电BMC发送指令与CPLD接收不一致

我们在调试远程上下电功能时,BMC端点击上电,log显示成功发送

1970-01-01 08:59:41.860659 fructrl NOTICE: fructrl_obj_mgnt.lua(40): host 1 call power ctrl, ctrl_type=GracefulShutdown, reason=ChassisControlCommand, fruid=0
1970-01-01 08:59:41.860950 fructrl NOTICE: powerapi.lua(153): [System:1]PowerCtrl is called by bmc.kepler.web_backend
1970-01-01 08:59:41.861244 fructrl NOTICE: powerapi.lua(157): [System:1]pctrl_type=GracefulShutdown, restart_cause=ChassisControlCommand, fruid=0
1970-01-01 08:59:41.862223 fructrl NOTICE: pwr_cycle.lua(39): [System:1]cycle interrupt flag is set to true!
1970-01-01 08:59:41.862683 fructrl NOTICE: ctrl_state.lua(70): [System:1]From NoAction to Offing.
1970-01-01 08:59:41.865686 fructrl NOTICE: powerapi.lua(184): CurrentRestartType=255
1970-01-01 08:59:41.867297 fructrl NOTICE: hotswap_state.lua(231): [System:1]Current event is FruDeactivated, state is M6, uptime: 12451s.
1970-01-01 08:59:41.868425 fructrl NOTICE: fructrl.lua(220): [System:1]execute power off
1970-01-01 08:59:41.870850 fructrl NOTICE: pwr_button.lua(51): [System:1]prepate to send short button signal through hwproxy Accessor
1970-01-01 08:59:41.876977 product_mgmt NOTICE: fructl_mdb.lua(65): PowerState changed to OFFING
1970-01-01 08:59:41.878151 firmware_mgmt NOTICE: active_manage.lua(151): Systems PowerState changed to OFFING
1970-01-01 08:59:41.875453 thermal_mgmt NOTICE: fructl_data_keeping.lua(62): PowerState changed to OFFING
1970-01-01 08:59:41.875749 sensor ERROR: sel_management.lua(1309): No need to process fructrl changes because boot not exist.
1970-01-01 08:59:41.882528 host_agent NOTICE: power_monitor.lua(33): power monitor: power state change to OFFING
1970-01-01 08:59:41.882653 bios NOTICE: signal.lua(63): power state changed set_option_flag = 0, set_effective_flag = 0
1970-01-01 08:59:41.877613 unknown_service NOTICE: image_service.lua(468): power off, ready for screenshot and video recording
1970-01-01 08:59:41.882990 bios ERROR: bios_service.lua(2112): bios_service: exist task running.
1970-01-01 08:59:43.249938 fructrl NOTICE: pwr_button.lua(55): [System:1]Notify fru0 cpld to send short button signal through hwproxy Accessor
1970-01-01 08:59:46.370863 unknown_service ERROR: video.lua(538): record_video: frame_process data over iframeno = 12, file_len = 1733818
1970-01-01 08:59:51.323324 unknown_service NOTICE: screen.lua(180): recover screen poweroff state to false

查找代码,实际过程执行了0延时1秒两种操作

但是在CPLD端抓short button信号,只能抓到低电平,6秒时长内,收不到高电平,有时候抓到的时long button signal变化,或者long short都会变,这是什么原因?

答案内容由AI生成,仅供参考:
总结:BMC 已正确发送 short button signal,但 CPLD 端抓到的却是 6 秒低电平(长按特征)或无高电平,这很可能由 CPLD 固件逻辑错误、版本不匹配、硬件信号异常 引起。建议优先检查 CPLD 固件版本与 BMC 的配套关系,并对照 CPLD 寄存器定义排查输出波形控制逻辑。

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

根据您提供的日志和现象,BMC 已成功调用 pwr_button.lua 通知 fru0 cpld 发送 short button signal(短按信号),但 CPLD 端抓到的信号却是 持续 6 秒的低电平(无法收到高电平),有时甚至出现长按信号或长短信号交替。以下基于上下文知识库分析可能的原因及排查方向。


1. BMC 侧信号已正常下发,问题出在 CPLD 执行层

日志中存在明确打印:

Notify fru0 cpld to send short button signal through hwproxy Accessor

这表明 BMC 已完成软件层面的信号封装并通过 hwproxy 接口传递至 CPLD。
根据上下文:

BMC transmits power control signals to the CPLD, which is responsible for executing the actual hardware-level power-on/off operations.
CPLD 是实际执行硬件上下电操作的组件。

因此,信号到达 CPLD 后,CPLD 内部的逻辑是否正确解析并生成对应电平波形是当前的可疑点。


2. 按钮信号为电平检测,CPLD 可能错误识别或输出异常

上下文明确指出:

规则7:按钮事件是电平检测,会检测电平的持续时间,以长按为例,检测到约6s时就上报事件。

  • 短按信号应为 短暂的高电平脉冲(通常几百毫秒)。
  • 长按信号则为 持续约6秒的低电平或高电平(取决于具体硬件定义)。

您测量到 6秒低电平且无高电平,这恰好符合 长按信号的电平特征。可能的原因包括:

  • CPLD 固件逻辑异常:将接收到的 short 命令错误地解释为 long 命令,或者因内部状态机错乱导致输出了长按波形。

  • CPLD 硬件寄存器配置错误:导致信号输出时长被固定为 6 秒。

  • CPLD 版本与 BMC 不配套:上下文多次强调:

    请检查固件版本是否配套,特别是CPLD版本。或将固件更新至最新版本。

    不同版本的 CPLD 对 BMC 命令的解析方式可能存在差异,需确认两者版本是否对齐。


3. 信号可能被物理因素影响

  • 信号线短路或拉低:若 CPLD 输出端被硬件意外拉低(如电平冲突、漏极开路),会导致测量点始终为低电平。
  • 抓取点位置不正确:短按信号可能是一个 脉冲边沿,如果抓取的是静态电平而非边沿变化,会误判为持续低电平。
  • CPLD 与业务系统之间的引脚定义不匹配:信号可能需要经过电平转换或反相,实际有效电平与测量预期不符。

4. CPLD 自身状态异常

您可尝试通过 BMC 接口查询 CpldStatus 字段:

CpldStatus 是用于指示 CPLD 内部自检状态的属性,值 0 表示正常。
BMC Interface 通过监控 CpldStatus 检测 CPLD 自检失败并上报告警。

如果 CpldStatus 不为 0,则说明 CPLD 自检失败,可能无法正确执行 BMC 下发的指令。


5. 建议排查步骤

步骤 操作 依据
1 确认 CPLD 固件版本与 BMC 版本匹配 文档块1:检查固件版本是否配套,特别是CPLD版本
2 检查 CPLD 与 BMC 之间的命令字是否一致 文档块6:BMC与CPLD对齐SMC命令字,确认命令字一致
3 抓取 BMC 与 CPLD 之间的 I2C/SMBus 通信,验证 BMC 下发的命令内容是否与预期相同 CPLD 通过 I2C 接口通信(如 I2C6)
4 使用 Set CPLD register 命令(IPMI OEM 命令 01h)手动读写 CPLD 控制寄存器,确认输出配置 文档块7提供了设置CPLD寄存器的方法
5 查询 CPLD 制造商 ID 和通道信息(命令 64h),验证 CPLD 是否处于正常工作模式 文档块5:Get Cpld Manufacturer ID
6 联系硬件工程师,在 CPLD 输出引脚直接测量波形,确认信号完整性 文档块3:如果未下电,请联系硬件定位

总结:BMC 已正确发送 short button signal,但 CPLD 端抓到的却是 6 秒低电平(长按特征)或无高电平,这很可能由 CPLD 固件逻辑错误、版本不匹配、硬件信号异常 引起。建议优先检查 CPLD 固件版本与 BMC 的配套关系,并对照 CPLD 寄存器定义排查输出波形控制逻辑。

建议加重试机制多尝试几次写1

通过逻辑分析仪抓取IIC总线波形,发现写0和写1总线上均按照协议将数据发送出去了,但是CPLD在接收到数据后,在BMC没有发送改变的情况在,自动将电平做了调整,现在CPLD端在排查问题

IIC总线数据如下:

请问是否已定位出原因?

BMC发送短按按照先高后低,间隔1.3秒发送,但是CPLD解析到的波形180ms左右就进行了翻转,通过抓取对应时刻的波形,发现是BMC发送该地址的读操作,CPLD执行了状态变化,导致后续CPLD状态机混乱了,CPLD做了处理,BMC下图中状态同步改成了先发送1.后发送0,强制下电和上电功能正常了