manitou tried to post this earlier but there seems to be some problems with bbpress?
Here is a quick compare of bit-banging I2C with Wire lib versus the hardware I2C of i2c.h on the maple (IDE v0.0.12) accessing the I2C 24LC128 EEPROM. The Wire sketches are based on an Arduino sketch. The EEPROM supports page writes and auto-increment read's.
software I2C
Bytes write read (microseconds)
10 3655 3826
20 6408 6069
30 9164 8315
hardware I2c 100KHz 400KHz
Bytes write read write read (microseconds)
10 1193 1306 308 336
20 2095 2202 535 561
30 2997 3100 761 791
64 6063 6262 1568 1551
arduino uno
Bytes write read (microseconds)
10 1340 1616
20 2340 2640
30 3360 3644
Here are the simple sketches used in tests. They use different pins for SDA/SCL.
soft I2C http://pastebin.com/snBnZwyX
hardware I2C http://pastebin.com/T7Kv91r1
Note the EEPROM write requires at least a 5ms delay to allow the write to complete. When I tried to read the EEPROM without this delay, I got I2C protocol errors. This thread was helpful in understanding maple I2C errors:
http://forums.leaflabs.com/topic.php?id=28
I may try maple DMA for I2C, though performance is already at KHz rate.
------ Reference -----
Arduino sketch
http://arduino.cc/playground/Code/I2CEEPROM
24LC128 datasheet
http://ww1.microchip.com/downloads/en/devicedoc/21191m.pdf