I2C (TWI) Master Software Library.
Basic routines for communicating with I2C slave devices. This single master implementation is limited to one bus master on the I2C bus.
This I2c library is implemented as a compact assembler software implementation of the I2C protocol which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c). Since the API for these two implementations is exactly the same, an application can be linked either against the software I2C implementation or the hardware I2C implementation.
Use 4.7k pull-up resistor on the SDA and SCL pin.
Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module i2cmaster.S to your target when using the software I2C implementation !
Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
- Note
- The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted to GNU assembler and AVR-GCC C call interface. Replaced the incorrect quarter period delays found in AVR300 with half period delays.
- Author
- Peter Fleury pfleu.nosp@m.ry@g.nosp@m.mx.ch http://tinyurl.com/peterfleury
- Copyright
- (C) 2015 Peter Fleury, GNU General Public License Version 3
- API Usage Example
- The following code shows typical usage of this library, see example test_i2cmaster.c
#define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet
int main(void)
{
unsigned char ret;
for(;;);
}
|
void | i2c_init (void) |
| initialize the I2C master interace. Need to be called only once More...
|
|
void | i2c_stop (void) |
| Terminates the data transfer and releases the I2C bus. More...
|
|
unsigned char | i2c_start (unsigned char addr) |
| Issues a start condition and sends address and transfer direction. More...
|
|
unsigned char | i2c_rep_start (unsigned char addr) |
| Issues a repeated start condition and sends address and transfer direction. More...
|
|
void | i2c_start_wait (unsigned char addr) |
| Issues a start condition and sends address and transfer direction. More...
|
|
unsigned char | i2c_write (unsigned char data) |
| Send one byte to I2C device. More...
|
|
unsigned char | i2c_readAck (void) |
| read one byte from the I2C device, request more data from device More...
|
|
unsigned char | i2c_readNak (void) |
| read one byte from the I2C device, read is followed by a stop condition More...
|
|
unsigned char | i2c_read (unsigned char ack) |
| read one byte from the I2C device More...
|
|
initialize the I2C master interace. Need to be called only once
- Returns
- none
Terminates the data transfer and releases the I2C bus.
- Returns
- none
unsigned char i2c_start |
( |
unsigned char |
addr | ) |
|
Issues a start condition and sends address and transfer direction.
- Parameters
-
addr | address and transfer direction of I2C device |
- Return values
-
0 | device accessible |
1 | failed to access device |
unsigned char i2c_rep_start |
( |
unsigned char |
addr | ) |
|
Issues a repeated start condition and sends address and transfer direction.
- Parameters
-
addr | address and transfer direction of I2C device |
- Return values
-
0 | device accessible |
1 | failed to access device |
void i2c_start_wait |
( |
unsigned char |
addr | ) |
|
Issues a start condition and sends address and transfer direction.
If device is busy, use ack polling to wait until device ready
- Parameters
-
addr | address and transfer direction of I2C device |
- Returns
- none
unsigned char i2c_write |
( |
unsigned char |
data | ) |
|
Send one byte to I2C device.
- Parameters
-
data | byte to be transfered |
- Return values
-
0 | write successful |
1 | write failed |
unsigned char i2c_readAck |
( |
void |
| ) |
|
read one byte from the I2C device, request more data from device
- Returns
- byte read from I2C device
unsigned char i2c_readNak |
( |
void |
| ) |
|
read one byte from the I2C device, read is followed by a stop condition
- Returns
- byte read from I2C device
unsigned char i2c_read |
( |
unsigned char |
ack | ) |
|
read one byte from the I2C device
Implemented as a macro, which calls either i2c_readAck or i2c_readNak
- Parameters
-
ack | 1 send ack, request more data from device
0 send nak, read is followed by a stop condition |
- Returns
- byte read from I2C device