
Functional Description
5-102
82801AA and 82801AB Datasheet
Block Read/Write
The Block Write begins with a slave address and a write condition. After the command code, the
ICH issues a byte count that describes 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 the 20 bytes of data.
The byte count may not be 0.
Instead of a 32-byte buffer for Block Read/Write command, the ICH implements the Block Data
Byte register (D31:F3, I/O offset 07h) for Block Read/Write command.
When programmed for a block write command, the Transmit Slave Address, Host Command, and
Data0 (count) registers are sent. Data is then sent from the Block Data Byte register. After the byte
has been sent, the ICH sets the BYTE_DONE_STS bit to 1 in the Host Status register. If there are
more bytes to send, the software will write the next byte to the Block Data Byte register and will
also clear the BYTE_DONE_STS bit. The ICH will then send the next byte.
On block read commands, after the byte count is stored in the DATA 0 register, the first data byte
goes in the Block Data Byte register; the ICH then sets the BYTE_DONE_STS bit to 1 and
generates an SMI# or interrupt. The SMI# or interrupt handler reads the byte and then clears the
BYTE_DONE_STS bit to allow the next byte to be read into the Block Data Byte register. Note
that after receiving data byte N-1 of the block, the software needs to set the LAST_BYTE bit in the
Host Control Register; this allows the ICH to send a NOT ACK (instead of an ACK) after
receiving the last data byte (byte N) of the block.
After each byte of a block message, the ICH sets the BYTE_DONE_STS bit and generates an
interrupt or SMI#. Software clears the BYTE_DONE_STS bit before the next transfer occurs.
When the interrupt handler clears the BYTE_DONE_STS bit after the last byte has been
transferred, the ICH sets the INTR bit and generates another interrupt to signal the end of the block
transfer. Thus, for a block message of n bytes, the ICH generates n+1 interrupts. The interrupt
handler needs to be implemented to handle all of these interrupts.
The format of the Block Read/Write protocol is shown in
Table 5-79
.
Note:
For Block Write, if the I
2
C_EN bit is set, the format of the command changes slightly. The ICH still
sends the number of bytes indicated in the DATA0 register. However, it does not send the contents
of the Data 0 register as part of the message.