【咨询】基础板hisport_I2C下挂的Connector作用是什么?

问题描述

我们在开发过程中,用到了sw板,web上产生14个获取自描述信息失败0x1A000055告警

环境信息

  • 代码分支:26 330 openUBMC分支

重现步骤

  1. 必现

期望结果

如何解决web告警,告警原理是什么

尝试过的解决方案

我们在PSR中配置了UnitConfiguration_IEU1,其中SrcPortName和TargetPortID用到了14个,我们发现web上0x1A000055也对应14个

目前排查到这个告警事件定义来源于基础板的CSR,事件数据源来源于Hisport_I2C下的Connector,以Connector_A1a为例,发现Connector_A1a未正常加载,id为空,LoadStatus为1导致产生告警

分析结论

Connector_A1a异常,是不是某个部件刷写有关?

Connector_A1a作用是什么,与riser如何关联?与PSR定义的线缆白名单有什么联系?

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

七、总结

项目 说明
Connector 作用 实现组件自发现,定义 Hisport_I2C 与下级组件的映射关系
0x1A000055 告警 因 I2C 通信失败导致无法读取 CSR,LoadStatus=1
根本原因 Hisport_I2C 通信异常 → EEPROM 读取失败 → 自发现失败
解决方向 检查物理连接、I2C 通信、EEPROM、CSR 文件一致性
关联影响 影响线缆白名单校验、拓扑构建、告警上报等功能

:warning: 建议:优先使用 hisportdetecti2cdetect 工具确认 Hisport_I2C 通道是否正常,再结合日志分析具体失败点。

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

基础板 Hisport_I2C 下挂 Connector 的作用解析及 0x1A000055 告警处理建议

一、Connector 的核心作用与 Hisport_I2C 的关联

在天池架构(Tianchi Architecture)中,Connector 是描述硬件拓扑关系的关键组件,其主要功能是实现组件自发现机制。结合 Hisport_I2C 通道,其作用如下:

1.1 Connector 的基本功能

  • 物理连接抽象:Connector 抽象了基础板(BCU)与下级组件(如 Riser 卡、扩展板、背板等)之间的物理连接。
  • 自发现路径定义:在组件的 CSR(Component Self-description Record)文件中通过定义 Connector 对象,BMC 可依据此信息逐级发现下级硬件,构建完整的系统拓扑图。
  • 信号传递载体:Connector 的 Buses 字段定义了传递到下级组件的管理信号,如 Hisport_I2C、I2C、GPIO 等。

示例:"Buses": ["Hisport_16"] 表明该 Connector 通过 Hisport_I2C_16 通道与下级组件通信。

1.2 Hisport_I2C 与 Connector 的关系

Hisport_I2C 是一种基于 Hisport 总线封装的虚拟 I2C 通道,用于 BMC 与远端组件(如 Riser 卡)之间的管理通信:

  • 通信路径:BMC → Localbus → 扩展板 → Hisport 总线 → 基础板 → Hisport_I2C → 下级组件(如 Riser 卡)
  • 协议承载:Hisport_I2C 承载 I2C 协议,用于读取下级组件的 EEPROM(地址 0xAE)中的 CSR 文件
  • 拓扑映射:每个 Hisport_I2C_x 通道通常绑定一个或多个 Connector,形成“通道→连接器→组件”的映射关系

二、告警 0x1A000055 的原理分析

2.1 告警定义

事件码:0x1A000055
事件描述:Failed to access the Self-description Record of CpuBoard1 RiserCard

该告警表示 BMC 无法访问 Riser 卡的自描述记录(CSR),根本原因在于:

  • I2C 通信失败:通过 Hisport_I2C 通道读取 Riser 卡 EEPROM(地址 0xAE)时超时或无响应
  • 自发现失败:BMC 无法从 Connector 对应的 I2C 通道获取 CSR 数据,导致组件加载失败
  • LoadStatus=1:表示组件加载状态异常(正常为 0)

2.2 故障链路分析

根据您提供的信息,故障链路如下:

BMC 
→ Hisport_I2C_16 (Hisport_over_I2C) 
→ Connector_A1a 
→ Riser Card (SN:1025BD241022)
→ EEPROM @0xAE (CSR 存储位置)

当前问题:

  • Id="":未能读取到组件唯一标识
  • LoadStatus=1:组件加载失败
  • 连续出现 14 次 相同告警 → 对应 PSR 中配置的 14 个 SrcPortName/TargetPortID

三、PSR 线缆白名单与 Connector 的关联

3.1 线缆检测机制

线缆白名单机制依赖于 UBC/UBCDD 接口的拓扑检测线缆

  • 每个外接组件(如 Riser 卡)需向基础板上报其 UID 和检测值
  • BMC 通过 I2C 读取该信息,比对是否在白名单内
  • 若不在白名单 → 触发 0x28000035 告警(如您截图中序号 19)

3.2 与 Connector 的关系

字段 来源 说明
SrcPortName PSR 配置 定义线缆连接的源端口(如 A1a, A2c)
TargetPortID Riser CSR 定义目标端口 ID
Bom / UID Connector 用于匹配是否支持该组件

:magnifying_glass_tilted_left: 关键点:若 Connector 无法加载(LoadStatus=1),则无法获取 UID,导致线缆检测流程中断,进而影响白名单校验。


四、常见故障原因分析

可能原因 说明
:white_check_mark: I2C 通信异常 Hisport_I2C 总线不稳定、CRC 错误、时序问题
:white_check_mark: EEPROM 故障 Riser 卡的 CSR EEPROM 损坏或未供电
:white_check_mark: Hisport 阻塞 多个设备频繁通信导致 Hisport 队列阻塞(见文档 id=3)
:wrench: CSR 文件错误 Riser 卡 CSR 文件格式错误或缺失必要字段
:electric_plug: 连接器松动或损坏 物理连接不可靠导致 I2C 通信失败
:counterclockwise_arrows_button: 固件版本不匹配 BMC、Riser MCU、CPLD 版本不兼容

五、解决方案与排查建议

5.1 优先级排查步骤

:white_check_mark: 步骤 1:检查 Hisport_I2C 通信状态

# 使用 i2cdetect 检查 Hisport_I2C 对应总线
i2cdetect -y <bus_id>
# 或使用 hisportdetect 工具扫描 Hisport 总线
hisportdetect --scan

若无法检测到设备,说明物理通信层异常。

:white_check_mark: 步骤 2:查看系统日志中的 I2C 错误

# 检查 Hw_Stream.Log 或系统日志
grep -i "i2c\|timeout\|error" /var/log/Hw_Stream.Log

关注:

  • Request Timeout
  • ret: 5(I2C 写失败)
  • response error(I2C 响应异常)

:white_check_mark: 步骤 3:验证 EEPROM 可读性

确认 Riser 卡的 EEPROM 是否可被正常读取:

# 尝试读取 CSR EEPROM(地址 0xAE)
i2cget -f -y <bus> 0xAE

若返回失败,可能是 EEPROM 未上电、损坏或 I2C 地址冲突。

:white_check_mark: 步骤 4:检查 CSR 文件完整性

确认 Riser 卡的 CSR 文件是否符合规范,特别是:

{
  "IdentifyMode": 3,     // 天池组件自发现模式
  "Buses": ["Hisport_16"], // 必须与基础板 Connector 匹配
  "UID": "..."           // 必须唯一且有效
}

:white_check_mark: 步骤 5:确认 PSR 与线缆白名单一致性

检查 UnitConfiguration_IEU1 中:

  • SrcPortName 数量是否与实际物理连接一致
  • TargetPortID 是否与 Riser 卡 CSR 中定义一致
  • 白名单中是否包含该组件的 UID

六、优化建议

6.1 通信优化

  • 降低轮询频率:避免每 20 秒频繁轮询(参考文档 id=3)
  • 串行化请求:防止多线程 I2C 请求堆积导致阻塞
  • 增加重试机制:对关键 I2C 操作增加 2~3 次重试

6.2 配置建议

  • 同步更新 CSR 与 PSR:确保两者拓扑定义一致
  • 启用调试日志:在 devmon 中启用 I2C 通信详细日志
  • 使用标准工具验证:如 i2cdetect, busctl 等提前发现问题

七、总结

项目 说明
Connector 作用 实现组件自发现,定义 Hisport_I2C 与下级组件的映射关系
0x1A000055 告警 因 I2C 通信失败导致无法读取 CSR,LoadStatus=1
根本原因 Hisport_I2C 通信异常 → EEPROM 读取失败 → 自发现失败
解决方向 检查物理连接、I2C 通信、EEPROM、CSR 文件一致性
关联影响 影响线缆白名单校验、拓扑构建、告警上报等功能

:warning: 建议:优先使用 hisportdetecti2cdetect 工具确认 Hisport_I2C 通道是否正常,再结合日志分析具体失败点。


如需进一步分析,请提供:

  1. Hw_Stream.Log 中相关 I2C 错误日志片段
  2. i2cdetect 扫描结果
  3. Riser 卡 CSR 文件内容(可脱敏)

A1a和A1c是基础板上的一个UBCDD端口,Connector_A1a的IdentifyMode为3,作用是可以直接在A1a这个端口接入如riser,硬盘背板等可以通过天池加载的板卡,但如果A1a是通过线缆连接SW板,需要确认SW板是否是通过hisport进行天池加载的,如果不是就会告警BMC.AccessCSRFailure(对应告警Event_CSRFailureMntr_A1a)。

一般SW板会连接多个基础板上的UBC&UBCDD端口,也会有单独连接CPLD,EEPROM的iic通道,这部分信息需要与硬件对齐。

PSR主要是定义了基础板与riser,硬盘背板,sw板的线缆连接关系。

我们是通过真实I2C通道与sw通信,没有使用hisport。另外我们对比华为riser排查,华为riser三个portid也有两个port不在位,一个在位,并没有产生这个0x1A000055告警;我们sw板用了14个portid,基础板CPLD都上报了在位信息

目前对比,发现我们不同点在LoadStatus和Presence两个属性上

我推测是以下原因导致的:
1.华为的riser使用的是hisport与基础板进行通信的,并没有使用BMC直出的iic,如下图是riser内部iic拓扑的配置,具体是hisport下挂了PCA9545,PCA9545下又挂了Chip_MCU1,Chip_MCU1下的IIC最终挂了Eeprom_IEU,这个Eeprom_IEU就是存放riser卡CSR的地方,Connector_B3a下挂的hisport应该就是与连接riser的hisport,能够正常通过天池自发现加载,就不会出现0x1A000055告警。Connector_B4a和B3c应该只是提供高速资源能力,riser没有用到对应的hisport资源,所以也不会有告警。


你们的sw与BMC是通过直出的iic通信的,并且应该是把A1a和A1c通过线缆连接到了交换板,所以connector_a1a会被置为在位,但是交换板的eeprom是挂在bmc直出的iic下,所以connector_a1a下挂的hisport扫描不到交换板的eeprom,导致天池加载失败,所以会产生0x1A000055告警。
解决方法可以是删除connector_a1a和对应的Event_CSRFailureMntr_A1a告警定义,然后新增connector_ieu和对应的Event_CSRFailureMntr告警。