====== EEPROM ====== EEPROMs are a form of Memory Technology Device (MTD). EEPROMs are non-volatile memory like FLASH, but differ in underlying memory technology and differ in usage in many respects: They may not be organized into blocks (at least from the standpoint of the user) and it is not necessary to erase the EEPROM memory before re-writing it. In addition, EEPROMs tend to be much smaller than FLASH parts, usually only a few kilobytes vs megabytes for FLASH. EEPROM tends to be used to retain a small amount of device configuration information; FLASH tends to be used for program or massive data storage. For these reasons, it may not be convenient to use the more complex MTD interface but instead use the simple character interface provided by the EEPROM drivers. EEPROM Device Support ===================== drivers/eeprom/spi_xx25xx.c --------------------------- This is a driver for SPI EEPROMs that use the same commands as the 25AA160:: Manufacturer Device Bytes PgSize AddrLen Microchip 25xx010A 128 16 1 25xx020A 256 16 1 25AA02UID 256 16 1 25AA02E48 256 16 1 25AA02E64 256 16 1 25xx040 512 16 1+bit 25xx040A 512 16 1+bit 25xx080 1024 16 1 25xx080A 1024 16 2 25xx080B 1024 32 2 25xx080C 1024 16 x 25xx080D 1024 32 x 25xx160 2048 16 2 25xx160A/C 2048 16 2 TESTED 25xx160B/D 2048 32 2 25xx160C 2048 16 2 25xx160D 2048 32 2 25xx320 4096 32 2 25xx320A 4096 32 2 25xx640 8192 32 2 25xx640A 8192 32 2 25xx128 16384 64 2 25xx256 32768 64 2 25xx512 65536 128 2 25xx1024 131072 256 3 Atmel AT25010B 128 8 1 AT25020B 256 8 1 AT25040B 512 8 1+bit AT25080B 1024 32 2 AT25160B 2048 32 2 AT25320B 4096 32 2 AT25640B 8192 32 2 AT25128B 16384 64 2 AT25256B 32768 64 2 AT25512 65536 128 2 AT25M01 131072 256 3 drivers/mtd/at24xx.c -------------------- This is a driver for I2C-based at24cxx EEPROM (at24c32, at24c64, at24c128, at24c256, at24c512). This driver is currently provided as an MTD driver but could easily be modified to support the character driver interface. File Systems ============ Most EEPROM parts are too small to be candidates for use with a file system. The character driver interface is optimal for these small parts because you can open and access the EEPROM part as if it were a single, fixed size file. It is also possible to use these character drivers with a file system. The character driver can converted to a block device using the NuttX loop device. The loop device can be found the file drivers/loop.c. Interface function prototypes can be found in include/nuttx/fs/fs.h:: int losetup(FAR const char *devname, FAR const char *filename, uint16_t sectsize, off_t offset, bool readonly); Given a file or character devices at 'filename', losetup will create the block device 'devname' using a bogus sector size of sectsize. 'offset' is normally zero but can be used to provide an offset into the EEPROM where the block driver data starts; The EEPROM block driver can also be read- only. There is a corresponding function that will destroy the loop device:: int loteardown(FAR const char *devname);