鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

I2C管理接口

CPLD通过了一组I2C管理接口实现与BMC通信功能。包括:

  • 模组基本信息查询。
  • CPU相关信息查询与配置。
  • 模组复位控制。
  • 高速设备信息查询。
  • 传感器信息查询。
  • 电源控制及状态查询等。

BMC采用统一的接口与协议实现对组件的管理,SMC(Satellite Manager Controller)用于智能组件管理,具有以下特点:

  • 采用命令+响应的方式交互数据。
  • 通信容量大。
  • 采用I2C作为底层链路,链路设计简单,节约IO资源。
  • 整个传输过程自带CRC校验,数据传输可靠。

图1所示,I2C根链路接地址固定为0xAE的EEPROM,BMC到每个组件的根链路下下挂SMC器件,BMC通过SMC命令字访问CPLD,CPLD的SMC模块的默认I2C地址为0x60。

图1 典型组件管理拓扑示意图

一次完整的读取流程包括读取请求和读取响应两个部分,如图2图3所示。两个部分必须配套使用,中间不能穿插其他命令。数据字段描述定义了读取流程的详细信息,如表1所示。

图2 SMC读取请求操作
图3 SMC读取响应操作
表1 数据字段描述

字段

描述

详细定义

SlaveAddress

SMC从设备地址

从机I2C地址

CommondCode

命令类型

20h:Write Opcode<br>

21h:ReadBuffer<br>

22h:WriteOpcodeWithData<br>

30h:WriteOpcode-Forward<br>

31h:ReadBuffer-Forward

Length

命令长度

表示命令中Length之后,CRC之前的数据个数

Completion Code

完成码

0h:Success<br>

1h:Opcode Not Support<br>

2h:Data Not Ready<br>

3h:Parameter Error<br>

4h:Internal Error<br>

5h:CRC Error<br>

6h:Device Error

CRC8

CRC校验码

参考Smbus PEC机制,CRC多项式使用x8+x2+x1+1,从DEV_ADDR开始计算

Opcode

命令字

详见图4

SMC使用命令字进行管脚功能配置,命令字的格式描述如表2所示。

表2 SMC命令字描述

Function(6bit)

Command(24)

MS(1)

RW(1)

Parameter(8)

0:公共功能<br>

1:扩展组件管理功能<br>

2:机箱部件管理功能<br>

3:计算部件管理功能<br>

4:内存部件管理功能<br>

5:存储部件管理功能<br>

6:散热部件管理功能<br>

7:IO扩展部件管理功能<br>

8:加速扩展部件管理功能<br>

命令字<br>

见接口定义

0:多个读取<br>

1:单个读取

0:写入<br>

1:读取

1-N:获取/设置第N个设备信息

协议定义了位读,块读,位写、块写4种操作模式。

位读:M/S=1;RW=1;Param=要读取的设备/对象序号; 返回单个对象的数据。

块读:M/S=0;RW=1;Param=0;返回该命令所有数据。

位写:M/S=1;RW=0;Param=要读取的设备/对象序号。

块写:M/S=0;RW=0;Param=0。

Function、Command、MS和RW组合在一起为Opcode,定义如图4所示。具体的SMC命令字信息参考表3/表4/表5

图4 Opcode定义
表3 BMC SMC命令字-0h通用功能

Command

M=0,S=1/

R=1,W=0/

Param

描述

标准命令字

数据定义

备注

1h

0/1/0

查询硬件信息

Get Hardware Version

[15:8]

保留/board_id

首版本预留

[7:4]

BOM版本

[3:0]

PCB版本

2h

0/1/0

查询软件信息

Get Software Version

[31:24]

RSVD

-

[23:16]

DFX的数据长度(N)-最多255Bytes

[15:8]

SMC响应命令间隔(ms)

[7:0]

背板CPLD Ver(格式:高四位.低四位),如数据0x11代表1.01版本

3h

0/1/0

查询组件工作模式

Get Unit Workmode

[7:0]

查询组件当前工作模式

=0h - 正常模式

=1h - 装备测试模式

-

1/0/1

设置组件工作模式

Set Unit Workmode

[7:0]

让组件进入生产测试模式,执行LED等测试项

=0h - 正常模式

=1h - 装备测试模式

-

4h

0/1/0

获取所有传感器读值

Get Sensor Info

[127:112]

stby_3v3 adc采样电压*2=实际电压

ADC采样电压:

寄存器值/0x7fff*2.5=采样电压

2N=18,N为设备个数

[111:96]

stby_1v8 adc采样电压*1=实际电压

[95:80]

vcc_12v0 adc采样电压*6=实际电压

[79:64]

3V3_vcc adc采样电压*2=实际电压

[63:48]

0v9_vddavs adc采样电压*1=实际电压

[47:32]

1v8_cpu adc采样电压*1=实际电压

[31:16]

MOS附近板温

[15:0]

电感背面板温

6h

0/1/0

查询固件开发时间

Get SMC Release Time

[39:32]

查询固件开发的时间

[31:24]

[23:16]

[15:8]

[7:0]

7h

0/1/0

获取DFX信息

Get DFX Info

NA

采用块读方案,DFX数据的长度在命令字2h中可以获取到

产品CPLD存储数据,由产品硬件自定义。BMC合入此需求,CPLD需要支持该命令,可以全0;BMC软件在执行一键日志收集的时候通过该命令字将所有的硬件DFX信息收集下来,逻辑在该命令字的数据中填写所有有用的数据(即原CPLD全寄存器收集功能,逻辑命令字返回数据的合集),响应数据长度为82Byte。

8h

0/1/0

查询Test寄存器

Get Test Reg

[7:0]

测试寄存器:55h或Aah

BMC:交替向Test寄存器中写入55h和Aah,再读取Test寄存器;组件:判断Test寄存器数值是否持续变化

1/0/1

设置Test寄存器

Set Test Reg

[7:0]

测试寄存器:55h或Aah

9h

0/1/0

查询组件CPLD的升级方式

Get SMC Upgrade Info

[15:8]

Localbus模拟JTAG升级通道

=0h - BMC JTAG管脚直接升级

=xh - JTAG升级通道(模组板02h)

描述组件CPLD的JTAG升级通道,与扩展板的SMC命令字Eh对应

[7:0]

组件CPLD升级模式

=0h - 自升级

=1h - BMC的JTAG管脚直接升级(扩展板)

=2h - Localbus模拟JTAG升级(其他组件)

=3h - I2C升级

描述组件中CPLD的升级方式,扩展板CPLD在BMC的JTAG管脚下直接升级,其余组件通过Localbus模拟JTAG链路

Ah

0/1/0

查询组件上电标识

Get Unit PowerStatus

[7:0]

=0h - 没有正常上电

=1h - 组件业务电所有电源已正常上电

-

Bh

0/1/0

查询组件EEPROM写保护状态

Get CSR WP Status

[7:0]

=0h - 关闭写保护

=1h - 打开写保护

此处的EEPROM是指存放CDR的EEPROM

1/0/1

设置组件EEPROM写保护状态

Set CSR WP Status

[7:0]

=0h - 关闭写保护

=1h - 打开写保护

表4 BMC SMC命令字-3h计算部件管理

Command

M=0,S=1/

R=1,W=0/

Param

描述

标准命令字

数据定义

备注

2h

0/1/0

查询系统事件

Get System Event

[7:5]

保留

-

4

基础板电源上电超时事件(vcc_time_out)

=0h - 无效

=1h - 有效

-

3

基础板电源异常掉电事件(vcc_power_fail)

=0h - 无效

=1h - 有效

-

2

IMU使能复位业务系统事件(os_rst_n_event)

=0h - 正常,无事件产生

=1h - 产生复位事件

U通过写CPLD寄存器的方式,复位OS

1

BMC或板内跳冒使能复位业务系统事件(bmc_sysrst_en_event)

=0h - 无效

=1h - 有效

-

0

业务系统解复位事件(pltrst_event)

=0h - 无效

=1h - 有效

-

1/0/1

清除系统事件

Clear System Event

[7:5]

保留

-

4

清除业务系统上电超时事件(clear_vcc_time_out)

=0h - 清除上电超时

=1h - default

-

3

清除业务系统异常掉电事件(clear_vcc_power_fail)

=0h - 清除异常掉电

=1h - default

-

2

清除IMU使能复位业务系统事件(clear_bmc_os_rst_n)

=0h - 清除复位事件(写清)

=1h - default

-

1

清除BMC或板内跳冒使能复位业务系统事件(clear_bmc_sysrst_en)

=0h - 清除复位事件(写清)

=1h - default

-

0

清除业务系统复位事件(clear_pltrst_event)

=0h - 清除复位事件(写清)

=1h - default

-

3h

0/1/0

上电超时电源告警码

Get PowerFail Code

[7:0]

基础板电源上电超时告警码, 指示当前具体电源告警

-

4h

0/1/0

异常掉电电源告警码

-

[7:0]

基础板电源异常掉电告警码, 指示当前具体电源告警

-

6h

0/1/0

查询BMC复位系统寄存器

Get System Reset Status

[7:2]

保留

-

1

BMC控制CPLD模拟前面板RST键,复位业务系统(bmc_sysrst)

=0h - 默认值

=1h - 模拟面板复位

-

0

BMC控制CPLD操作ME_RST,复位IMU(ME)系统(bmc_me_rst_en)

=0h - 默认值

=1h - 复位IMU

-

1/0/1

设置BMC复位系统寄存器

Reset System

[7:2]

保留

-

1

BMC控制CPLD模拟前面板RST键,复位业务系统(bmc_sysrst)

=0h - 默认值

=1h - 模拟面板复位

-

0

BMC控制CPLD操作ME_RST,复位IMU(ME)系统(bmc_me_rst_en)

=0h - 默认值

=1h - 复位IMU

-

7h

0/1/0

查询外设复位状态

-

[7:3]

保留

-

2

BMC PCIE接口和LPC接口复位

=0h - 解复位

=1h - 复位

1

CPU LPC接口复位

=0h - 解复位

=1h - 复位

0

保留

1/0/1

设置外设复位状态

-

[7:3]

保留

-

-

-

-

2

BMC PCIE接口和LPC接口复位

=0h - default

=1h - 复位(写清)

1

CPU LPC接口复位

=0h - default

=1h - 复位(写清)

0

保留

8h

0/1/0

查询CPU状态

Get CPU Status

[15:5]

预留

-

4

rst_out_cpu1_tb_n上报(业务电上电有效)

=0h - 正常

=1h - 有复位事件发生

-

3

预留

-

2

imu_caterr(业务电上电有效)

=0h - 正常

=1h - 有复位事件发生

-

1

os_halt_detect(业务电上电有效)

=0h - 正常

=1h - 有复位事件发生

-

0

系统复位事件汇聚

=0h - 正常

=1h - 有复位事件发生

-

9h

0/1/0

查询CPU Efuse电源状态

Get CPU Efuse Power Status

1

CPU0 efuse 1.8V PG信号

=0h - efuse电源不工作或异常

=1h - efuse电源工作正常

-

0

CPU0 efuse 1.8V 使能信号(业务电上电有效)

=1h - efuse电源未使能

=0h - efuse电源使能

-

Bh

0/1/0

查询100M时钟是否丢失

-

[7:1]

保留

-

0

100M时钟是否丢失

=1h - 时钟丢失

=0h - 正常

Dh

0/1/0

查询所有处理器状态

响应数据长度为1*N

N=CPU数量

Get CPU Event

7

CPU2 Prochot信号(BIOS寄存器发送sys)

=0h - 未使能

=1h - 使能

CPU2进行降频标记,由BIOS实时控制,BMC可读

0:未发生降频

1:发生降频

6

CPU2 Thremtrip信号(BIOS寄存器发送sys)

=0h - 未使能

=1h - 使能

CPU2发生thermtrp掉电事件

1:事件发生,BMC清零清事件

0:未发生该事件

5

CPU1 系统复位事件汇聚

=0h - 正常

=1h - 有复位事件发生

-

4

CPU1 caterr信号

=0h - 无效

=1h - 有效

cpu1_caterr_n_effect(33a bit1)-catmcerr

3

CPU1 Prochot信号(BIOS寄存器发送sys)

=0h - 未使能

=1h - 使能

CPU1进行降频标记,由BIOS实时控制,BMC可读

0:未发生降频

1:发生降频

2

CPU1 Thremtrip信号(BIOS寄存器发送sys)

=0h - 未使能

=1h - 使能

CPU1发生thermtrp掉电事件

1:事件发生,BMC清零清事件

0:未发生该事件

1

CPU1 smimcErr信号

=0h - 无效

=1h - 有效

cpu1_prochot_n_effect(33a bit2)-smimcerr

新增

0

CPU1在位状态

=0h - 不在位

=1h - 在位

-

1/0/1

清除处理器状态(N=CPU数量) 响应数据长度为2 (自发现版本修改为1)

Clear CPU Event

2

Thremtrip信号(clear_cpu1_thermtrip_event)

=0h - 清除thremtrip(写清)

=1h - default

0:清除告警事件

1:不清除

(Param:自发现版本修改为N)

Fh

0/1/0

查询所有CPU的Port(Hilink)的PCIE/Serdes配置

响应数据长度为22*N

N=IO Die数量

Get CPU HighLink Config

[343:336]

CPU2 Hilink10 带宽配置

-

[335:328]

CPU2 Hilink10 PCIE/Serdes模式配置

-

[327:320]

CPU2 Hilink9 带宽配置

-

[319:312]

CPU2 Hilink9 PCIE/Serdes模式配置

-

[311:304]

CPU2 Hilink8 带宽配置

-

[303:296]

CPU2 Hilink8 PCIE/Serdes模式配置

-

[295:288]

CPU2 Hilink7 带宽配置

-

[287:280]

CPU2 Hilink7 PCIE/Serdes模式配置

-

[279:272]

CPU2 Hilink6 带宽配置

-

[271:264]

CPU2 Hilink6 PCIE/Serdes模式配置

-

[263:256]

CPU2 Hilink5 带宽配置

-

[255:248]

CPU2 Hilink5 PCIE/Serdes模式配置

-

[247:240]

CPU2 Hilink4 带宽配置

-

[239:232]

CPU2 Hilink4 PCIE/Serdes模式配置

-

[231:224]

CPU2 Hilink3 带宽配置

03h

[223:216]

CPU2 Hilink3 PCIE/Serdes模式配置

06h

[215:208]

CPU2 Hilink2 带宽配置

03h

[207:200]

CPU2 Hilink2 PCIE/Serdes模式配置

06h

[199:192]

CPU2 Hilink1 带宽配置

02h

[191:184]

CPU2 Hilink1 PCIE/Serdes模式配置

02h

[183:176]

CPU2 Hilink0 带宽配置

02h

[175:168]

CPU2 Hilink0 PCIE/Serdes模式配置

02h

[175:168]

CPU1 Hilink10 带宽配置

-

[167:160]

CPU1 Hilink10 PCIE/Serdes模式配置

-

[159:152]

CPU1 Hilink9 带宽配置

-

[151:144]

CPU1 Hilink9 PCIE/Serdes模式配置

-

[143:136]

CPU1 Hilink8 带宽配置

-

[135:128]

CPU1 Hilink8 PCIE/Serdes模式配置

-

[127:120]

CPU1 Hilink7 带宽配置

-

[119:112]

CPU1 Hilink7 PCIE/Serdes模式配置

-

[111:104]

CPU1 Hilink6 带宽配置

-

[103:96]

CPU1 Hilink6 PCIE/Serdes模式配置

-

[95:88]

CPU1 Hilink5 带宽配置

-

[87:80]

CPU1 Hilink5 PCIE/Serdes模式配置

-

[79:72]

CPU1 Hilink4 带宽配置

-

[71:64]

CPU1 Hilink4 PCIE/Serdes模式配置

-

[63:56]

CPU1 Hilink3 带宽配置

03h

[55:48]

CPU1 Hilink3 PCIE/Serdes模式配置

06h

[47:40]

CPU1 Hilink2 带宽配置

03h

[39:32]

CPU1 Hilink2 PCIE/Serdes模式配置

06h

[31:24]

CPU1 Hilink1 带宽配置

02h

[23:16]

CPU1 Hilink1 PCIE/Serdes模式配置

02h

[15:8]

CPU1 Hilink0 带宽配置

=0h - 默认配置

=1h -1X16

=2h -1X8/2X8

=3h -1X4/2X4/4X4

=4h - 2X2/4X2/8X2

=5h - X4X2X2

=6h - X2X2X4

=7h - X8X4X4

=8h - X4X4X8

=9h - X8X4X2X2

02h

[7:0]

CPU1 Hilink0 PCIE/Serdes模式配置

=0h - 默认配置

=1h - PCIE

=2h - HCCS/DMI

=3h - (SATA + PCIE)/SATA

=4h - SAS

=5h - CXL

=6h - ETH/GBE

=7h - USB

=8h - 通过GPIO选择复用

02h

21h

0/1/0

电源告警记录锁存寄存器

Get PowerFail Event

[7:4]

预留

-

3

单板锁存异常记录指示寄存器

1:单板锁存异常未记录

0:单板锁存异常已记录

写0清除

latch_issue_record_tag

2

单板锁存异常指示寄存器

1:单板发生过异常,被锁存

0:单板未发生过异常

latch_issue_tag

1

单板当前错误记录指示寄存器

1:单板当前异常未记录

0:单板当前异常已记录

写0清除

issue_record_tag

0

单板当前异常指示寄存器

1:单板当前状态异常

0:单板当前状态单板正常

issue_tag

1/0/1

清除电源告警记录锁存寄存器

Clear PowerFail Event

[7:4]

预留

-

3

清除单板锁存异常记录指示寄存器

1:default

0:清除单板锁存异常记录

写0清除

clear_latch_issue_record_tag

1

清除单板当前错误记录指示寄存器

1:default

0:清除单板当前异常记录

写0清除

clear_issue_record_tag

E0h

0/1/0

获取SSC生效状态

GET_SSC_ENABLE

[7:1]

保留

-

0

查询SSC生效状态

=0h -SSC功能不使能

=1h -SSC功能使能

先设置SSC_MODE和SSC_NUM,然后设置SSC_ENABLE,查询SSC_END为1后,再上电开机(整机AC上电后,设置完SSC,再开机,如要修改SSC,需要AC上电或者模组板CPLD复位)

1/0/1

设置SSC生效状态

SET_SSC_ENABLE

[7:1]

保留

0

设置SSC生效状态

=0h -SSC功能不使能

=1h -SSC功能使能

E1h

0/1/0

获取SSC模式状态

GET_SSC_MODE

[7:1]

保留

0

查询SSC模式状态

=0h -负频偏

=1h - 正频偏

1/0/1

设置SSC模式状态

SET_SSC_MODE

[7:1]

保留

0

设置SSC模式状态

=0h -负频偏

=1h - 正频偏

E2h

0/1/0

获取SSC 频偏值

GET_SSC_NUM

[7:0]

查询SSC 频偏值

00h~ffh 频偏值

1/0/1

设置SSC 频偏值

SET_SSC_NUM

[7:0]

设置SSC 频偏值

00h~ffh 频偏值

E3h

0/1/0

获取SSC 调频是否结束

GET_SSC_END

[7:1]

保留

0

查询SSC 调频是否结束

=0h -调频未结束

=1h - 调频结束

E4h

1/0/1

BMC控制上下电

SET_BMC_PWR_UPDOWN

[7:2]

保留

-

1

bmc_pwr_up写1上电(写清)

-

0

bmc_pwr_down写1下电(写清)

-

F1h

0/1/0

查询VRD fw生效状态

Get VRD Upgrade Status

[7:1]

保留

-

0

查询VRD固件生效

=0h -正常工作状态

=1h - 生效VR固件

-

1/0/1

设置VRD fw生效状态

Set VRD Upgrade Status

[7:1]

保留

-

0

设置VRD固件生效

=0h -default

=1h - 生效VR固件(写清)

BMC写1生效,逻辑自动清除

F2h

0/1/0

VR 固件类型区分

Get VRDfw Type

[7:2]

保留

用于BMC区分当前基础板上上件的VR控制器和DrMOS厂家,BMC通过不同的组合选择不同的升级文件和流程

[1:0]

VRD控制器类型: 01=SD5003 00=IFX 10=MPS 11=RSV

表5 BMC SMC命令字-Ah增强功能

Command

M=0,S=1/

R=1,W=0/

Param

描述

标准命令字

数据定义

备注

4h

1/0/1

BIOS配置

Clear BIOS CMOS

[7:1]

保留

-

0

清除CMOS

=0h - 无效

=1h - 有效

用于清除CMOS - BIOS恢复默认设置,需要和BIOS核对解耦情况

0/1/1

BIOS配置

GET Clear BIOS CMOS

[7:1]

保留

-

0

清除CMOS

=0h - 无效

=1h - 有效

获取BIOS清除CMOS功能

协议定义规则:

  • 单个Opcode,单个设备数据读取/写入长度需要固定。实际数据长度跟设备数目相关,由SMC定义。
  • 通过不同命令字(固定BIT)区分读取单个还是读多个。
  • 通过不同命令字(固定bit)区分读写。
  • Opcode定义时,需要考虑读取频率,尽可能将高频读取的数据整合到一个Opcode中。
  • 控制命令需要根据实际应该场景定义,尽可能单独定义。
  • 多字节传输时低字节在前。
  • Param参数中N从1开始计数。