
ADuC7124/ADuC7126
Data Sheet
Rev. C | Page 70 of 108
I2C
The ADuC7124/ADuC7126 incorporate two I2C peripherals
that can be configured as a fully I2C-compatible I2C bus master
device or as a fully I2C bus compatible slave device. Both I2C
channels are identical. Therefore, the following descriptions
apply to both channels.
The two pins used for data transfer, SDA and SCL, are configured
in a wire-AND’ed format that allows arbitration in a multimaster
system. These pins require external pull-up resistors. Typical
pull-up values are between 4.7 kΩ and 10 kΩ.
The I2C bus peripheral address in the I2C bus system is
programmed by the user. This ID can be modified any time a
transfer is not in progress. The user can configure the interface
to respond to four slave addresses.
The transfer sequence of an I2C system consists of a master
device initiating a transfer by generating a start condition while
the bus is idle. The master transmits the slave device address
and the direction of the data transfer (read or/write) during the
initial address transfer. If the master does not lose arbitration
and the slave acknowledges, the data transfer is initiated. This
continues until the master issues a stop condition and the bus
becomes idle.
The I2C peripheral can only be configured as a master or slave at
any given time. The same I2C channel cannot simultaneously
support master and slave modes.
The I2C interface on the ADuC7124/ADuC7126 includes the
following features:
Support for repeated start conditions. In master mode, the
ADuC7124/ADuC7126 can be programmed to generate a
repeated start. In slave mode, the ADuC7124/ADuC7126
recognizes repeated start conditions.
In master and slave mode, the part recognizes both 7-bit
and 10-bit bus addresses.
In I2C master mode, the ADuC7124/ADuC7126 supports
continuous reads from a single slave up to 512 bytes in a
single transfer sequence.
Clock stretching is supported in both master and slave modes.
In slave mode, the ADuC7124/ADuC7126 can be pro-
grammed to return a NACK. This allows the validiation of
checksum bytes at the end of I2C transfers.
Bus arbitration in master mode is supported.
Internal and external loopback modes are supported for
I2C hardware testing in loopback mode.
The transmit and receive circuits in both master and slave
mode contain 2-byte FIFOs. Status bits are available to the
user to control these FIFOs.
Configuring External Pins for I2C Functionality
The I2C pins of the ADuC7124/ADuC7126 device are P1.0 and
P1.1 for I2C0 and P1.2 and P1.3 for I2C1.
P1.0 and P1.2 are the I2C clock signals, and P1.1 and P1.3 are
the I2C data signals. For instance, to configure I2C0 pins (SCL0,
SDA0), Bit 0 and Bit 4 of the GP1CON register must be set to 1
to enable I2C mode. On the other hand, to configure I2C1 pins
(SCL1, SDA1), Bit 8 and Bit 12 of the GP1CON register must
Serial Clock Generation
The I2C master in the system generates the serial clock for a
transfer. The master channel can be configured to operate in
fast mode (400 kHz) or standard mode (100 kHz).
The bit rate is defined in the I2CxDIV MMR as follows:
)
(2
)
2
(
DIVL
DIVH
+
=
UCLK
CLOCK
SERIAL
f
where:
fUCLK is the clock before the clock divider.
DIVH is the high period of the clock.
DIVL is the low period of the clock.
Therefore, for 100 kHz operation,
DIVH = DIVL = 0xCF
and for 400 kHz
DIVH = 0x28, DIVL = 0x3C
The I2CxDIV register corresponds to DIVH:DIVL.
I2C Bus Addresses
Slave Mode
In slave mode, the I2CxID0, I2CxID1, I2CxID2, and I2CxID3
registers contain the device IDs. The device compares the four
I2CxIDx registers to the address byte received from the bus
master. To be correctly addressed, the seven MSBs of either ID
register must be identical to the seven MSBs of the first received
address byte. The LSB of the ID registers (the transfer direction
bit) is ignored in the process of address recognition.
The ADuC7124/ADuC7126 also support 10-bit addressing
mode. When Bit 1 of I2CxSCON (ADR10EN bit) is set to 1, one
10-bit address is supported in slave mode and is stored in the
I2CxID0 and I2CxID1 registers. The 10-bit address is derived as
follows:
I2CxID0[0] is the read/write bit and is not part of the I2C
address.
I2CxID0[7:1] = Address Bits[6:0].
I2CxID1[2:0] = Address Bits[9:7].
I2CxID1[7:3] must be set to 11110b.