A. Example PLDM Command and Response Messages
- 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):
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:
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 |
- 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.
Below is the of the above command arranged in their respective SMBUS, MCTP, PLDM header location.
To decode the PLDM message payload, refer to DSP0248_1.2.0 specification.
GetSensorReading Requestdata | Value |
---|---|
sensorID | 0x0001 |
rearmEventState | 0x00 |
GetSensorReading Response:
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 |
- 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