Notes on I2C Bus FPGA Design
Duy-Ky Nguyen
I2C is a shared bus with the following properties
- multi-master operation, ie any device could become master.
- all I2C devices share only 2 signals : clock and bi-directional data
- each device has its own address, called device address
Notes
- START : is in the case when SCK is high and SDA is going low;
- STOP : is in the case when SCK is high and SDA is going high;
- Device : Address is address of Slave I2C. not local (slave memory) address, because it’s
possible to have many I2C devices connected to a single I2C bus; in addition,
any of them could become master;
- Write : or Read operation is for I2C data where Write means trasmitted outof and Read
means received into;
- It`s up to designer how to use these I2C data, it could be local (slave memory)
address or data;
- Local address must be transmitted out of the master, so it must be Write opertion,
even if it’s address to read data from local slave memory
- Read operation is only in the case to read data from a local memory slave
- Every byte must be followed by 9th bit for acknowledgement;
- Every byte must be acknowledged by Master/Slave Receiver, excepted the last byte of
Read operation
- A byte is acknowledged when a master sends a clock SCK and releases the data SDA for the
slave to hold the data to ZERO
- The last byte of Read operation must NOT be acknowledged where the slave NOT to hold the
data SDA to signify the master to end Read operation by STOP;
- Data change only during SCK low, the exception is Start/Stop where data change during SCK
high
Data are captured @posedge SCK
States change @ negedge SCK
Change @ negedge, capture @ posedge
02/19/2003