I2C EEPROMs are attached to the I2C bus (TWI). They provide usually a few KB of storage which can be re-programmed quite often (millions of write cycles). Some chips can be reprogrammed withouts limits (FRAM’s).
Every I2C module has one (or more) hardware identifier(s). This address
is needed to select one chip of possibly many on the bus.The
default for EEPROMs is $50. If a chip is selected, the actual memory
address and the data are transferred. The current I2C library works
with chips that use a 2 byte address. Consult the datasheet, if in
doubt. EEPROMs with only one I2C address (
i2c.detect) and at
least 8 Kbit (1 KByte) should work.
Special care must be taken when data is written across the EEPROM internal page boundaries. Most EEPROM will wrap around the read and write operation to the beginning of the current EEPROM page. For this library only the block access words know about eeprom pages.
The source code for the EEPROM is in the file
It depends on
lib/hardware/i2c.frt. It is recommended to use the
amforth-shell to upload the file since it automatically resolves all dependencies.
(ATmega16)> #include i2c-eeprom.frt .... lots of files included ok (ATmega16)>
Using the eeprom requires the setup of the TWI module of the controller.
(ATmega16)> i2c.init.default \ initialize TWI hardware module in slow speed ok (ATmega16)>
There are words for 1 byte data and cell sized (2 bytes) data. They need two address information: the hardware id (usually $50) and the address within the selected device.
firstname.lastname@example.org( addr hwid - c )
- Fetch a byte from addr using the I2C module identified with hwid
c!i2c.ee( c addr hwid – )
- Store a byte at addr using the I2C module identified with hwid
@i2c.ee( addr hwid - n )
- fetch a cell from addr using the I2C module identified with hwid
!i2c.ee( n addr hwid – )
- Store a cell at addr using the I2C module identified with hwid
Note that the write operations do not wait. Most (but not all) I2C memory modules require a 5 millisecond delay after a write before the next access can be made.