Click a button

System Management Bus (SMBus) description

line_col.gif (479 bytes)

Brief History

The SMBus was developed to enable an inexpensive, yet powerful, method for controlling and getting information from devices on a motherboard. One of the goals was to be able to design hybrid devices based on analog semiconductor technologies and with limited digital capabilities. To this end many of the commands defined by SMBus are geared for simple logic implementations. SMBus devices do not need to implement all of the commands defined in the SMBus specification. For example, Smart Batteries, Smart Battery Chargers and Selectors only use "Read/Write Word" and "Read Block" commands. This makes implementing a SMBus driver for Smart Batteries much easier. Batteries are free to use any SMBus commands such as Write Block, to implement custom functions, but it is not required by the Smart Battery Data specification. Write Block is typically used during the manufacturing process to initialize the battery data, e.g. mfg date, serial number, electronics trimming and scaling values etc.

Definition of Terms


Each device on the bus has one unique seven bit address. When a device "sees" it's address, it wakes up and responds to the rest of the command. Each address is seven bits long with a read/write bit appended in bit position 0, thus 127 devices are possible with one address available for an universal address. To receive a registered address on the bus, a definition of commands for the particular device class must be submitted to Intel and approved.


This describes the sequence of bits that come across the bus. Each command has its own protocol and knows what bit sequence to expect.


Since each device has its own protocol and all addresses are unique, each device also has its own set of commands. At this time all protocols have a maximum of eight bit commands. Note: there is nothing to prevent a device from creatively using the read and write block protocols to generate a plethora of commands, however the bus is too slow for very complex or frequent transactions.


The speed of the bus is specified from 10K Hz to 100K Hz. Most current implementations are 50K Hz or 100K Hz.

Command Types:

All commands put a start condition on the bus, begin the transmission, transmit the command, wait for an acknowledge from the slave (receiving) device, and then put a stop condition on the bus.


Quick Command:

8 Bits: This command is the simplest command with an address and a read/write bit. This command was designed to turn on and off simple devices. A write will enable a device and a read will disable it.

Send/receive Byte:

16 Bits: This is used to send up to 256 unique commands to a device.

Write/Read Byte:

24 Bits: Write is used to send 16 bits of data to a device. This is often interpreted as command and data, but the device may interpret the bits as desired. A read sends an 8 bit command and then receives back eight bits. Note with a read the slave address is put on the bus twice thus 32 bits cross the bus.

Write/Read Word:

32 Bits: A write sends 24 bits of data to a device. This is often interpreted as command, data[0] data[1], but the device may interpret the bits as desired. A read sends an 8 bit command to the device and receives back 16 bits. Note with the read command the slave address is put on the bus twice hence 40 bits of data go across the bus.

Write/Read Block:

Many Bits: This is used to send/receive up to 32 bytes of data to or from a device.

line_col.gif (479 bytes)
Questions about this web site should be sent to
Last modified: Tuesday, June 14, 2005.