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

字段  | 
描述  | 
详细定义  | 
|---|---|---|
SlaveAddress  | 
SMC从设备地址  | 
从机I2C地址  | 
CommondCode  | 
命令类型  | 
20h:Write Opcode 21h:ReadBuffer 22h:WriteOpcodeWithData 30h:WriteOpcode-Forward 31h:ReadBuffer-Forward  | 
Length  | 
命令长度  | 
表示命令中Length之后,CRC之前的数据个数  | 
Completion Code  | 
完成码  | 
0h:Success 1h:Opcode Not Support 2h:Data Not Ready 3h:Parameter Error 4h:Internal Error 5h:CRC Error 6h:Device Error  | 
CRC8  | 
CRC校验码  | 
参考Smbus PEC机制,CRC多项式使用x8+x2+x1+1,从DEV_ADDR开始计算  | 
Opcode  | 
命令字  | 
详见图4  | 
SMC使用命令字进行管脚功能配置,命令字的格式描述如表2所示。
Function(6bit)  | 
Command(24)  | 
MS(1)  | 
RW(1)  | 
Parameter(8)  | 
|---|---|---|---|---|
0:公共功能 1:扩展组件管理功能 2:机箱部件管理功能 3:计算部件管理功能 4:内存部件管理功能 5:存储部件管理功能 6:散热部件管理功能 7:IO扩展部件管理功能 8:加速扩展部件管理功能  | 
命令字 见接口定义  | 
0:多个读取 1:单个读取  | 
0:写入 1:读取  | 
1-N:获取/设置第N个设备信息  | 
协议定义了位读,块读,位写、块写四种操作模式。
- 位读: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命令字信息参考表1/表1/表1。


