Board Management Controller User Guide: Intel FPGA Programmable Acceleration Card N3000-N

ID 683186
Date 9/08/2020
Public

A. Example PLDM Command and Response Messages

This section provides an example command to read the board temperatures through PLDM over MCTP SMBus.
Use the following commands to read the board temperatures:
  • GetPDR
  • GetSensorReading

GetPDR

Run the GetPDR command with the board temperature PDR record handle (13) to get the board sensor ID, and temperature conversion formula. You can also observe threshold values set for the board temperature sensor.

GetPDR Request Command (0x51):

The length of the write data is 25.
0x0F 0x16 0x21
0x01 0x00 0x00 0xC8 
0x01 0x88 0x02 0x51 0x0D 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x80 0x00 0x00 0x00 
0x3D
Below is the representation of the GetPDR command arranged in their respective SMBUS, MCTP, PLDM header location.
Figure 4. GetPDR Command Packet Fields
To decode the PLDM message payload, refer to DSP0248_1.2.0 spec.
GetPDR Request Data Value
recordHandle 0x0000_000D – PDR handle for board temperature is 13
dataTransferHandle 0x0000_0000
transferOperationFlag 0x01
requestCount 0x0080 (128 bytes)
recordChangeNumber 0x0000

GetPDR Response:

The length of the received data is 131 bytes.
0x20 0x0F 0x7E 0xCF 0x01 0x00 0x05 0xC0 0x01 0x08 0x02 0x51 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x05 0x69 0x00 0x01 0x00 0x00 0x00 0x01 0x02 0x00 0x00
0x5F 0x00 0x34 0x12 0x01 0x00 0x3E 0x00 0x01 0x00 0x23 0x01 0x00 0x01 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x05 0x00 0x00 0x00 0x3F 0x00 0x00 0x00
0x00 0x00 0x00 0x02 0x02 0x14 0x00 0x00 0x00 0x05 0x06 0x00 0x00 0x40 0x40 0x00 0x00 0x40 0x40 0xFE 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x05 0x20 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x55 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x64 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0xF2
Below is the presentation of the of the above command arranged in their respective SMBUS, MCTP, PLDM header location
Figure 5. GetPDR Response Message Packet Fields
PLDM response message payload for GetPDR:
0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x05 0x69 0x00 
0x01 0x00 0x00 0x00 0x01 0x02 0x00 0x00 0x5F 0x00 
0x34 0x12 0x01 0x00 0x3E 0x00 0x01 0x00 0x23 0x01 0x00 0x01 0x02 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x01 0x05 0x00 0x00 0x00 0x3F 0x00 0x00 0x00 0x00 0x00 
0x00 0x02 0x02 0x14 0x00 0x00 0x00 0x05 0x06 0x00 0x00 0x40 0x40 0x00 0x00 0x40 
0x40 0xFE 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x05 0x20 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x55 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x64 0x00 0x00 0x00 0x00 0x00 0x00 0xF2
To decode the PLDM message payload, refer to DSP0248_1.2.0 specification:
GetPDRResponse Data Value
Completion code 0x00
nextRecordHandle 0x0000_0002
nextDataTransferHandle 0x0000_0000
transferFlag 0x05
responseCount 0x0069 = 105 bytes
recordData 0x00
Common PDR Header Format Value
recordHandle 0x0000_0001
PDRHeaderVersion 0x01
PDRType 0x02
recordChangeNumber 0x0000
dataLength 0x005F = 95 bytes
Numeric Sensor PDR Format Value
PLDMTerminusHandle 0x1234
sensorID 0x0001
entityType 0x003E
entityInstanceNumber 0x0001
containerID 0x0123
sensorInit 0x00- noInit
sensorAuxiliaryNamesPDR 0x01 - False
baseUnit 0x02 - units -Degrees C
unitModifier 0x00
rateUnit 0x00
baseOEMUnitHandle 0x00
auxUnit 0x00
auxUnitModifier 0x00
auxrateUnit 0x00
rel 0x00
auxOEMUnitHandle 0x00
isLinear 0x01
sensorDataSize 0x05 -Sint32
resolution 0x3F00_0000 (IEEE754 conversion is 0.5)
offset 0x00 (IEEE 754 conversion is 0.0)
accuracy 0x00
plusTolerance 0x02
minusTolerance 0x02
hysteresis 0x0000_0014
supportedThresholds 0x05
thresholdAndHysteresisVolatility 0x06
stateTransitionInterval 0x4040_0000 (IEEE 754 conversion is 3.0)
updateInterval 0x4040_0000 (IEEE 754 conversion is 3.0)
maxReadable 0x0000_00FE
minReadable 0x0000_0000
rangeFieldFormat 0x05 - Sint32
rangeFieldSupport 0x0010_0000
nominalValue 0x0000_0000
normalMax 0x0000_0000
normalMin 0x0000_0000
warningHigh 0x0000_0055 = 85 units
warningLow 0x0000_0000
criticalHigh 0x0000_0000
criticalLow 0x0000_0000
fatalHigh 0x0000_0064 = 100 units
fatalLow 0x0000_0000
PEC 0xF2
You can observe the following values from the above table:
  • The sensor ID for board temperature is 0x0001
  • Upper Warning high value is 85 °C
  • Upper Fatal high value is 100 °C
  • The reading conversation formula is Y= (m*X+B) where,
    • Y= Converted reading in units
    • X= Reading from sensor obtained by running GetSensorReading command
    • m= Resolution from PDR in units (0.5)
    • B = Offset from PDR in units (0.0)

GetSensorReading

Run the GetSensorReading command to get the raw sensor reading of the board temperature.

GetSensorReading Command (0x11):

the length of the write data is 15.

0x0F 0x0C 0x21 0x01 0x00 0x00 0xC8 0x01 0x89 0x02 0x11 0x01 0x00 0x00 0x4F

Below is the of the above command arranged in their respective SMBUS, MCTP, PLDM header location.

Figure 6. GetSensorReading Command Packet Fields

To decode the PLDM message payload, refer to DSP0248_1.2.0 specification.

GetSensorReading Requestdata Value
sensorID 0x0001
rearmEventState 0x00

GetSensorReading Response:

The length of the received data is 24.
0x20 0x0F 0x14 0xCF 0x01 0x00 0x05 0xC0 0x01 0x09 0x02 0x11 0x00 0x05 0x00 0x00 0x01 0x00 0x01 0x45 0x00 0x00 0x00 0xFB
Figure 7. GetSensorReading Response Message Packet Fields
To decode the PLDM message Payload, refer to DSP0248_1.2.0 specification.
GetSensorReading Response Value
CompletionCode 0x00
SensorDataSize 0x05 - sint32
SensorOperationalState 0x00 -enabled
SensorEventMessageEnable 0x00
presentState 0x01 - Normal
previousState 0x00 - unknown
eventState 0x01- Normal
presentReading 0x0000_0045 = 69 units
You can observe the following values from the above table:
  • The raw data value of board temperature is 69 °C
  • Find the actual temperature using the conversion formula, Y=(m*X+B)
  • Actual Board temperature value = (69*0.5+0.0)= 34.5 °C