English
Language : 

82801FB Datasheet, PDF (216/786 Pages) Intel Corporation – Intel I/O Controller Hub 6 (ICH6) Family
Functional Description
When programmed for the read byte/word command, the Transmit Slave 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. See 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 slave 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 ICH6 transmits the Transmit Slave Address,
Host Command, DATA0 and DATA1 registers. Data received from the device is stored in the
DATA0 and DATA1 registers. 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. See section 5.5.6 of the System Management Bus (SMBus) Specification, Version
2.0 for the format of the protocol.
Note: For process call command, the value written into bit 0 of the Transmit Slave Address Register
(SMB I/O register, offset 04h) needs to be 0.
Note: 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 slave will not acknowledge (bit 19 in the sequence).
Block Read/Write
The ICH6 contains a 32-byte buffer for read and write data that can be enabled by setting bit 1 of
the Auxiliary Control register at offset 0Dh in I/O space, as opposed to a single byte of buffering.
This 32-byte buffer is filled with write data before transmission, and filled with read data on
reception. In the ICH6, the interrupt is generated only after a transmission or reception of 32 bytes,
or when the entire byte count has been transmitted/received.
The byte count field is transmitted but ignored by the ICH6 as software will end the transfer after
all bytes it cares about have been sent or received.
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 slave address and a write condition. After the command code the
ICH6 issues a byte count describing how many more bytes will follow in the message. If a slave
had 20 bytes to send, the first byte would be the number 20 (14h), followed by 20 bytes of data.
The byte count may not be 0. A Block Read or Write is allowed to transfer a maximum of 32 data
bytes.
When programmed for a block write command, the Transmit Slave 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. See section 5.5.7 of the System Management Bus (SMBus) Specification, Version 2.0 for
the format of the protocol.
Note: For Block Write, if the I2C_EN bit is set, the format of the command changes slightly. The ICH6
will still send the number of bytes (on writes) or receive the number of bytes (on reads) indicated in
the DATA0 register. However, it will not send the contents of the DATA0 register as part of the
216
Intel® I/O Controller Hub 6 (ICH6) Family Datasheet