Hardware/Software Interface
Page 90
5.3
BMC API (Application Programming Interface)
The BL51E uses a generic command interface for communication between the host (CPU)
and the controller (BMC). Application software uses command packets to communicate
with the BMC.
The application software controls the BMC via I2C/SMBus. The device address is
0x4D
(in
7-bit, non-shifted notation) or
0x9A
/
0x9B
(in 8-bit, shifted notation, write/read).
5.3.1
Command Packets
5.3.1.1
Command Packet Protocol
From a logical point of view, the command protocol has the following characteristics:
Commands are always initiated by the host. The controller never sends packets
without the host requesting it to do so.
Packets are either
-
unidirectional from host to controller, without an answer from the controller
-
bidirectional, with an answer from the controller
Each command has a unique identifier, consisting of the command opcode and a
packet type:
Table 78.
API – Packet types
Packet Type
Description
Request Data
Host >
Controller
Response Data
Controller >
Host
Error Signaling
PT_SB
Send Byte: Send command only
None
No response
-
PT_RBD
Read Byte Data: Send command
and get one data byte from
controller
None
1 byte
Response byte =
0xFF
PT_WBD
Write Byte Data: Send command
and send one data byte to
controller
1 byte
No response
-
PT_RWD
Read Word Data: Send command
and get two data bytes from
controller
None
2 bytes
Response byte =
0xFFFF
PT_WWD
Write Word Data: Send command
and send two data bytes to
controller
2 bytes
No response
-
PT_RB
1
1
PT_RB
always provides the block length as the first byte. The size of the entire block is always one byte greater than the
received block length because the block length byte itself is not counted in the length.
Do not use the received length byte directly for read block commands, because if there was an error this would lead to an
undefined state. It is better to always read a predefined length and use the received length byte to check if the block was
correctly transmitted.
Read Block: Send command and
get length and up to 32 bytes
None
1 length byte,
1 to 32 data bytes
First Response
byte =
0xFF
PT_WB
Write Block: Send command and
send length and up to 32 bytes
1 length byte,
1 to 32 data
bytes
No response
-