The library can be downloaded from Github: https://github.com/felias-fogg/SoftI2CMaster.
The standard I2C library for the Arduino is the Wire library. While this library is sufficient most of the time, there are situations when it cannot be used:
I adapted Peter Fleury's I2C software library that is written in AVR assembler, extremely light weight and very fast. Even on an ATtiny running with 1MHz, the bus operates with 33 kHz, which implies that you can drive slave devices that use the SMBus protocol (which timeout if the the bus frequency is below 10 kHz). If you want a solution running on an ARM MCU, use the pure C++ library SlowSoftI2CMaster.
Just download the Zip-File from github, uncompress, rename the directory to SoftI2CMaster and move it into the libraries folder. In case you have not installed a library before, consult the the respective help page. The documentation can be found on Github as well.
Meanwhile, I have written a wrapper around SoftI2CMaster that emulates the Wire library (master mode only). It is another C++-header file called SoftWire.h
which you need to include instead of SoftI2CMaster.h
. Directly after this include statement you need to create a Wire
instance.
This interface sacrifices some of the advantages of the original library, in particular its small footprint, but comes handy if you need a replacement of the original Wire library. The following table lists the memory requirements.
Wire | SoftI2CMaster | SoftWire | |
---|---|---|---|
Flash memory | 1956 | 252 | 712 |
RAM | 208 | 0 | 64 |