About
This topic covers how to connect I2C device to Carambola. For this tutorial I will use PCF8575 16 bit I/O expander.
Schematics
In order to connect I2C device I will need few passive components. See attached schematics.
There is also power selection jumper (5V or 3.3V) and SPI pin header. Discard these for this subject.
Preparing Carambola
- run
make menuconfig
and select these packages:
Kernel modules I2C support kmod-i2c-gpio Utilities i2c-tools package
- Type
make
and rebuild firmware
- Reflash
- If you are unfamiliar with these steps read Where to start
Testing
Connect to Carambola with fresh firmware and type i2cdetect -y 0
. You should see something like:
root@OpenWrt:/# i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Read data
root@OpenWrt:/# i2cget -y 0 0x20 0x00 w 0xffff
Write data
root@OpenWrt:/# i2cset -y 0 0x20 0x00 0xff
Issues
These utilities were written to work with I2C memory devices and lack of full I2C support. Biggest issue - it is possible only communicate with devices that have 2 bytes in I2C protocol. Although I2C on hardware level supports up to 7 (I am not exactly sure right now) bytes for both directions.