Part I: Low-level protocols and hardware
A software implementation of the I2C bus
Tools for analyzing and debugging I2C transmissions
Part II: Hardware implementations
I2C on common single-board computers
Part III: Programming the I2C bus
Raspberry Pi (and Linux) I2C programming
I2C programming in real-time operating systems
Bare-metal I2C controller programming
Part IV: I2C peripheral programming examples
TCA9548A I2C bus expander
The MCP23017 and MCP23008 GPIO expanders
The ADS1015 and ADS1115 analog-to-digital converters
The MCP4725 digital-to-analog converter
Bare-metal peripheral programming
Appendix A: The Adafruit I2C address compilation
Appendix B: Online chapters.