1823网卡通过I2C over Hisport 连接的时候温度获取不到

// 此模板仅供参考,如果不适用可以修改

问题描述

SR配置:14140130_19e50222_19e504b1.sr

BMC和1823网卡直接是通过 I2C over Hisport 来通信的,下面下挂了如下器件

        "I2cMux_Hisport": {
            "Chips": [
                "Chip_Hi1822",
                "Pca9555_PCIe",
                "Eeprom_NetCard"
            ]
        }

EEPROM可以读到数据

~ ~ # mdbctl call Eeprom_NetCard_01011502  bmc.kepler.Chip.BlockIO Read 0 0x0 128
[0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,117,97,119......]

% attach hwproxy
Success

% tracechip Eeprom_NetCard_01011502 start

% 2026-08-25 19:44:23.194305, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 0, read_length: 32, read_result: 46 52 55 FF FF FF FF FF 01 00 01 02 29 00 00 D3  01 01 00 C0 C0 C1 00 BD 01 27 00 ED 93 F4 C6 48
2026-08-25 19:44:23.198413, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 32, read_length: 32, read_result: 75 61 77 65 69 C9 42 43 35 33 45 54 48 4E 31 CC  50 30 32 36 36 37 30 35 32 31 38 30 CA 30 33 30
2026-08-25 19:44:23.202865, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 64, read_length: 32, read_result: 32 30 37 35 32 38 35 C0 F0 80 44 65 73 63 72 69  70 74 69 6F 6E 3D 4D 61 6E 75 66 61 63 74 75 72
2026-08-25 19:44:23.208680, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 96, read_length: 32, read_result: 65 64 20 42 6F 61 72 64 2C 53 50 32 32 36 44 2C  42 43 35 33 45 54 48 4E 31 F0 81 2C 45 74 68 65
2026-08-25 19:44:23.211871, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 128, read_length: 32, read_result: 72 6E 65 74 20 4E 49 43 2C 32 30 30 47 45 2C 44  75 61 6C 20 50 6F 72 74 73 2C 51 53 46 50 35 36
2026-08-25 19:44:23.229595, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 160, read_length: 32, read_result: 28 57 69 74 68 6F 75 74 20 4F F0 82 70 74 69 63  61 6C 20 4D 6F 64 75 6C 65 29 2C 50 43 49 45 20
2026-08-25 19:44:23.230812, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 192, read_length: 32, read_result: 35 2E 30 20 78 31 36 2D 56 65 6E 64 6F 72 20 49  44 20 31 39 65 35 2D 44 65 76 69 F0 83 63 65 20
2026-08-25 19:44:23.232654, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 224, read_length: 32, read_result: 49 44 20 30 32 32 32 2D 32 2D 53 75 62 76 65 6E  64 6F 72 20 49 44 20 31 39 65 35 2D 53 75 62 64
2026-08-25 19:44:23.233818, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 256, read_length: 32, read_result: 65 76 69 63 65 20 49 44 20 30 34 42 C6 04 31 2C  32 2A 32 CF 00 49 73 73 75 65 4E 75 6D 62 65 72
2026-08-25 19:44:23.235104, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 288, read_length: 32, read_result: 3D 30 30 CE 00 43 4C 45 49 43 6F 64 65 3D 4E 75  6C 6C C9 00 42 4F 4D 3D 4E 75 6C 6C CD 00 4D 6F
2026-08-25 19:44:23.239530, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 320, read_length: 32, read_result: 64 65 6C 3D 53 50 32 32 36 44 C1 00 00 00 00 3E  01 03 00 C6 48 75 61 77 65 69 C0 C0 C0 C0 C0 C0
2026-08-25 19:44:23.246468, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 352, read_length: 32, read_result: C1 00 00 00 00 00 00 92 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2026-08-25 19:44:23.260710, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 384, read_length: 32, read_result: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2026-08-25 19:44:23.264064, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 416, read_length: 32, read_result: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2026-08-25 19:44:23.265215, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 448, read_length: 32, read_result: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2026-08-25 19:44:23.266404, Unknown, block_read, Eeprom_NetCard_01011502, addr: 172, offset: 480, read_length: 32, read_result: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


但是 Chip_Hi1822 会报错,温度读不到

trace信息如下

% attach hwproxy
Success

% tracechip Chip_Hi1822_01011502 start

% 2026-08-25 19:40:11.103976, bmc.kepler.network_adapter, block_read, Chip_Hi1822_01011502, addr: 232, offset: 4294967295, read_length: 64, read_result: ./opt/bmc/apps/hwproxy/lualib/stream/i2c_over_hisport.lua:50: ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out
2026-08-25 19:40:11.540905, bmc.kepler.network_adapter, block_read, Chip_Hi1822_01011502, addr: 232, offset: 4294967295, read_length: 64, read_result: ./opt/bmc/apps/hwproxy/lualib/stream/i2c_over_hisport.lua:50: ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out
2026-08-25 19:40:11.985554, bmc.kepler.network_adapter, block_read, Chip_Hi1822_01011502, addr: 232, offset: 4294967295, read_length: 64, read_result: ./opt/bmc/apps/hwproxy/lualib/stream/i2c_over_hisport.lua:50: ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out
2026-08-25 19:40:13.614470, bmc.kepler.network_adapter, block_read, Chip_Hi1822_01011502, addr: 232, offset: 4294967295, read_length: 64, read_result: ./opt/bmc/apps/hwproxy/lualib/stream/i2c_over_hisport.lua:50: ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

能正确读到温度

实际结果

无法读取

尝试过的解决方案

手动发命令读取

分析结论

可能是 i2c_over_hisport 读 read_length: 64 对长度有要求,不能读64字节?

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

四、总结

  • EEPROM 可读说明 I2C over Hisport 总线通信本身是正常的,问题应聚焦于 Chip_Hi1822 的地址配置、超时/重试/延时参数,或读取方式。
  • “读取 64 字节导致超时”在 Hisport 接口文档中并没有明确限制,但可通过减小长度来排除实现层面的问题。
  • 若调整配置后仍无法解决,很可能需要硬件工程师介入,用逻辑分析仪确认 Chip_Hi1822 所在通道的实际信号。

希望以上基于社区案例和现有配置参数的分析能帮助您定位问题。

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

根据您提供的信息,您遇到的 Chip_Hi1822 通过 I2C over Hisport 读取温度时报 ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out,而同一总线下挂的 Eeprom_NetCard 可以正常读取,这说明 I2C over Hisport 总线的基本物理通信链路是通的,问题很可能集中在 Chip_Hi1822 的配置或该器件自身的访问特性上。结合开放社区中的类似案例,可以给出以下分析和建议。


一、类似问题参考

社区中已有多个与 Hisport / I2C over Hisport 访问失败相关的讨论,均出现相似的 Connection timed out 错误:

  • 主题 7121:使用 I2cOverHisport 对象访问 EEPROM 时报错 ioctl(HIS_CMD_I2C_STREAM_READ) failed: Connection timed out。回复指出“驱动层根本无法与器件建立通信,问题大概率在物理层或地址配置,而非软件逻辑,建议先排除硬件和配置是否正确”。
  • 主题 5592:使用 hisportdetect 扫描 Hisport 总线上的 I2C 地址,扫描到的地址配置到 CSR 后通信仍然异常。最终分析发现 I2C 地址为 7 位地址,扫描出的地址需要左移一位,最低位(第 0 位)必须留给读/写标志,硬件才能正常识别。

您当前 Chip_Hi1822 的 trace 显示 addr: 232,这个值是否与硬件实际的 7 位地址格式一致,是需要重点确认的。


二、可能原因分析

1. 地址配置格式问题

  • 知识图谱中记录 Chip_Hi1822Address232,同时 AddrWidth 为 1。
  • 社区案例(search result id=1)明确提到:I2C 地址是 7 位,如果配置的是 8 位地址,需要将扫描到的地址左移一位,最低位留给读写标志,否则器件无法被正确识别。
  • 建议与硬件原理图核对 Chip_Hi1822 的真实 I2C 地址,确认 232 这个值是否已经做了 7/8 位格式转换。如果 232 是 8 位表示,实际 7 位地址可能是 1160x74)。

2. 超时、重试和读写延时配置

Chip_Hi1822 的相关配置参数在知识图谱中有明确记录:

参数
Address 232
AddrWidth 1
ReadTmout 100
WriteTmout 100
ReadRetryTimes 0
WriteRetryTimes 2
  • 超时时间 100ms:如果 Chip_Hi1822 在读写之间需要更长的响应时间,或者存在时钟拉伸,100ms 可能不够。
  • 读重试次数为 0:超时后不重试,可能导致温度读取直接失败。
  • DrvWriteDelay:社区案例(search result id=5)中,Atlas 300I 通过 iic forward 读取温度失败时,增加 Chip 的写延迟设置后可以正常读到温度和功率,原因是“BMC 启动速度快于 OS 及 NPU 驱动加载,器件内部 MCU 未完全初始化”。Chip_Hi1822 同样存在 DrvWriteDelay 配置参数,可以尝试增加该延时。

3. 读取长度问题

您怀疑 read_length: 64 可能导致超时。根据 Hisport 接口文档(search result id=2),max_data_len(单次读写请求的最大字节数)范围是 [1, 1024],因此 64 字节在规格上是允许的。但 I2C over Hisport 的具体实现可能存在限制,建议做一个对比实验:

  • Chip_Hi1822 的读取长度从 64 改为 32 或更小,观察是否仍然超时。
  • 同时检查 trace 中 offset: 4294967295(即 0xFFFFFFFF),确认偏移字段配置是否正确。

4. 硬件链路问题

虽然 EEPROM 可读,但 Chip_Hi1822 可能挂在不同的 I2C Mux 通道或子总线上。可以:

  • 使用 hisportdetect 工具扫描 Hisport 总线上的地址,确认 Chip_Hi1822 的地址是否真的被枚举到(注意:该工具在部分场景下可能扫不到 I2C over Hisport 上的设备)。
  • 如果扫描不到,或扫描结果与配置不符,需要像社区案例一样排查硬件链路,用逻辑分析仪确认数据是否正常传输。

三、建议排查步骤

  1. 核对地址配置
    与硬件确认 Chip_Hi1822 的 I2C 地址是 7 位还是 8 位,检查 CSR 中 Address=232 是否正确,必要时按“左移一位”规则转换。

  2. 调整超时和重试参数
    尝试增大 ReadTmout(如 200ms 或更大),将 ReadRetryTimes 从 0 改为 1~2,看是否恢复。

  3. 增加写延时
    Chip_Hi1822 配置合适的 DrvWriteDelay(毫秒级),参考社区中类似温度读取失败场景的解决方案。

  4. 减小读取长度
    将一次读取的字节数从 64 改为 32 或 16,验证是否与长度相关。

  5. 检查拓扑连接和南向驱动通道
    确认 Chip_Hi1822 在资源树中是否存在(社区主题 6717 曾反映 CSR 中配置了 Chip_Hi1822 但资源树中没有对象)。如果走的是南向驱动组件,目前社区尚未实现类似 tracechip 的调试手段,需要结合日志进一步定位。


四、总结

  • EEPROM 可读说明 I2C over Hisport 总线通信本身是正常的,问题应聚焦于 Chip_Hi1822 的地址配置、超时/重试/延时参数,或读取方式。
  • “读取 64 字节导致超时”在 Hisport 接口文档中并没有明确限制,但可通过减小长度来排除实现层面的问题。
  • 若调整配置后仍无法解决,很可能需要硬件工程师介入,用逻辑分析仪确认 Chip_Hi1822 所在通道的实际信号。

希望以上基于社区案例和现有配置参数的分析能帮助您定位问题。