当前在hisport上挂载了一个设备,现在需要验证这个设备是否支持通讯,需要如何验证?i2cdetect只能扫描i2c总线上的设备,无法读取hisport。有什么方法读取hisport上的设备吗
答案内容由AI生成,仅供参考:
总结:验证 Hisport 设备通信的推荐流程
-
确认拓扑结构
→ 通过busctl或 CSR 文件确认 Hisport 是否承载 I2C 子总线。 -
使用
i2cdetect扫描设备地址
→ 若发现设备(如 0x5c),表示链路通畅。 -
使用
i2ctransfer进行读写测试
→ 验证能否正确收发数据(如读取厂商信息 “HUAWEI”)。 -
集成到 HPM 包(推荐)
debug_dependencies: - conan: bus_tools/1.0.2@openUBMC.release/stable→ 确保工具随固件发布,便于长期维护。
-
失败排查要点
- Hisport 是否已物理连接并通电
- CSR 配置中是否存在
IdentifyMode设置错误 - 是否遗漏
DrvWriteDelay等关键驱动参数 - 固件版本是否兼容
点击此处查看详细分析解答
如何验证挂载在 Hisport 上的设备通信
当设备挂载在 Hisport 总线上时,无法直接使用 i2cdetect 等标准 I2C 工具进行检测或读取,因为 Hisport 是一种专有的高速串行总线协议(常用于华为天池架构中),不同于传统的 I2C/SMBus。然而,可以通过以下方法实现对 Hisport 上设备的通信验证和数据读取。
1. Hisport 与 I2C 的关系
虽然 Hisport 本身不是 I2C 协议,但在系统设计中,Hisport 通常会被用作承载 I2C 协议的物理通道(即“I2C over Hisport”):
- 在 CSR(硬件自描述文件)配置中,Hisport 可以被虚拟化为 I2C 总线。
- 通过
SubBuses配置,可在 Hisport 上创建 I2C 子总线,从而挂载 EEPROM、PCA9545、CPLD 等常规 I2C 设备。 - 这意味着:尽管物理层是 Hisport,逻辑上仍可作为 I2C 总线处理。
结论:如果 Hisport 被配置为支持 I2C 协议,则可以像操作普通 I2C 设备一样访问其上的从设备。
2. 使用 bus_tools 工具验证 Hisport 设备通信
华为 OpenUBMC 社区已提供专门工具 bus_tools,用于访问包括 Hisport 和 I2C 在内的 BMC 总线资源。
工具说明
- 工具名称:bus_tools
- 包含命令:
i2ctransfer:适用于 I2C 读写操作(包括基于 Hisport 的虚拟 I2C)i2cdetect:扫描 I2C 总线上的设备地址
- 支持 通过 Hisport 封装的 I2C 通信
使用步骤
(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 码,说明设备响应正确。
3. 通过硬件代理服务(hwproxy)访问 Hisport 设备
hwproxy 是 OpenUBMC 中的核心服务,负责抽象底层硬件访问,支持 Hisport、I2C、MCTP 等协议。
使用流程:
- 确保
hwproxy服务正在运行:systemctl status hwproxy - 发起 I2C 读请求(逻辑上通过 Hisport 实现):
{ "requestor": "test", "name": "Eeprom_EXU_0101", "addr": 0x5c, "offset": 0, "len": 8, "rw_type": 1 }
该请求由 bmc.kepler.hwdiscovery 服务处理,并通过 Hisport 物理链路完成通信。
4. 其他关键验证方式
| 方法 | 说明 |
|---|---|
| D-Bus 属性查询 | 使用 busctl introspect 查看 Connector 或 Chip 对象的 Presence、Buses 属性,判断设备是否识别成功 |
| 日志分析 | 检查 hwdiscovery、framework.log 是否有加载失败或通信错误日志 |
| CSR 配置检查 | 检查 SR 文件中是否正确定义了 Hisport 总线及其挂载的子设备 |
| hispi_setup_device | 某些 Hisport 设备需调用 hispi_setup_device id 0x0 或 id 0x1 初始化 |
总结:验证 Hisport 设备通信的推荐流程
-
确认拓扑结构
→ 通过busctl或 CSR 文件确认 Hisport 是否承载 I2C 子总线。 -
使用
i2cdetect扫描设备地址
→ 若发现设备(如 0x5c),表示链路通畅。 -
使用
i2ctransfer进行读写测试
→ 验证能否正确收发数据(如读取厂商信息 “HUAWEI”)。 -
集成到 HPM 包(推荐)
debug_dependencies: - conan: bus_tools/1.0.2@openUBMC.release/stable→ 确保工具随固件发布,便于长期维护。
-
失败排查要点
- Hisport 是否已物理连接并通电
- CSR 配置中是否存在
IdentifyMode设置错误 - 是否遗漏
DrvWriteDelay等关键驱动参数 - 固件版本是否兼容
参考资料
- OpenUBMC 社区 - bus_tools
- 《硬件自描述文件(CSR)》
- 《RAID卡适配指导》——涵盖 Hisport 到 I2C 的映射逻辑
hwdiscovery日志分析路径:/var/log/hwdiscovery.log
如需深入调试,建议使用 QEMU 仿真环境测试 Hisport 与 I2C 的桥接功能。
相关链接:
bus_tools仓有hisportdetect支持hisport扫描,hisporttransfer还未开发,不支持hisport读写,目前只能在CSR中配置出来然后通过mdbctl或者busctl读写
感谢,使用hisportdetect扫描很慢是正常的吗?
扫描速度是慢,你可以缩小扫描地址范围
另外能扫到你的设备吗,他这个扫描目前不支持拓扑上带PCA9545的情况
扫描了一下,没有扫描到。可能是我们设备问题,目前还在排查。