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.

50 lines
3.9 KiB

  1. # EEPROM Driver Configuration
  2. The EEPROM driver can be swapped out depending on the needs of the keyboard, or whether extra hardware is present.
  3. Driver | Description
  4. --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  5. `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.
  6. `EEPROM_DRIVER = i2c` | Supports writing to I2C-based 24xx EEPROM chips. See the driver section below.
  7. `EEPROM_DRIVER = transient` | Fake EEPROM driver -- supports reading/writing to RAM, and will be discarded when power is lost.
  8. ## Vendor Driver Configuration
  9. No configurable options are available.
  10. ## I2C Driver Configuration
  11. 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:
  12. `config.h` override | Description | Default Value
  13. ------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------
  14. `#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS` | Base I2C address for the EEPROM -- shifted left by 1 as per i2c_master requirements | 0b10100000
  15. `#define EXTERNAL_EEPROM_I2C_ADDRESS(addr)` | Calculated I2C address for the EEPROM | `(EXTERNAL_EEPROM_I2C_BASE_ADDRESS)`
  16. `#define EXTERNAL_EEPROM_BYTE_COUNT` | Total size of the EEPROM in bytes | 8192
  17. `#define EXTERNAL_EEPROM_PAGE_SIZE` | Page size of the EEPROM in bytes, as specified in the datasheet | 32
  18. `#define EXTERNAL_EEPROM_ADDRESS_SIZE` | The number of bytes to transmit for the memory location within the EEPROM | 2
  19. `#define EXTERNAL_EEPROM_WRITE_TIME` | Write cycle time of the EEPROM, as specified in the datasheet | 5
  20. Default values and extended descriptions can be found in `drivers/eeprom/eeprom_i2c.h`.
  21. Alternatively, there are pre-defined hardware configurations for available chips/modules:
  22. Module | Equivalent `#define` | Source
  23. -----------------|---------------------------------|------------------------------------------
  24. CAT24C512 EEPROM | `#define EEPROM_I2C_CAT24C512` | <https://www.sparkfun.com/products/14764>
  25. RM24C512C EEPROM | `#define EEPROM_I2C_RM24C512C` | <https://www.sparkfun.com/products/14764>
  26. 24LC128 EEPROM | `#define EEPROM_I2C_24LC128` | <https://www.microchip.com/wwwproducts/en/24LC128>
  27. 24LC256 EEPROM | `#define EEPROM_I2C_24LC256` | <https://www.sparkfun.com/products/525>
  28. MB85RC256V FRAM | `#define EEPROM_I2C_MB85RC256V` | <https://www.adafruit.com/product/1895>
  29. ?> 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`.
  30. ## Transient Driver configuration
  31. The only configurable item for the transient EEPROM driver is its size:
  32. `config.h` override | Description | Default Value
  33. ------------------------------- | ----------------------------------------- | -------------
  34. `#define TRANSIENT_EEPROM_SIZE` | Total size of the EEPROM storage in bytes | 64
  35. Default values and extended descriptions can be found in `drivers/eeprom/eeprom_transient.h`.