System Management Bus (SMBus) description
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
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.
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.
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.
16 Bits: This is
used to send up to 256 unique commands to a device.
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
32 Bits: A write
sends 24 bits of data to a device. This is often interpreted as command,
data data, 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.
Many Bits: This
is used to send/receive up to 32 bytes of data to or from a device.