This page provides the description of the I2C protocol and his implementation in Boardcore.
# I2C protocol
Inter-Integrated Circuit (IIC or, better, I2C) is a serial bus protocol. This is used by some sensors and has the advantage to need only two wires for all the peripherals that want to communicate on the same physical bus, called SCL (serial clock line) and SDA (serial data line). However this protocol have also some disadvantages as we will see. One of them is the low speed of the protocol, reaching 100 kHz of clock signal for the standard mode (Sm) and 400 kHz for the fast mode (Fm). Other disadvantages are that the protocol is a master/slave half duplex, meaning that the communication is always initiated by a device (master) that manages the communication generating the clock signal; the slave can only send data after a communication is intiated with him and only when the master communicates to that slave that he wants to read data from him.
**_Deadlocks are a feature, not a bug!_**
# _Deadlocks are a feature, not a bug!_
Kidding, they are not. Unluckly the I2C bus can get in a locked state in particular conditions. These cases, their origin and the solutions provided in the driver will be explained in the following paragraphs.