Hisport总线介绍
更新时间: 2026/02/13
在Gitcode上查看源码

1 基本概念

1.1 背景

问题:组件之间的互联接口有限,尤其是管理单元与计算单元的互联信号受限于物理接口(如下图所示,1711对外的I2C总线数量有限) 需求:需要一个高速总线承载多种低速协议,如I2C、UART、SPI等,收编低速接口,减少通信端口数量,提高通信效率

1.2 Hisport协议概念

  • Hisport(high-speed port)是一种高速异步串行接口,以“帧”的方式传送数据,物理接口分为发送和接收两根线
  • 数据传输格式: Hisport帧格式如下图所示,包含1个同步帧头,N个数据时隙,1个CRC时隙,每个数据时隙和CRC时隙后跟随1个间隔,数据时隙宽度和个数可以根据业务场景灵活适配,同步帧头根据数据时隙宽度不同而调整

1.3 Hisport架构

1.3.1 组成

Hisport系统由以下三个主要部分组成:

(1) BMC

  • 定义上层虚拟I2C协议
  • 将I2C命令转换为标准接口命令
  • 通过Localbus总线将命令传输到扩展板

(2) 扩展板

  • 接收BMC发送的Localbus命令
  • 对命令进行组帧并缓存到FIFO(先进先出队列)中
  • 将命令转换为Hisport协议格式,传输到基础板

(3) 基础板

  • 接收扩展板发送的Hisport帧命令
  • 通过调度模块将命令分发给不同的I2C控制器
  • 将Hisport命令转换为I2C命令,控制从器件执行操作

1.3.2 数据传输流程

2 应用场景

2.1 如何判断器件是否为Hisport总线器件

2.1.1 检查CSR文档

查找CSR文档中关于ManagementTopology的定义,确认该器件是否被指定为通过Hisport总线进行通信 示例:

json
"ManagementTopology": {
    "Anchor": {
        "Buses": [
            "Hisport_0"
        ]
    },
    "Hisport_0": {
        "Chips": [
            "Pca9545_PCA9545",
            "Eeprom_IEU"
        ]
    },
    ...
}

2.1.2 查看拓扑图

在dump_info\AppDump\hwproxy\topology.txt文件中查找对应器件的连接方式,确认其是否连接到Hisport总线上

3. 问题定位

当Hisport总线器件通信异常时,可以通过以下方法定位具体错误原因:

(1) 找到错误码

当Hisport总线器件通信异常时,hwproxy会记录并显示错误码 示例:

text
2024-02-26 11:18:32.984174 hwproxy INFO : chip.lua(428): Read data failed: ./opt/bmc/apps/hwproxy/lualib/chip.lua:230: ./opt/bmc/apps/hwproxy/lualib/stream/hisport.lua:57: ioctl(HISPORT_CMD_READ) failed: Unknown error 290 chip_name:Eeprom_3_13_010101

(2) 查看错误码含义

  • 错误码大于256时,错误为逻辑返回的寄存器值 使用公式ret_code = (reg_value & 0xFA) | 0X100 反算出寄存器值,从而确定错误类型 例如:错误码290对应的寄存器值为0x22(即二进制00100010),表示Hisport总线读写操作未完成,通常是硬件链路不通的问题 接收寄存器定义表格如下
寄存器编号功能描述寄存器定义
REG0接收FIFO状态[7:4] - rev
[3] - full flag
[2] - afull flag
[1] - empty flag
[0] - aempty-flag
REG1I2C通道号I2C通道号:
[7] - 命令有效标志,1表示有效
[6:0] - 0~127,最多支持128路I2C命令发送
REG2I2C接口命令[7] - 表示I2C控制器发送FIFO已满;
[6] - 表示I2C读写器件曾经出现 Clock Stretching;
[5] - 表示I2C读写时ACK校验错误;
[4] - 表示I2C读写启动时检测到总线异常拉低;
[3] - 表示I2C从FIFO取数据超时错误;
[2] - 表示命令帧结束标志,1是,0不是
[1] - 表示I2C读写出错,汇总BIT[6:3]的错误;
[0] - 表示此次I2C读写操作已完成
REG3I2C器件地址I2C器件地址(写入返回)
REG4I2C器件offset_HI2C地址高Byte,地址为8bit时无效(写入返回)
REG5I2C器件offset_LI2C地址低Byte(写入返回)
REG6I2C读数据I2C读数据高位
REG7I2C读数据I2C读数据低位
REG8与REG9共同表示一帧数据中字节数量字节数量高位
REG9与REG8共同表示一帧数据中字节数量字节数量低位
  • 错误码小于256时,错误为处理消息过程中的错误,例如203:超时,204:参数错误