User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 607
UG585 (v1.11) September 27, 2016
Chapter 20: I2C Controller
after the data is transmitted. The host is notified of this event by a transfer complete interrupt
(COMP bit set) and the TXDV bit in the status register is cleared. At this point, the host can proceed
in three ways:
1. Clear the HOLD bit. This causes the I2C interface to generate a STOP condition.
2. Supply more data by writing to the I2C address register. This causes the I2C interface to continue
with the transfer, writing more data to the slave.
If at any point the slave responds with a NACK, the transfer automatically terminates and a transfer
NACK interrupt is generated (the NACK bit set). When a NACK is received the Transfer Size register
indicates the number of bytes that still need to be sent minus one. Unless the very last byte written
by the host into the FIFO was a NACK byte, TXDV remains High. In this case, the host must clear the
FIFO by setting the CLR_FIFO bit in the Control register.
If at any point the SCL line is held Low by the master or the accessed slave for more than the period
specified in the Timeout register, a TO interrupt is generated and the outstanding amount of data
minus one is then read from the Transfer Size register.
Read Transfer
To accomplish an I2C read transfer, the host must perform these steps:
1. Write to the Control register to set up the SCL speed and addressing mode.
2. Set the MS, ACKEN, CLR_FIFO bits, and the RW bit in the Control register.
3. If the host wants to hold the bus after the data is received, it must also set the HOLD bit.
4. Write the number of requested bytes in the Transfer Size register.
5. Write the slave address in the I2C Address register. This initiates the I2C transfer.
The host is notified of any available received data in two ways:
1. If an outstanding transfer size is more than the FIFO size -2, a data interrupt is generated (DATA
bit set) when there are two free locations available in the FIFO.
2. If an outstanding transfer size is less than FIFO size -2, a transfer complete interrupt is generated
(COMP bit set) when the outstanding transfer size bytes are received.
In both cases, the RXDV bit in the status register is set.
The I2C interface automatically returns a NACK after receiving the last expected byte and terminates
the transfer by generating a STOP condition. If the HOLD bit is set during a master read transfer, the
I2C interface drives the SCL line Low.
If at any point the slave responds with NACK while the master transmits a slave address for a master
read transfer, the transfer automatically terminates and a transfer NACK interrupt is generated
(NACK bit is set). The outstanding amount of data can be read from the Transfer Size register.
If at any point the SCL line is held Low by the master or the accessed slave for more than the period
specified in the Timeout register, a TO interrupt is generated.