使用示例

概述

本文档介绍如何在 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

参数 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

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

最后更新于

这有帮助吗?