Search FAQs on the left to see if your question has been answered. Click on the dropdown to view all of the documents associated with the product. If you can't find your question, click on Ask a Question

I2C Protocol Sequence

I2C require two bus line – SDA and SCL
Most I2C devices can communicate at 100 kHz or 400 kHz.

Start/Stop Condition:
Start and Stop condition are always generated by the master.
Each I2C command initiated by master device starts with a START condition and ends with a STOP condition. For both conditions SCL has to be high. A high to low transition of SDA is considered as START and a low to high transition as STOP.

Generally our i2c driver perform the following sequence:
    Start condition – write operation (sub-address)-start condition- Read operation (data)-stop condition.
    Need to send STOP bit when the whole process reading is done. To terminate a read/write sequence a stop signal must be sent.

Please make sure with below Read/Write sequences,
a.Write Sequence
 1) Send the start condition
 2) Send the slave address
 3) Check for the acknowledge
 4) Send the sub-address to be written to
 5) Check for the acknowledge from
 6) Send the data to write to specified sub address
 7) Check for the acknowledge
 8) If No-acknowledge send the stop condition
 9) Send a stop condition

b. Read Sequence
1) Send the start condition
2) Send the slave address
3) check for the acknowledge
4) Send the sub-address to be read from
5) check for the acknowledge
6) Send the start condition
7) Send the slave address
8) check for the acknowledge
9) If No-acknowledge send the stop condition
10) If acknowledged read the data from specified sub-address
12) Send a No-Acknowledge
13) Send a stop condition

Here we can find the more details about i2c bus specification and also timing related details I2C Bus Specification and User Manual

https://i2c.info/i2c-bus-specification

Note: Some i2c drivers work with 7 bit addressing, if your software/tool is using 7-bit i2c address, In that case, we need to right shift the 8 bit map address to one.
For example: 0x98 IO Map   –   8 bit address
                 0x98>>1 =0x4C – 7 bit address
Please crosscheck: 0x98 is an 8-bit I2C address. In other words, it assumes the software/tool is using 8-bit I2C addresses.
In-case if your software/tool is using 7-bit I2C addresses (fairly common), you should use 0x4C instead.

NACK(No ACK):  I2C reset is the only write that will no ACK back. The reset bit resets the I2c engine before it has a chance to ACK back.The I2C master controller will receive a no acknowledge condition on the ninth clock cycle when chip Reset is implemented.


Thanks,
Poornima

Comments
Anonymous
Related