The EEPROM driver can be swapped out depending on the needs of the keyboard, or whether extra hardware is present.
Driver | Description |
---|---|
EEPROM_DRIVER = vendor (default) |
Uses the on-chip driver provided by the chip manufacturer. For AVR, this is provided by avr-libc. This is supported on ARM for a subset of chips -- STM32F3xx, STM32F1xx, and STM32F072xB will be emulated by writing to flash. STM32L0xx and STM32L1xx will use the onboard dedicated true EEPROM. Other chips will generally act as "transient" below. |
EEPROM_DRIVER = i2c |
Supports writing to I2C-based 24xx EEPROM chips. See the driver section below. |
EEPROM_DRIVER = transient |
Fake EEPROM driver -- supports reading/writing to RAM, and will be discarded when power is lost. |
!> Resetting EEPROM using an STM32L0/L1 device takes up to 1 second for every 1kB of internal EEPROM used.
No configurable options are available.
Currently QMK supports 24xx-series chips over I2C. As such, requires a working i2c_master driver configuration. You can override the driver configuration via your config.h:
config.h override |
Description | Default Value |
---|---|---|
#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS |
Base I2C address for the EEPROM -- shifted left by 1 as per i2c_master requirements | 0b10100000 |
#define EXTERNAL_EEPROM_I2C_ADDRESS(addr) |
Calculated I2C address for the EEPROM | (EXTERNAL_EEPROM_I2C_BASE_ADDRESS) |
#define EXTERNAL_EEPROM_BYTE_COUNT |
Total size of the EEPROM in bytes | 8192 |
#define EXTERNAL_EEPROM_PAGE_SIZE |
Page size of the EEPROM in bytes, as specified in the datasheet | 32 |
#define EXTERNAL_EEPROM_ADDRESS_SIZE |
The number of bytes to transmit for the memory location within the EEPROM | 2 |
#define EXTERNAL_EEPROM_WRITE_TIME |
Write cycle time of the EEPROM, as specified in the datasheet | 5 |
Default values and extended descriptions can be found in drivers/eeprom/eeprom_i2c.h
.
Alternatively, there are pre-defined hardware configurations for available chips/modules:
Module | Equivalent #define |
Source |
---|---|---|
CAT24C512 EEPROM | #define EEPROM_I2C_CAT24C512 |
https://www.sparkfun.com/products/14764 |
RM24C512C EEPROM | #define EEPROM_I2C_RM24C512C |
https://www.sparkfun.com/products/14764 |
24LC128 EEPROM | #define EEPROM_I2C_24LC128 |
https://www.microchip.com/wwwproducts/en/24LC128 |
24LC256 EEPROM | #define EEPROM_I2C_24LC256 |
https://www.sparkfun.com/products/525 |
MB85RC256V FRAM | #define EEPROM_I2C_MB85RC256V |
https://www.adafruit.com/product/1895 |
?> If you find that the EEPROM is not cooperating, ensure you've correctly shifted up your EEPROM address by 1. For example, the datasheet might state the address as 0b01010000
-- the correct value of EXTERNAL_EEPROM_I2C_BASE_ADDRESS
needs to be 0b10100000
.
The only configurable item for the transient EEPROM driver is its size:
config.h override |
Description | Default Value |
---|---|---|
#define TRANSIENT_EEPROM_SIZE |
Total size of the EEPROM storage in bytes | 64 |
Default values and extended descriptions can be found in drivers/eeprom/eeprom_transient.h
.