挂载在hisport上的设备如何读取

当前在hisport上挂载了一个设备,现在需要验证这个设备是否支持通讯,需要如何验证?i2cdetect只能扫描i2c总线上的设备,无法读取hisport。有什么方法读取hisport上的设备吗

答案内容由AI生成,仅供参考:
:white_check_mark: 总结:验证 Hisport 设备通信的推荐流程

  1. 确认拓扑结构
    → 通过 busctl 或 CSR 文件确认 Hisport 是否承载 I2C 子总线。

  2. 使用 i2cdetect 扫描设备地址
    → 若发现设备(如 0x5c),表示链路通畅。

  3. 使用 i2ctransfer 进行读写测试
    → 验证能否正确收发数据(如读取厂商信息 “HUAWEI”)。

  4. 集成到 HPM 包(推荐)

    debug_dependencies:
      - conan: bus_tools/1.0.2@openUBMC.release/stable
    

    → 确保工具随固件发布,便于长期维护。

  5. 失败排查要点

    • Hisport 是否已物理连接并通电
    • CSR 配置中是否存在 IdentifyMode 设置错误
    • 是否遗漏 DrvWriteDelay 等关键驱动参数
    • 固件版本是否兼容
点击此处查看详细分析解答

如何验证挂载在 Hisport 上的设备通信

当设备挂载在 Hisport 总线上时,无法直接使用 i2cdetect 等标准 I2C 工具进行检测或读取,因为 Hisport 是一种专有的高速串行总线协议(常用于华为天池架构中),不同于传统的 I2C/SMBus。然而,可以通过以下方法实现对 Hisport 上设备的通信验证和数据读取。


:magnifying_glass_tilted_left: 1. Hisport 与 I2C 的关系

虽然 Hisport 本身不是 I2C 协议,但在系统设计中,Hisport 通常会被用作承载 I2C 协议的物理通道(即“I2C over Hisport”):

  • 在 CSR(硬件自描述文件)配置中,Hisport 可以被虚拟化为 I2C 总线。
  • 通过 SubBuses 配置,可在 Hisport 上创建 I2C 子总线,从而挂载 EEPROM、PCA9545、CPLD 等常规 I2C 设备。
  • 这意味着:尽管物理层是 Hisport,逻辑上仍可作为 I2C 总线处理。

:white_check_mark: 结论:如果 Hisport 被配置为支持 I2C 协议,则可以像操作普通 I2C 设备一样访问其上的从设备。


:toolbox: 2. 使用 bus_tools 工具验证 Hisport 设备通信

华为 OpenUBMC 社区已提供专门工具 bus_tools,用于访问包括 Hisport 和 I2C 在内的 BMC 总线资源。

:white_check_mark: 工具说明

  • 工具名称:bus_tools
  • 包含命令:
    • i2ctransfer:适用于 I2C 读写操作(包括基于 Hisport 的虚拟 I2C)
    • i2cdetect:扫描 I2C 总线上的设备地址
  • 支持 通过 Hisport 封装的 I2C 通信

:wrench: 使用步骤

(1)确认 Hisport 是否已映射为 I2C 总线

检查系统的管理拓扑(ManagementTopology)或使用 D-Bus 查询:

busctl --user tree bmc.kepler.hwdiscovery

查看是否存在类似以下结构:

"Hisport_18": {
  "Buses": [ "I2cMux_Pca9545_PCA9545_1" ]
}

这表明 Hisport_18 上挂载了 I2C 多路复用器(Pca9545),其下可连接 I2C 设备。

(2)使用 i2cdetect 扫描 Hisport 下的 I2C 设备

若 Hisport 已转化为 I2C 子总线(如编号为 I2c_3),可执行:

i2cdetect 3

若看到设备地址(如 0x50, 0x70 等),则说明通信正常。

(3)使用 i2ctransfer 读写设备

例如:读取 Hisport 上某 I2C EEPROM 的前 8 字节(地址 0x5c):

i2ctransfer 3 w1@0x5c 0x99 r7

解释:

  • 3:总线编号(对应挂载于 Hisport 的 I2C 子总线)
  • w1@0x5c:向地址 0x5c 写入 1 字节(通常是寄存器偏移)
  • 0x99:写入的偏移地址
  • r7:读取 7 字节数据

实例:文档中提到读取地址 0x5c 返回 "HUAWEI" 的 ASCII 码,说明设备响应正确。


:hammer_and_wrench: 3. 通过硬件代理服务(hwproxy)访问 Hisport 设备

hwproxy 是 OpenUBMC 中的核心服务,负责抽象底层硬件访问,支持 Hisport、I2C、MCTP 等协议。

使用流程:

  1. 确保 hwproxy 服务正在运行:
    systemctl status hwproxy
    
  2. 发起 I2C 读请求(逻辑上通过 Hisport 实现):
    {
      "requestor": "test",
      "name": "Eeprom_EXU_0101",
      "addr": 0x5c,
      "offset": 0,
      "len": 8,
      "rw_type": 1
    }
    

该请求由 bmc.kepler.hwdiscovery 服务处理,并通过 Hisport 物理链路完成通信。


:pushpin: 4. 其他关键验证方式

方法 说明
D-Bus 属性查询 使用 busctl introspect 查看 Connector 或 Chip 对象的 Presence、Buses 属性,判断设备是否识别成功
日志分析 检查 hwdiscoveryframework.log 是否有加载失败或通信错误日志
CSR 配置检查 检查 SR 文件中是否正确定义了 Hisport 总线及其挂载的子设备
hispi_setup_device 某些 Hisport 设备需调用 hispi_setup_device id 0x0id 0x1 初始化

:white_check_mark: 总结:验证 Hisport 设备通信的推荐流程

  1. 确认拓扑结构
    → 通过 busctl 或 CSR 文件确认 Hisport 是否承载 I2C 子总线。

  2. 使用 i2cdetect 扫描设备地址
    → 若发现设备(如 0x5c),表示链路通畅。

  3. 使用 i2ctransfer 进行读写测试
    → 验证能否正确收发数据(如读取厂商信息 “HUAWEI”)。

  4. 集成到 HPM 包(推荐)

    debug_dependencies:
      - conan: bus_tools/1.0.2@openUBMC.release/stable
    

    → 确保工具随固件发布,便于长期维护。

  5. 失败排查要点

    • Hisport 是否已物理连接并通电
    • CSR 配置中是否存在 IdentifyMode 设置错误
    • 是否遗漏 DrvWriteDelay 等关键驱动参数
    • 固件版本是否兼容

:books: 参考资料

  • OpenUBMC 社区 - bus_tools
  • 《硬件自描述文件(CSR)》
  • 《RAID卡适配指导》——涵盖 Hisport 到 I2C 的映射逻辑
  • hwdiscovery 日志分析路径:/var/log/hwdiscovery.log

如需深入调试,建议使用 QEMU 仿真环境测试 Hisport 与 I2C 的桥接功能。

相关链接:

  1. 【工具分享】I2C扫描和读写工具
  2. PCA9545通道切换方法求助
  3. 总线测试方法:pca9545 channe和jtag
  4. 升级到openUBMC后,CPU侧无法检测到对应的BMC的存在
  5. CSR配置字典之ManagementTopology | 文档中心 | openUBMC

bus_tools仓有hisportdetect支持hisport扫描,hisporttransfer还未开发,不支持hisport读写,目前只能在CSR中配置出来然后通过mdbctl或者busctl读写

感谢,使用hisportdetect扫描很慢是正常的吗?

扫描速度是慢,你可以缩小扫描地址范围
另外能扫到你的设备吗,他这个扫描目前不支持拓扑上带PCA9545的情况

扫描了一下,没有扫描到。可能是我们设备问题,目前还在排查。