I2C EEPROM Blocks¶
Stores Blocks in I2C serial EEPROM attached to TWI.
Code¶
A quick start with the amforth-shell is as follows
(ATmega16)> #include i2c-eeprom-block.frt
.... lots of files included, approx 1,5kB dictionary space
... for testing and inspekting
(ATmega16)> #include list-dump.frt \ from lib/ans94/block
... loading code and dependencies
ok
Configuration¶
The I2C hardware drivers need two initialization steps. The
first is the I2C/TWI hardware init (i2c.init
or simply
i2c.init.default
) and the device init as i2c.ee.blockinit
.
After these two commands, which need to run before use in
e.g. turnkey, the I2C memory modules can be accessed.
> i2c.init.default \ initialize TWI hardware module in slow speed
> 24c64 $50 i2c.ee.blockinit \ set up for block level access
Place these two commands (or similar ones) in the application
turnkey word. The parameters to the i2c.ee.blockinit
are the
page-size (there are some convenient constants, see below) and
the I2C hardware id ($50). All subsequent access to the device
depend on these information. They can be changed any time.
More Information is in the recipe Blocks.
The specs of almost every serial EEPROM mention, that after a write
action, 5 milliseconds have to pass before the next access can be
made. The library takes care of this for every page written. It
splits the the data transfer of the (possibly) larger buffer size
to the actual page size of the controller too. To configure the
page sizes, the command i2c.ee.setpagesize
has to be used. It
takes the page size in bytes as the parameter. To make the source
code more readably, constant names like 24c64
are provided.
Device Type | Size | Page Size |
24c08 | 1KB | 16 |
24c16 | 2KB | 16 |
24c32 | 4KB | 32 |
24c64 | 8KB | 32 |
24c128 | 16KB | 64 |
24c256 | 32KB | 64 |
24c512 | 64KB | 128 |
24c1024 | 128KB | 256 |
The code assumes 2-byte addresses inside the memory and a single I2C hardware address (0x50). Modules which use multiple I2C addresses work within the limits of a single address.