diff options
| author | Nick Brassel <nick@tzarc.org> | 2019-11-06 08:04:50 +1100 |
|---|---|---|
| committer | Nick Brassel <nick@tzarc.org> | 2020-01-24 12:45:58 +1100 |
| commit | d13ada11622977bcc0b530212b4405229805016d (patch) | |
| tree | 3f8874ac3c9b5950b1fed6ac4d0081a268d9f487 /docs/eeprom_driver.md | |
| parent | 6ff093efbee21d3f64f5b4bfdbc66d4648490523 (diff) | |
| download | qmk_firmware-d13ada11622977bcc0b530212b4405229805016d.tar.gz qmk_firmware-d13ada11622977bcc0b530212b4405229805016d.zip | |
Add customisable EEPROM driver selection (#7274)
- uprintf -> dprintf
- Fix atsam "vendor" eeprom.
- Bump Kinetis K20x to 64 bytes, too.
- Rollback Kinetis to 32 bytes as partitioning can only be done once. Add warning about changing the value.
- Change RAM-backed "fake" EEPROM implementations to match eeconfig's current usage.
- Add 24LC128 by request.
Diffstat (limited to 'docs/eeprom_driver.md')
| -rw-r--r-- | docs/eeprom_driver.md | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/docs/eeprom_driver.md b/docs/eeprom_driver.md new file mode 100644 index 000000000..dd12d8ec7 --- /dev/null +++ b/docs/eeprom_driver.md | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | # EEPROM Driver Configuration | ||
| 2 | |||
| 3 | The EEPROM driver can be swapped out depending on the needs of the keyboard, or whether extra hardware is present. | ||
| 4 | |||
| 5 | Driver | Description | ||
| 6 | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
| 7 | `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. | ||
| 8 | `EEPROM_DRIVER = i2c` | Supports writing to I2C-based 24xx EEPROM chips. See the driver section below. | ||
| 9 | `EEPROM_DRIVER = transient` | Fake EEPROM driver -- supports reading/writing to RAM, and will be discarded when power is lost. | ||
| 10 | |||
| 11 | ## Vendor Driver Configuration | ||
| 12 | |||
| 13 | No configurable options are available. | ||
| 14 | |||
| 15 | ## I2C Driver Configuration | ||
| 16 | |||
| 17 | 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: | ||
| 18 | |||
| 19 | `config.h` override | Description | Default Value | ||
| 20 | ------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------ | ||
| 21 | `#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS` | Base I2C address for the EEPROM -- shifted left by 1 as per i2c_master requirements | 0b10100000 | ||
| 22 | `#define EXTERNAL_EEPROM_I2C_ADDRESS(addr)` | Calculated I2C address for the EEPROM | `(EXTERNAL_EEPROM_I2C_BASE_ADDRESS)` | ||
| 23 | `#define EXTERNAL_EEPROM_BYTE_COUNT` | Total size of the EEPROM in bytes | 8192 | ||
| 24 | `#define EXTERNAL_EEPROM_PAGE_SIZE` | Page size of the EEPROM in bytes, as specified in the datasheet | 32 | ||
| 25 | `#define EXTERNAL_EEPROM_ADDRESS_SIZE` | The number of bytes to transmit for the memory location within the EEPROM | 2 | ||
| 26 | `#define EXTERNAL_EEPROM_WRITE_TIME` | Write cycle time of the EEPROM, as specified in the datasheet | 5 | ||
| 27 | |||
| 28 | Default values and extended descriptions can be found in `drivers/eeprom/eeprom_i2c.h`. | ||
| 29 | |||
| 30 | Alternatively, there are pre-defined hardware configurations for available chips/modules: | ||
| 31 | |||
| 32 | Module | Equivalent `#define` | Source | ||
| 33 | -----------------|---------------------------------|------------------------------------------ | ||
| 34 | CAT24C512 EEPROM | `#define EEPROM_I2C_CAT24C512` | <https://www.sparkfun.com/products/14764> | ||
| 35 | RM24C512C EEPROM | `#define EEPROM_I2C_RM24C512C` | <https://www.sparkfun.com/products/14764> | ||
| 36 | 24LC128 EEPROM | `#define EEPROM_I2C_24LC128` | <https://www.microchip.com/wwwproducts/en/24LC128> | ||
| 37 | 24LC256 EEPROM | `#define EEPROM_I2C_24LC256` | <https://www.sparkfun.com/products/525> | ||
| 38 | MB85RC256V FRAM | `#define EEPROM_I2C_MB85RC256V` | <https://www.adafruit.com/product/1895> | ||
| 39 | |||
| 40 | ?> 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`. | ||
| 41 | |||
| 42 | ## Transient Driver configuration | ||
| 43 | |||
| 44 | The only configurable item for the transient EEPROM driver is its size: | ||
| 45 | |||
| 46 | `config.h` override | Description | Default Value | ||
| 47 | ------------------------------- | ----------------------------------------- | ------------- | ||
| 48 | `#define TRANSIENT_EEPROM_SIZE` | Total size of the EEPROM storage in bytes | 64 | ||
| 49 | |||
| 50 | Default values and extended descriptions can be found in `drivers/eeprom/eeprom_transient.h`. | ||
