Intel® 800 Series Chipset Family Platform Controller Hub (PCH)
Datasheet, Volume 1 of 2
Host Controller
The host SMBus controller supports up to 100 kHz clock speed and is clocked by the RTC clock.
The
The SMBus Address Resolution Protocol (ARP) is supported by using the existing host controller commands through software, except for the Host Notify command (which is actually a received message).
The
Host Controller Operation Overview
The SMBus host controller is used to send commands to other SMBus Target devices. Software sets up the host controller with an address, command, and, for writes, data and optional PEC; and then tells the controller to start. When the controller has finished transmitting data on writes, or receiving data on reads, it generates an SMI# or interrupt, if enabled.
The host controller supports eight command protocols of the SMBus interface (refer to the System Management Bus (SMBus) Specification, Version 2.0): Quick Command, Send Byte, Receive Byte, Write Byte/Word, Read Byte/Word, Process Call, Block Read/Write, and Block Write–Block Read Process Call.
The SMBus host controller requires that the various data and command fields be setup for the type of command to be sent. When software sets the START bit, the SMBus Host controller performs the requested transaction, and interrupts the processor (or generates an SMI#) when the transaction is completed. Once a START command has been issued, the values of the “active registers” (Host Control, Host Command, Transmit Target Address, Data 0, Data 1) should not be changed or read until the interrupt status message (INTR) has been set (indicating the completion of the command). Any register values needed for computation purposes should be saved prior to issuing of a new command, as the SMBus host controller updates all registers while completing the new command.
Target functionality, including the Host Notify protocol, is available on the SMBus pins.
Using the SMB host controller to send commands to the
Command Protocols
In all of the following commands, the Host Status Register (offset 00h) is used to determine the progress of the command. While the command is in operation, the HOST_BUSY bit is set. If the command completes successfully, the INTR bit will be set in the Host Status Register. If the device does not respond with an acknowledge, and the transaction times out, the DEV_ERR bit is set.
If software sets the KILL bit in the Host Control Register while the command is running, the transaction will stop and the FAILED bit will be set after the
Quick Command
When programmed for a Quick Command, the Transmit Target Address Register is sent. The PEC byte is never appended to the Quick Protocol. Software should force the PEC_EN bit to 0 when performing the Quick Command. Software must force the I2C_EN bit to 0 when running this command. Refer to Section 5.5.1 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
Send Byte/Receive Byte
For the Send Byte command, the Transmit Target Address and Device Command Registers are sent. For the Receive Byte command, the Transmit Target Address Register is sent. The data received is stored in the DATA0 register. Software must force the I2C_EN bit to 0 when running this command.
The Receive Byte is similar to a Send Byte, the only difference is the direction of data transfer. Refer to Sections 5.5.2 and 5.5.3 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
Write Byte/Word
The first byte of a Write Byte/Word access is the command code. The next 1 or 2 bytes are the data to be written. When programmed for a Write Byte/Word command, the Transmit Target Address, Device Command, and Data0 Registers are sent. In addition, the Data1 Register is sent on a Write Word command. Software must force the I2C_EN bit to 0 when running this command. Refer to Section 5.5.4 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
Read Byte/Word
Reading data is slightly more complicated than writing data. First the
When programmed for the read byte/word command, the Transmit Target Address and Device Command Registers are sent. Data is received into the DATA0 on the read byte, and the DAT0 and DATA1 registers on the read word. Refer to Section 5.5.5 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
Process Call
The process call is so named because a command sends data and waits for the target to return a value dependent on that data. The protocol is simply a Write Word followed by a Read Word, but without a second command or stop condition.
When programmed for the Process Call command, the
The Process Call command with I2C_EN set and the PEC_EN bit set produces undefined results. Software must force either I2C_EN or PEC_EN to 0 when running this command. Refer to Section 5.5.6 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
- For process call command, the value written into bit 0 of the Transmit Target Address Register needs to be 0.
- If the I2C_EN bit is set, the protocol sequence changes slightly, the Command Code (Bits 18:11 in the bit sequence) are not sent. As a result, the target will not acknowledge (Bit 19 in the sequence).
Block Read/Write
The
The byte count field is transmitted but ignored by the
For a Block Write, software must either force the I2C_EN bit or both the PEC_EN and AAC bits to 0 when running this command.
The block write begins with a target address and a write condition. After the command code the
When programmed for a block write command, the Transmit target Address, Device Command, and Data0 (count) registers are sent. Data is then sent from the Block Data Byte register; the total data sent being the value stored in the Data0 Register.
On block read commands, the first byte received is stored in the Data0 register, and the remaining bytes are stored in the Block Data Byte register. Refer to section 5.5.7 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
I2C* Read
This command allows the
However, this does not allow access to devices using the I2C “Combined Format” that has data bytes after the address. Typically these data bytes correspond to an offset (address) within the serial memory chips.
For I2C Read command, the value written into bit 0 of the Transmit Target Address Register (SMB I/O register, offset 04h) needs to be 0.
The format that is used for the command is shown in the table below:
Bit | Description |
---|---|
1 | Start |
8:2 | Target Address – 7 bits |
9 | Write |
10 | Acknowledge from target |
18:11 | Send DATA1 register |
19 | Acknowledge from target |
20 | Repeated Start |
27:21 | Target Address – 7 bits |
28 | Read |
29 | Acknowledge from target |
37:30 | Data byte 1 from target – 8 bits |
38 | Acknowledge |
46:39 | Data byte 2 from target – 8 bits |
47 | Acknowledge |
– | Data bytes from target / Acknowledge |
– | Data byte N from target – 8 bits |
– | NOT Acknowledge |
– | Stop |
The
Block Write – Block Read Process Call
The block write - block read process call is a two - part message. The call begins with a target address and a write condition. After the command code the host issues a write byte count (M) that describes how many more bytes will be written in the first part of the message. If a controller has 6 bytes to send, the byte count field will have the value 6 (0000 0110b), followed by the 6 bytes of data. The write byte count (M) cannot be 0.
The second part of the message is a block of read data beginning with a repeated start condition followed by the target address and a Read bit. The next byte is the read byte count (N), which may differ from the write byte count (M). The read byte count (N) cannot be 0.
The combined data payload must not exceed 32 bytes. The byte length restrictions of this process call are summarized as follows:
The read byte count does not include the PEC byte. The PEC is computed on the total message beginning with the first target address and using the normal PEC computational rules. It is highly recommended that a PEC byte be used with the Block Write - Block Read Process Call. Software must do a read to the command register (offset 2h) to reset the 32 byte buffer pointer prior to reading the block data register.
Refer to Section 5.5.8 of the System Management Bus (SMBus) Specification, Version 2.0 for the format of the protocol.
Bus Arbitration
Several controllers may attempt to get on the bus at the same time by driving the SMBDATA line low to signal a start condition. The
If the
Clock Stretching
Some devices may not be able to handle their clock toggling at the rate that the
The
Bus Timeout (PCH as SMBus controller)
If there is an error in the transaction, such that an SMBus device does not signal an acknowledge or holds the clock lower than the allowed Timeout time, the transaction will time out. The
The 25 - ms Timeout counter will not count under the following conditions:
Interrupts/SMI#
The
The three tables below, specify how the various enable bits in the SMBus function control the generation of the interrupt, Host and target SMI, and Wake internal signals. The rows in the tables are additive, which means that if more than one row is true for a particular scenario then the Results for all of the activated rows will occur.
Event | INTREN (Host Control I/O Register, Offset 02h, Bit 0) | SMB_SMI_EN (Host Configuration Register, D31:F4:Offset 40h, Bit 1) | SMBALERT_DIS (Target Command I/O Register, Offset 11h, Bit 2) | Result |
---|---|---|---|---|
SMBALERT# asserted low (always reported in Host Status Register, Bit 5) | X | X | X | Wake generated |
X | 1 | 0 | Target SMI# generated (SMBUS_SMI_STS) | |
1 | 0 | 0 | Interrupt generated |
Event | INTREN (Host Control I/O Register, Offset 02h, Bit 0) | SMB_SMI_EN (Host Configuration Register, D31:F4:Offset 40h, Bit 1) | Event |
---|---|---|---|
Target Write to Wake/SMI# Command | X | X | Wake generated when asleep. Target SMI# generated when awake (SMBUS_SMI_STS). |
Target Write to SMLINK_SLAVE_SMI Command | X | X | Target SMI# generated when in the S0 state (SMBUS_SMI_STS) |
Any combination of Host Status Register [4:1] asserted | 0 | X | None |
1 | 0 | Interrupt generated | |
1 | 1 | Host SMI# generated |
HOST_NOTIFY_INTREN (Target Control I/O Register, Offset 11h, Bit 0) | SMB_SMI_EN (Host Configuration Register, D31:F4:Off40h, Bit 1) | HOST_NOTIFY_WKEN (Target Control I/O Register, Offset 11h, Bit 1) | Result |
---|---|---|---|
0 | X | 0 | None |
X | X | 1 | Wake generated |
1 | 0 | X | Interrupt generated |
1 | 1 | X | Target SMI# generated (SMBUS_SMI_STS) |
SMBus CRC Generation and Checking
If the AAC bit is set in the Auxiliary Control register, the
If the read cycle results in a CRC error, the DEV_ERR bit and the CRCE bit in the Auxiliary Status register at Offset 0Ch will be set.