SMBus 说明文档

概述

本文档介绍MOFFETT AI加速卡上 SMBus规格;SMBus寄存器定义,地址,详细说明;以及获取产品信息前的相应前置操作。BMC适配可参考本文档获取到MOFFETT AI加速卡的产品信息。

SMBus 规格

接口 地址
SMBus(7 bits 地址) 0x58

下图描述了Read Byte Protocol:

图示 描述已自动生成

下图描述了Wirte Byte Protocol:

图示 描述已自动生成

SMBus寄存器位宽为8位,下表描述了寄存器基本读取流程(S: Slave, M: Master):

方向 位数 内容
M->S 1 Start
M->S 8 Slave Address + Write
S->M 1 ACK
M->S 8 Register Address
S->M 1 ACK
M->S 1 Start
M->S 8 Slave Address + Read
S->M 1 ACK
S->M 8 Data Byte[7:0]
M->S 1 NACK
M->S 1 Stop

SMBus 寄存器描述

下表详细描述了SMBus寄存器的定义、地址及说明:

芯片温度 0x4E RO [7:0] 芯片温度 数据类型:int8_t 单位:摄氏度 芯片温度:44 摄氏度
板卡温度 0x74 RO [7:0] 板卡温度 数据类型:int8_t 单位:摄氏度 板卡温度:38 摄氏度
内存温度状态 0x76 RO [7:0] 内存温度状态 数据类型:uint8_t 0x0 -25摄氏度以下 0x1 -25 ~ 85摄氏度 0x2 85摄氏度以上 内存温度状态::-25 ~ 85摄氏度
Ecc State 0x4F RO [0] Ecc State 标志位 0:disable 1:enable [1] Ecc 1 bit Status 标志位 0:no error 1:error [2] Ecc 2 bits Status 标志位 0:no error 1:error [7:3] Reserved Ecc State:enable. Ecc 1 bit Status:no error. Ecc 2 bits Status:no error.
DDR Ecc Error 1 bit Counts 0x58-0x59 RO DDR Ecc Error 1 bit Counts 数据类型:uint16_t 0x58 表示[7:0] 0x59 表示[15:8] DDR Ecc Error 1 bit Counts:0
DDR Ecc Error 2 bits Counts 0x5A-0x5B RO DDR Ecc Error 2 bits Counts 数据类型:uint16_t 0x5A 表示[7:0] 0x5B 表示[15:8] DDR Ecc Error 2 bits Counts:0
PCIe Error Counts 0x70-0x73 RO 数据类型:uint32_t 0x70 表示[7:0] 0x71 表示[15:8] 0x72 表示[23:16] 0x73 表示[31:24] PCIe Error Counts:0
Max PCIe Link Speed/Width 0x77 RO [2:0] - Link Speed 0x0:unknown 0x1:2500MTPS PCIe Gen 1.0 0x2:5000MTPS PCIe Gen 2.0 0x3:8000MTPS PCIe Gen 3.0 0x4:16000MTPS PCIe Gen 4.0 0x5:32000MTPS PCIe Gen 5.0 [6:4] - Link Width 0x0:unknown 0x1:x1 0x2:x2 0x3:x4 0x4:x8 0x5:x16 0x6:x32 Max PCIe Link Speed/Width:PCIe Gen 3.0 x16
Current PCIe Link Speed/Width 0x78 RO 同上Max PCIe Link Speed/Width Current PCIe Link Speed/Width:PCIe Gen 3.0 x16
Nncore Utilization 0x79 RO [7:0] Nncore Utilization 数据类型:uint8_t,例如0x10表示16% Nncore Utilization:0%
DDR Utilization 0x7A RO [7:0] DDR Utilization 数据类型:uint8_t DDR Utilization:4%
芯片功耗 0x75 RO [7:0] 芯片功耗 数据类型:uint8_t 单位:W 芯片功耗:24 W
芯片电压 0xCC-0xCD RO 表示芯片电压 数据类型:uint16_t 单位:mV 0xCC 电压低8位 0xCD 电压高8位 芯片电压:980mV
内存电压 0xCC-0xCD RO 表示内存电压 数据类型:uint16_t 单位:mV 0xCC 电压低8位 0xCD 电压高8位 内存电压:980mV
Product Name 0xCE-0xD8 RO 表示Product Name(“MOFFETT S30”字符对应的ASCII码) 0xCE 表示字符 M 对应的ASCII码 0xCF 表示字符 O 对应的ASCII码 0xD0 表示字符 F 对应的ASCII码 0xD1 表示字符 F 对应的ASCII码 0xD2 表示字符 E 对应的ASCII码 0xD3 表示字符 T 对应的ASCII码 0xD4 表示字符 T 对应的ASCII码 0xD5 表示字符 空格 对应的ASCII码 0xD6 表示字符 S 对应的ASCII码 0xD7 表示字符 3 对应的ASCII码 0xD8 表示字符 0 对应的ASCII码 Product Name:MOFFETT S30
System Bus ID 0xD9 RO [7:0] 表示System Bus ID System Bus ID:0x04
Subsystem Vendor ID 0xDA-0xDB RO 表示SVID: 0x1f36 0xDA: 0x36 0xDB: 0x1f SVID: 0x1f36
Subsystem ID 0xDC-0xDD RO 表示SSID: 0x7000 0xDC: 0x00 0xDD: 0x70 SSID: 0x7000
Vendor ID 0xDE-0xDF RO 表示VID: 0x1f36 0xDE: 0x36 0xDF: 0x1f VID: 0x1f36
Device ID 0xE0-0xE1 RO 表示DID: 0x7030 0xE0: 0x30 0xE1: 0x70 DID: 0x7030
驱动版本 0xE2-0xE4 RO 0xE2 表示主版本号 0xE3 表示子版本号 0xE4 表示patch号,例如v3.2.1 驱动版本:3.3.1
固件版本 0xE5-0xE7 RO 0xE5 表示主版本号 0xE6 表示子版本号 0xE7 表示patch号,例如v1.0.13 固件版本:1.0.13
硬件版本 0xE8-0xE9 RO 0xE8 表示主版本号 0xE9 表示子版本号 硬件版本:2.0
PN 0xEA-0xF2 RO 表示PN(“00S30-00A”字符对应的ASCII码) 0xEA 表示字符 0 对应的ASCII码 0xEB 表示字符 0 对应的ASCII码 0xEC 表示字符 S 对应的ASCII码 0xED 表示字符 3 对应的ASCII码 0xEE 表示字符 0 对应的ASCII码 0xEF 表示字符 - 对应的ASCII码 0xF0 表示字符 0 对应的ASCII码 0xF1 表示字符 0 对应的ASCII码 0xF2 表示字符 A 对应的ASCII码 PN:00S30-00A
SN 0xF3-0xF9 RO 表示SN,详细说明见下方表格 SN:2023110400010
出厂时间 0xFB-0xFE RO 0xFB 表示年份高2位 0xFC 表示年份低2位 0xFD 表示月份 0xFE 表示日期 出厂时间:20230212
报错信息状态位 0xFF RO [7:1] Reserved [0] 标志位 0:正常 1:异常 报错信息状态位:0

SN号详解如下:

以 SN号 2023110400010 为例

图示 描述已自动生成

前置操作

S30 板卡内置三个设备,每次读取某个设备产品信息都需要先执行相应的前置操作后,才能读取到对应数据。

读取设备1前置操作:

  • 0x3f 地址写入 0x01,配置设备ID

  • 0x40 地址写入 0x01,配置读取操作

  • 0x45 地址写入 0xb8,配置读取长度

  • 0x46 地址写入 0x02,触发读取操作

  • polling 0x46地址的bit0, bit0=1时表示data就绪

  • 0x46 地址写入0x00

读取设备2前置操作:

  • 0x3f 地址写入 0x02,配置设备ID

  • 0x40 地址写入 0x01,配置读取操作

  • 0x45 地址写入 0xb8,配置读取长度

  • 0x46 地址写入 0x02,触发读取操作

  • polling 0x46地址的bit0, bit0=1时表示data就绪

  • 0x46 地址写入0x00

读取设备3前置操作:

  • 0x3f 地址写入 0x03,配置设备ID

  • 0x40 地址写入 0x01,配置读取操作

  • 0x45 地址写入 0xb8,配置读取长度

  • 0x46 地址写入 0x02,触发读取操作

  • polling 0x46地址的bit0, bit0=1时表示data就绪

  • 0x46 地址写入0x00

使用示例

本文档介绍如何在 MOFFETT AI加速卡上通过SMBus获取产品信息数据。

操作步骤

  • 手动加载SMBus驱动

modprobe i2c-i801
  • 查询主板I2C端口详情

i2cdetect -l

预期结果:

# i2cdetect -l
i2c-3   i2c             i915 gmbus dpd                          I2C adapter
i2c-1   i2c             i915 gmbus dpc                          I2C adapter
i2c-6   smbus           SMBus I801 adapter at f040              SMBus adapter
i2c-4   i2c             DPDDC-C                                 I2C adapter
i2c-2   i2c             i915 gmbus dpb                          I2C adapter
i2c-0   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-5   i2c             DPDDC-D                                 I2C adapter

查看 I2C 端口下挂载的设备:

i2cdetect -y 6

预期结果:

# i2cdetect -l
i2c-3   i2c             i915 gmbus dpd                          I2C adapter
i2c-1   i2c             i915 gmbus dpc                          I2C adapter
i2c-6   smbus           SMBus I801 adapter at f040              SMBus adapter
i2c-4   i2c             DPDDC-C                                 I2C adapter
i2c-2   i2c             i915 gmbus dpb                          I2C adapter
i2c-0   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-5   i2c             DPDDC-D                                 I2C adapter
  • 查看 I2C 端口下挂载的设备

i2cdetect -y 6

参数 6 表示 i2c-6,需要根据上一步中 SMBus 对应的 i2c 地址进行调整。

预期结果:

# i2cdetect -y 6
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- -- 34 35 36 -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: 50 -- 52 -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- 6c -- -- --
70: -- -- -- -- -- -- -- --

结果表示在 I2C 端口 6 下有识别到地址为 0x58 的设备,对应 MCU的地址。

  • 对设备读取对应信息

i2cget –y –f 端口号 设备地址 寄存器地址

预期结果:

# i2cget -y -f 6 0x58 0x01
0x00

备注

目前 MCU 没有自动获取 GPU 的数据,需要手动读取,读取方式如下:

前置操作:(MCU 设计为 GPU1,GPU2,GPU3)

i2cset -y -f 0 0x58 0x3f [0x01、0x02、0x03] (指定获取 GPU)

获取GPU1 数据前置操作步骤:

i2cset -y -f 0 0x58 0x3f 0x01 (指定获取 GPU1) 
i2cset -y -f 0 0x58 0x40 0x01 (读操作)
i2cset -y -f 0 0x58 0x45 0xB8 (读取的长度)
i2cset -y -f 0 0x58 0x46 0x02 (触发读取操作)
polling 0x46地址的bit0, bit0=1时表示data就绪 
i2cset -y -f 0 0x58 0x46 0x00

获取GPU2 数据前置操作步骤:

i2cset -y -f 0 0x58 0x3f 0x02 (指定获取 GPU2) 
i2cset -y -f 0 0x58 0x40 0x01 (读操作)
i2cset -y -f 0 0x58 0x45 0xB8 (读取的长度)
i2cset -y -f 0 0x58 0x46 0x02 (触发读取操作)
polling 0x46地址的bit0, bit0=1时表示data就绪 
i2cset -y -f 0 0x58 0x46 0x00

获取GPU3 数据前置操作步骤:

i2cset -y -f 0 0x58 0x3f 0x03 (指定获取 GPU3) 
i2cset -y -f 0 0x58 0x40 0x01 (读操作)
i2cset -y -f 0 0x58 0x45 0xB8 (读取的长度)
i2cset -y -f 0 0x58 0x46 0x02 (触发读取操作)
polling 0x46地址的bit0, bit0=1时表示data就绪 
i2cset -y -f 0 0x58 0x46 0x00

前置操作完成后即可读取对应寄存器,获取对应信息。