summaryrefslogtreecommitdiffstats
path: root/tmk_core/common/chibios/eeprom_stm32.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/common/chibios/eeprom_stm32.h')
-rwxr-xr-xtmk_core/common/chibios/eeprom_stm32.h68
1 files changed, 27 insertions, 41 deletions
diff --git a/tmk_core/common/chibios/eeprom_stm32.h b/tmk_core/common/chibios/eeprom_stm32.h
index 09229530c..892e417b7 100755
--- a/tmk_core/common/chibios/eeprom_stm32.h
+++ b/tmk_core/common/chibios/eeprom_stm32.h
@@ -10,15 +10,17 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
- * This files are free to use from https://github.com/rogerclarkmelbourne/Arduino_STM32 and
- * https://github.com/leaflabs/libmaple
+ * This files are free to use from http://engsta.com/stm32-flash-memory-eeprom-emulator/ by
+ * Artur F.
*
* Modifications for QMK and STM32F303 by Yiancar
+ *
+ * This library assumes 8-bit data locations. To add a new MCU, please provide the flash
+ * page size and the total flash size in Kb. The number of available pages must be a multiple
+ * of 2. Only half of the pages account for the total EEPROM size.
+ * This library also assumes that the pages are not used by the firmware.
*/
-// This file must be modified if the MCU is not defined below.
-// This library also assumes that the pages are not used by the firmware.
-
#ifndef __EEPROM_H
#define __EEPROM_H
@@ -38,9 +40,11 @@
#ifndef EEPROM_PAGE_SIZE
#if defined (MCU_STM32F103RB)
- #define EEPROM_PAGE_SIZE (uint16_t)0x400 /* Page size = 1KByte */
+ #define FEE_PAGE_SIZE (uint16_t)0x400 // Page size = 1KByte
+ #define FEE_DENSITY_PAGES 2 // How many pages are used
#elif defined (MCU_STM32F103ZE) || defined (MCU_STM32F103RE) || defined (MCU_STM32F103RD) || defined (MCU_STM32F303CC)
- #define EEPROM_PAGE_SIZE (uint16_t)0x800 /* Page size = 2KByte */
+ #define FEE_PAGE_SIZE (uint16_t)0x800 // Page size = 2KByte
+ #define FEE_DENSITY_PAGES 4 // How many pages are used
#else
#error "No MCU type specified. Add something like -DMCU_STM32F103RB to your compiler arguments (probably in a Makefile)."
#endif
@@ -48,48 +52,30 @@
#ifndef EEPROM_START_ADDRESS
#if defined (MCU_STM32F103RB)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 128 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 128 // Size in Kb
#elif defined (MCU_STM32F103ZE) || defined (MCU_STM32F103RE)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 512 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 512 // Size in Kb
#elif defined (MCU_STM32F103RD)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 384 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 384 // Size in Kb
#elif defined (MCU_STM32F303CC)
- #define EEPROM_START_ADDRESS ((uint32_t)(0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE))
+ #define FEE_MCU_FLASH_SIZE 256 // Size in Kb
#else
#error "No MCU type specified. Add something like -DMCU_STM32F103RB to your compiler arguments (probably in a Makefile)."
#endif
#endif
-/* Pages 0 and 1 base and end addresses */
-#define EEPROM_PAGE0_BASE ((uint32_t)(EEPROM_START_ADDRESS + 0x000))
-#define EEPROM_PAGE1_BASE ((uint32_t)(EEPROM_START_ADDRESS + EEPROM_PAGE_SIZE))
-
-/* Page status definitions */
-#define EEPROM_ERASED ((uint16_t)0xFFFF) /* PAGE is empty */
-#define EEPROM_RECEIVE_DATA ((uint16_t)0xEEEE) /* PAGE is marked to receive data */
-#define EEPROM_VALID_PAGE ((uint16_t)0x0000) /* PAGE containing valid data */
-
-/* Page full define */
-enum uint16_t
- {
- EEPROM_OK = ((uint16_t)0x0000),
- EEPROM_OUT_SIZE = ((uint16_t)0x0081),
- EEPROM_BAD_ADDRESS = ((uint16_t)0x0082),
- EEPROM_BAD_FLASH = ((uint16_t)0x0083),
- EEPROM_NOT_INIT = ((uint16_t)0x0084),
- EEPROM_SAME_VALUE = ((uint16_t)0x0085),
- EEPROM_NO_VALID_PAGE = ((uint16_t)0x00AB)
- };
-
-#define EEPROM_DEFAULT_DATA 0xFFFF
+// DONT CHANGE
+// Choose location for the first EEPROM Page address on the top of flash
+#define FEE_PAGE_BASE_ADDRESS ((uint32_t)(0x8000000 + FEE_MCU_FLASH_SIZE * 1024 - FEE_DENSITY_PAGES * FEE_PAGE_SIZE))
+#define FEE_DENSITY_BYTES ((FEE_PAGE_SIZE / 2) * FEE_DENSITY_PAGES - 1)
+#define FEE_LAST_PAGE_ADDRESS (FEE_PAGE_BASE_ADDRESS + (FEE_PAGE_SIZE * FEE_DENSITY_PAGES))
+#define FEE_EMPTY_WORD ((uint16_t)0xFFFF)
+#define FEE_ADDR_OFFSET(Address)(Address * 2) // 1Byte per Word will be saved to preserve Flash
- uint16_t EEPROM_init(void);
- uint16_t EEPROM_format(void);
- uint16_t EEPROM_erases(uint16_t *);
- uint16_t EEPROM_read (uint16_t address, uint16_t *data);
- uint16_t EEPROM_write(uint16_t address, uint16_t data);
- uint16_t EEPROM_update(uint16_t address, uint16_t data);
- uint16_t EEPROM_count(uint16_t *);
- uint16_t EEPROM_maxcount(void);
+// Use this function to initialize the functionality
+uint16_t EEPROM_Init(void);
+void EEPROM_Erase (void);
+uint16_t EEPROM_WriteDataByte (uint16_t Address, uint8_t DataByte);
+uint8_t EEPROM_ReadDataByte (uint16_t Address);
#endif /* __EEPROM_H */