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 |
| REG1 | I2C通道号 | I2C通道号: [7] - 命令有效标志,1表示有效 [6:0] - 0~127,最多支持128路I2C命令发送 |
| REG2 | I2C接口命令 | [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读写操作已完成 |
| REG3 | I2C器件地址 | I2C器件地址(写入返回) |
| REG4 | I2C器件offset_H | I2C地址高Byte,地址为8bit时无效(写入返回) |
| REG5 | I2C器件offset_L | I2C地址低Byte(写入返回) |
| REG6 | I2C读数据 | I2C读数据高位 |
| REG7 | I2C读数据 | I2C读数据低位 |
| REG8 | 与REG9共同表示一帧数据中字节数量 | 字节数量高位 |
| REG9 | 与REG8共同表示一帧数据中字节数量 | 字节数量低位 |
- 错误码小于256时,错误为处理消息过程中的错误,例如203:超时,204:参数错误