项目平台:KP920S-VPX

管理固件:OpenBMC 26.12.00.01
操作系统:Kylin Linux Advanced Server V10 (GFB),aarch64
关键词:鲲鹏 920、VPX、OpenBMC、SMC、CPLD、ADC、PWM、TACH、N500、iBMA

本文记录 KP920S-VPX 板卡从硬件接入到 OpenBMC 页面可用的一套适配过程。目标不是只把几个页面“点亮”,而是把电压、温度、风扇、电源、网卡和主机性能数据接入统一管理链路,并让每条链路都能解释清楚“数据从哪里来、经过谁、最终由谁处理”。

这次适配的核心思路可以概括为一句话:BMC 作为统一管理入口,核心板通过 SMC 提供处理器域信息,载板 CPLD 负责本地硬件控制和协议转换,主机侧由 iBMA 补齐操作系统与硬盘健康数据。

图 1 KP920 VPX OpenBMC 系统架构

一、适配目标与系统边界

项目需要在 OpenBMC 中完成以下能力:

1. 采集各路板级电压,并建立 Sensor、门限和告警状态。

2. 通过 BMC 与核心板之间的 SMC 接口读取 CPU 核温、核心板温度等信息。

3. 采集载板温度、电压以及客户子板健康信息。

4. 通过 BMC 与载板 CPLD 的 SMC 通信完成上下电控制。

5. 通过 N500 网卡的 I2C 带外管理接口读取 MAC、IP、Link 状态等信息。

6. 由 iBMA 采集 CPU、内存、磁盘使用率和硬盘健康信息。

7. 由 CPLD 控制 4 路 PWM 和检测 4 路 TACH,实现自动调速、手动调速和单路风扇控制。

系统边界需要先划清,否则联调时很容易把问题归错位置:

• BMC 负责:策略、协议解析、Sensor 建模、门限判断、Web 展示、告警和部分外设访问。

• 核心板负责:提供 CPU 与核心板侧温度等处理器域数据。

• 载板单片机负责:采集载板和客户子板的原始健康数据。

• 载板 CPLD 负责:串口数据汇聚、SMC 协议转换、电源时序和风扇 PWM/TACH 控制。

• 主机操作系统与 iBMA 负责:CPU、内存、磁盘性能和硬盘健康信息。

• N500 网卡负责:通过自己的 I2C OOB 接口提供网卡资产、端口和链路信息。

图 2 OpenBMC 首页资源概览

二、传感器、CPU 与风扇的数据流方向

数据流方向是本次适配的主线。把方向写清楚后,代码该部署在 BMC、CPLD 还是主机侧就不会混。

这张表也解释了为什么不能把所有传感器都塞进同一条采集路径:电压是 BMC 直接采样,CPU 温度走核心板 SMC,载板和客户子板走“单片机—CPLD—BMC”,主机性能则必须由 iBMA 补充。

三、各路电压采集

板级电压由 BMC 的 ADC 管脚采集。硬件侧不能把 12 V、5 V 等电压直接送到 ADC,需要先经过分压、滤波和必要的钳位保护,使输入落在 ADC 允许范围内。

3.1 采集链路

图 3 传感器数据流的三条采集路径

推荐链路如下:

电压测试点 -> 分压网络 -> RC 滤波 -> 保护电路 -> BMC ADC -> 原始码值 -> 电压换算 -> Sensor -> 门限与告警

实现时至少要确定四项配置:

• ADC 通道与原理图测试点一一对应。

• 分压电阻比例、ADC 参考电压和分辨率明确。

• Sensor 名称、单位、精度和小数位统一。

• 轻微、严重、紧急门限与恢复策略明确。

电压换算可以写成下面的示意代码。这里的比例和参考电压均为公式示例,不是项目私有参数。

raw = adc.read(channel)
voltage = raw * vref / ((1 << adc_bits) - 1) * divider_ratio
sensor.update(voltage)

如果 ADC 前端存在运放、校准系数或负偏差,应增加校准步骤,而不是直接在页面上“改一个看起来差不多的值”。

3.2 门限与稳定性

联调阶段最容易出现的问题不是“采不到”,而是“读数抖动导致告警反复出现”。建议在 BMC 侧加入以下处理:

1. 连续多次采样后再更新 Sensor。

2. 告警门限和恢复门限之间留出回差。

3. 对瞬时尖峰做限幅或中值滤波。

4. 保留最近一次有效值,并标记通信或采样异常。

5. 把“传感器故障”和“电压越限”拆成两个状态。

图 4 传感器页面中的温度与电压

当前页面中可以看到 1.11 V、1.8 V、3.3 V、5 V、12 V 等电压通道,状态均为 OK。Sensor 列表同时展示了门限列,便于在联调时直接核对换算结果和告警配置是否匹配。

注意:不同板卡的 ADC 分压比、参考电压和采样周期不同,文章中的换算公式只说明实现方法,不能直接作为其他项目的硬件参数。

四、CPU 核温与核心板温度

CPU 核温和核心板温度由 BMC 通过核心板 SMC 接口读取。这里的 SMC 是 BMC 与核心板之间的板级管理通道,不是把 CPU 内部寄存器直接暴露给 BMC。

4.1 读取流程

1. BMC 组装温度读取请求。

2. 请求经核心板 SMC 接口发送到核心板管理侧。

3. 核心板返回状态码和温度字段。

4. BMC 校验返回长度、状态码和数据范围。

5. 将结果写入 Thermal Sensor,并参与门限判断和风扇策略。

4.2 页面验证

图 5 CPU 信息页面

当前环境中识别到 Huawei Kunpeng 920 5220,主频 2600 MHz,32 核/32 线程,一级、二级、三级缓存分别为 4096 KB、16384 KB、32768 KB,位置为 CpuBoard1。

温度相关页面上可以看到:

这些温度测点不能简单当成同一个测点。CPU 核温、核心板温度和机箱进风口温度的物理位置不同,采样周期、门限和风扇曲线也可能不同。页面命名应尽量保留位置和来源,避免后续维护时无法判断数据来自 ADC、SMC 还是载板单片机。

4.3 温度数据异常时的判断顺序

• 先确认 SMC 请求是否返回成功。

• 再确认返回字段的长度、字节序和符号位。

• 检查温度单位是摄氏度还是原始码值。

• 检查页面门限是否按 Sensor 类型配置。

• 最后才判断是否为 CPU 或核心板实际过热。

五、载板与客户子板健康信息

载板和客户子板的健康信息不直接接到 BMC,而是先由载板单片机采集,再通过 UART 发给载板 CPLD,CPLD 转换为 SMC 协议后与 BMC 通信。

5.1 数据链路

载板传感器或客户子板 -> 载板单片机 -> UART -> 载板 CPLD -> SMC -> BMC -> Sensor 与 Web 页面

这条链路的价值在于兼容性。客户子板可以继续使用自己的健康管理协议,只要把温度、电压、状态等结果汇总到载板单片机,CPLD 就负责转换成统一的 SMC 访问方式。BMC 不需要为每一种客户子板增加一套私有驱动。

5.2 载体侧协议设计建议

单片机和 CPLD 之间的串口协议建议至少包含以下字段:

如果客户子板协议差异较大,建议让载板单片机输出统一的“健康数据表”,不要让 BMC 直接理解每一种子板协议。这样新增子板时,改动集中在单片机和 CPLD 映射层。

5.3 BMC 侧解析原则

• 按通道号映射 Sensor,不按数组下标猜测。

• 对温度、电压分别定义精度和单位。

• 对无效值、超时和校验失败保留明确状态。

• 周期数据与事件数据分开处理。

• 对客户子板版本做兼容判断。

• 记录最后一帧时间和错误计数,便于定位是 CPLD 无数据还是 BMC 解析错误。

联调时可以先绕过页面,直接在 BMC 侧观察解析后的原始结构体和 Sensor 更新日志,再打开 Web 页面。这样能快速区分“链路没数据”和“页面没显示”。

六、上下电控制

上下电由 BMC 通过 SMC 协议与载板 CPLD 通信,CPLD 再控制电源时序。BMC 页面提供的是动作入口,真正执行电源状态变化的是载板控制链路。

6.1 控制方向与状态回读

BMC -> SMC -> 载板 CPLD -> 电源时序电路 -> 主板电源状态

执行完成后还需要反向回读:

电源状态 -> 载板 CPLD -> SMC -> BMC -> 页面状态

如果只下发动作而不回读状态,页面很容易出现“按钮已经点了,但系统实际没有上电”的假成功。

图 6 电源与上下电页面

当前页面包含以下动作:

• 下电。

• 强制下电。

• 强制重启。

• 安全下电再上电。

• 强制下电再上电。

• 面板电源按钮策略。

• 通电开机策略。

• 延迟上电设置。

6.2 状态机设计

建议把电源操作设计成明确的状态机,而不是在按钮回调里直接写一个延时:

IDLE -> REQUEST_SENT -> WAIT_FOR_POWER_OFF -> POWER_OFF_CONFIRMED
-> WAIT_FOR_POWER_ON -> POWER_ON_CONFIRMED -> IDLE

每个状态都需要超时和错误码。例如:

“安全下电再上电”与“强制下电再上电”的差别应在页面提示和日志中明确。前者给操作系统正常关机时间,后者直接切断电源,不能混用。

七、N500 网卡带外管理

N500 网卡提供 I2C 带外管理接口,BMC 可以通过该接口读取网卡资产和端口状态,不依赖主机操作系统是否已经启动。

图 7 带外管理链路

7.1 数据流

N500 I2C OOB 接口 <-> BMC I2C 控制器 -> BMC 网卡管理模块 -> Web 页面

读取内容包括:

• 网卡名称和型号。

• 芯片厂商和芯片型号。

• MAC 地址。

• IPv4、IPv6、掩码和网关。

• 端口 Link 状态。

• 端口速率。

• 网口名称。

• 驱动名称和驱动版本。

• 固件版本。

• PCIe 槽位号。

当前环境中识别到的网卡信息为:

图 8 N500 网卡资产页面(仅保留设备身份区域)

公开截图仅保留网卡型号、芯片和槽位等资产信息,不展示真实 MAC 地址、IP 地址、序列号或设备唯一标识。

7.2 实现要点

1. I2C 地址、总线号和复用关系必须由板级配置管理。

2. 读取前确认网卡 OOB 功能已使能。

3. 对 I2C 访问增加超时、重试和错误隔离。

4. 端口状态变化不能只依赖页面刷新,应同步更新 Link 事件。

5. MAC、IP 等敏感信息在公开文章和截图中必须脱敏。

6. 主机未启动时也要能读取网卡基础资产和链路状态。

联调时如果页面只能看到型号,看不到 MAC 或 Link 状态,优先检查 I2C OOB 是否启用、网卡固件是否支持对应命令,以及 BMC 侧 I2C 复用配置是否正确。

八、iBMA 性能与硬盘健康监控

只靠 BMC 无法获取操作系统内部的 CPU 使用率、内存使用率和文件系统占用情况,因此需要 iBMA 在主机侧采集并上报。

8.1 数据流

主机操作系统 -> iBMA 采集 -> 带内通道 -> BMC -> 性能监控与存储管理页面

iBMA 主要负责:

• CPU 使用率。

• 运行内存使用率。

• 磁盘使用率。

• 文件系统使用情况。

• 硬盘健康状态。

• 主机操作系统和驱动版本。

当前环境识别到:

图 9 性能监控页面

在性能监控页面中可以看到 CPU、内存、网口带宽和磁盘使用率。当前样本中 CPU 为 1%,内存为 2%,总内存为 126.25 GB,磁盘分区占用分别为 6%、17% 和 2%。

8.2 硬盘健康

存储管理页面可以展示 SATA SSD 的健康状态、型号、固件版本、温度、容量、支持速率、协商速率和累计通电时间。当前环境识别到 Jupiter NVT 516XT 256GB,健康状态正常,温度 37 °C,协商速率 6 Gbps,累计通电时间 4748 h。

图 10 存储管理中的硬盘健康信息

需要注意,存储健康数据是否完整依赖 iBMA 和带外管理能力的组合。如果页面只显示磁盘列表而没有健康信息,应先确认 iBMA 正在运行,再检查硬盘或 RAID 控制器是否支持相应的健康数据读取接口。

九、4 路风扇控制与转速回传

风扇由载板 CPLD 控制。CPLD 使用 8 个管脚:4 路 PWM 输出和 4 路 TACH 检测。BMC 通过 SMC 协议与载板 CPLD 通信,设置风扇目标转速,并读取实际转速。

9.1 控制与反馈方向

调速方向:

BMC -> SMC -> 载板 CPLD -> PWM1/PWM2/PWM3/PWM4 -> 风扇

反馈方向:

风扇 TACH1/TACH2/TACH3/TACH4 -> 载板 CPLD -> SMC -> BMC

图 11 4 路风扇控制与转速回传

这两个方向必须分开验证。PWM 能写出去不代表 TACH 能正确回读,TACH 有读数也不代表实际转速与目标值一致。

9.2 自动调速与手动调速

系统支持两种模式:

• 自动模式:BMC 根据温度、负载或配置曲线计算目标占空比,再下发到 CPLD。

• 手动模式:用户在页面选择全局或单路风扇,设置期望速率比。

当前页面支持全局风扇选择和单路风扇控制,期望速率比以百分比表示。

图 12 风扇设置页面

9.3 转速回读

TACH 通常以脉冲计数形式由 CPLD 捕获。回读时需要关注:

1. 计数高低字节的拼接顺序。

2. 计数周期与 RPM 换算关系。

3. 风扇极数或每转脉冲数。

4. 低转速和停转判断阈值。

5. 风扇插入状态和转速有效性。

示意代码:

low = cpld.read_tach_low(channel)
high = cpld.read_tach_high(channel)
count = low | (high << 8)
rpm = count_to_rpm(count, fan_pulse_per_rev, sample_time)

low | (high << 8) 是当前板级配置中的字节拼接关系。实际项目中仍要确认高低字节顺序和采样窗口,否则会出现读数看起来“有值”但 RPM 明显不合理的情况。

图 13 风扇信息页面

当前页面中 Fan4 型号为 6025,转速约 4357 RPM,期望速率比 30%,实际速率比 48%,部件编码为 TD6025B12HA。这里需要把“目标占空比”“实际转速”和“速率比”分开理解,页面字段不能相互替代。

9.4 闭环校验

每次下发 PWM 后,建议执行以下校验:

• 读取 TACH 并换算 RPM。

• 比较实际 RPM 与目标区间。

• 检查转速是否长时间为 0。

• 检查 4 路通道是否串位。

• 检查低速启动时的最小占空比。

• 对堵转、缺扇和转速偏差分别告警。

手动设置 30% 占空比时,风扇可能无法启动或转速偏低,这是风扇本身的启动阈值决定的。应通过实验确定最小可靠占空比,而不是简单地把 PWM 从 0% 连续写到 100%。

十、联调验证结果

本次适配完成后,从页面和命令行两个方向做了验证。

10.1 资产与传感器

图 14 内存信息页面

10.2 系统软件与性能

图 15 产品和系统软件信息

页面上可以看到 OpenBMC、BIOS、iBMA 驱动、操作系统版本等信息。iBMA 运行状态为 Running,说明主机侧数据上报链路已经建立。

10.3 网络吞吐

使用 iperf 进行联通性和吞吐测试,接收端统计约为 941 Mbps,和 1GE 链路能力相符。

图 16 iperf 吞吐测试结果

这项测试验证了 N500 端口、主机驱动和网络链路的基本可用性,但它不能替代网卡带外管理测试。带外管理还需要单独验证 BMC 是否能读取 MAC、IP、Link 和固件信息。

十一、常见问题与排障

11.1 ADC 读数存在偏差

先检查分压电阻、参考电压和地线,再检查软件换算。不要一开始就通过修改页面显示值掩盖硬件偏差。

11.2 电压 Sensor 偶发越限

增加采样滤波和告警回差。对于上电瞬间可能出现尖峰的通道,应区分启动阶段的瞬态和稳定运行阶段的真实越限。

11.3 CPU 温度无法读取

确认 BMC 与核心板 SMC 通道是否正常,检查请求状态码、返回长度和字段解析。页面没有数值不一定是温度传感器损坏,也可能是协议返回了错误状态。

11.4 客户子板数据不显示

按“子板 -> 单片机 -> UART -> CPLD -> SMC -> BMC”的顺序逐段检查。先确认单片机是否能收到子板数据,再检查 CPLD 是否转发,最后检查 BMC 的通道映射。

11.5 上下电页面显示成功但主机未上电

检查 CPLD 是否真正执行了电源时序,以及 BMC 是否回读了电源状态。按钮回调返回成功不等于主板已经上电。

11.6 N500 只能读取部分信息

检查 I2C OOB 是否使能、I2C 地址和复用配置是否正确,以及网卡固件是否支持对应读取命令。

11.7 iBMA 页面没有性能数据

确认 iBMA 是否运行、驱动是否加载、主机与 BMC 的带内通道是否可用。没有 iBMA 时,CPU 使用率和文件系统占用率不能由 BMC 单独得出。

11.8 风扇有 PWM 但没有转速

先检查 TACH 接线和 CPLD 捕获,再检查高低字节拼接、每转脉冲数和采样周期。最后才调整 RPM 换算系数。

11.9 风扇低速时频繁告警

确认风扇最小启动占空比,并设置合理的低速阈值和告警延时。部分风扇在低占空比下会短暂停转,不能按额定转速区间直接判断故障。

十二、上线前检查清单

□ ADC 通道、分压比和 Sensor 名称一一对应。

□ 电压和温度门限经过实测,不只使用默认值。

□ 核心板 SMC 请求和异常状态均可复现。

□ 载板单片机、UART、CPLD、BMC 四段链路均有日志。

□ 客户子板协议版本可识别。

□ 软关机、强制下电、重启和再次上电均有超时处理。

□ N500 的 MAC、IP 和 Link 状态可以独立于主机启动读取。

□ iBMA 版本、运行状态和驱动版本可在页面确认。

□ 4 路 PWM 与 4 路 TACH 的通道映射一一核对。

□ 单路手动调速、全局调速和自动调速均完成验证。

□ 停转、缺扇、堵转和转速偏差均有告警策略。

□ 公开页面和截图中不包含真实 IP、MAC、序列号和唯一标识。

十三、总结

KP920S-VPX 的 OpenBMC 适配不是单一驱动问题,而是多条板级管理链路的协同:

• 电压由 BMC ADC 直接采集。

• CPU 核温和核心板温度通过核心板 SMC 获取。

• 载板和客户子板健康信息由“单片机 -> UART -> CPLD -> SMC -> BMC”汇聚。

• 上下电由 BMC 经 SMC 下发到载板 CPLD,再执行电源时序。

• N500 通过 I2C OOB 接口向 BMC 提供网卡信息。

• iBMA 在主机侧采集 CPU、内存、磁盘性能和硬盘健康数据。

• 4 路风扇的 PWM 和 TACH 都由载板 CPLD 控制与采集,BMC 负责策略和页面。

把这七条链路的方向、异常状态和回读机制定义清楚,页面上的数值才有工程意义。对于类似 VPX 板卡,最值得复用的不是某一个寄存器地址,而是这种“传感器在板级、策略在 BMC、执行在 CPLD、系统性能由 iBMA 补齐”的分层方法。

本文中的协议帧、对象名称和代码均为实现思路示意,具体 SMC 操作码、寄存器地址、I2C 地址和板级时序参数应以实际硬件设计文件为准。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐