You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

3.9 KiB

EEPROM Driver Configuration

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 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. 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.

Vendor Driver Configuration

No configurable options are available.

I2C Driver Configuration

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.

Transient Driver configuration

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.