From 2055be0689d3a6560bf2071ac332be73fb7385f1 Mon Sep 17 00:00:00 2001
From: Khoi Hoang <57012152+khoih-prog@users.noreply.github.com>
Date: Tue, 25 Jan 2022 20:30:29 -0500
Subject: [PATCH] Delete stm32_eeprom.hpp
---
src/utility/stm32_eeprom.hpp | 361 -----------------------------------
1 file changed, 361 deletions(-)
delete mode 100644 src/utility/stm32_eeprom.hpp
diff --git a/src/utility/stm32_eeprom.hpp b/src/utility/stm32_eeprom.hpp
deleted file mode 100644
index 62843eb..0000000
--- a/src/utility/stm32_eeprom.hpp
+++ /dev/null
@@ -1,361 +0,0 @@
-/******************************************************************************************************************************************
- stm32_eeprom.hpp
- For STM32 using Flash emulated-EEPROM
-
- The FlashStorage_STM32 library aims to provide a convenient way to store and retrieve user's data using the non-volatile flash memory
- of STM32F/L/H/G/WB/MP1. It's using the buffered read and write to minimize the access to Flash.
- It now supports writing and reading the whole object, not just byte-and-byte.
-
- Inspired by Cristian Maglie's FlashStorage (https://github.com/cmaglie/FlashStorage)
-
- Built by Khoi Hoang https://github.com/khoih-prog/FlashStorage_STM32
- Licensed under MIT license
- Version: 1.1.0
-
- Version Modified By Date Comments
- ------- ----------- ---------- -----------
- 1.0.0 K Hoang 26/01/2021 Initial coding to support STM32F/L/H/G/WB/MP1 using emulated-EEPROM
- 1.0.1 K Hoang 23/02/2021 Fix compiler warnings.
- 1.1.0 K Hoang 26/04/2021 Add support to new STM32 core v2.0.0 and new STM32L5 boards.
- ******************************************************************************************************************************************/
-/**
- ******************************************************************************
- * @file stm32_eeprom.c
- * @brief Provides emulated eeprom from flash
- ******************************************************************************
- * @attention
- *
- *
© COPYRIGHT(c) 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-//#include "stm32_eeprom.h"
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Be able to change FLASH_BANK_NUMBER to use if relevant */
-#if !defined(FLASH_BANK_NUMBER) &&\
- (defined(STM32F0xx) || defined(STM32F1xx) || defined(STM32G4xx) ||\
- defined(STM32H7xx) || defined(STM32L4xx) || defined(STM32L5xx))
-/* For STM32F0xx, FLASH_BANK_1 is not defined only FLASH_BANK1_END is defined */
-#if defined(STM32F0xx)
-#define FLASH_BANK_1 1U
-#endif
-#if defined(FLASH_BANK_2)
-#define FLASH_BANK_NUMBER FLASH_BANK_2
-#else
-#define FLASH_BANK_NUMBER FLASH_BANK_1
-#endif /* FLASH_BANK_2 */
-#ifndef FLASH_BANK_NUMBER
-#error "FLASH_BANK_NUMBER could not be defined"
-#endif
-#endif /* !FLASH_BANK_NUMBER */
-
-/* Be able to change FLASH_DATA_SECTOR to use if relevant */
-#if defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F7xx) ||\
- defined(STM32H7xx)
-#if !defined(FLASH_DATA_SECTOR)
-#define FLASH_DATA_SECTOR ((uint32_t)(FLASH_SECTOR_TOTAL - 1))
-#else
-#ifndef FLASH_BASE_ADDRESS
-#error "FLASH_BASE_ADDRESS have to be defined when FLASH_DATA_SECTOR is defined"
-#endif
-#endif /* !FLASH_DATA_SECTOR */
-#endif /* STM32F2xx || STM32F4xx || STM32F7xx */
-
-/* Be able to change FLASH_PAGE_NUMBER to use if relevant */
-#if !defined(FLASH_PAGE_NUMBER) &&\
- (defined (STM32G0xx) || defined(STM32G4xx) || defined (STM32L4xx) ||\
- defined (STM32L5xx) || defined(STM32WBxx))
-#define FLASH_PAGE_NUMBER ((uint32_t)((FLASH_SIZE / FLASH_PAGE_SIZE) - 1))
-#endif /* !FLASH_PAGE_NUMBER */
-
-/* Be able to change FLASH_END to use */
-#if !defined(FLASH_END)
-#if defined (STM32F0xx) || defined (STM32F1xx)
-#if defined (FLASH_BANK2_END) && (FLASH_BANK_NUMBER == FLASH_BANK_2)
-#define FLASH_END FLASH_BANK2_END
-#elif defined (FLASH_BANK1_END) && (FLASH_BANK_NUMBER == FLASH_BANK_1)
-#define FLASH_END FLASH_BANK1_END
-#endif
-#elif defined (STM32F3xx)
-static inline uint32_t get_flash_end(void)
-{
- uint32_t size;
- switch ((*((uint16_t *)FLASH_SIZE_DATA_REGISTER))) {
- case 0x200U:
- size = 0x0807FFFFU;
- break;
- case 0x100U:
- size = 0x0803FFFFU;
- break;
- case 0x80U:
- size = 0x0801FFFFU;
- break;
- case 0x40U:
- size = 0x0800FFFFU;
- break;
- case 0x20U:
- size = 0x08007FFFU;
- break;
- default:
- size = 0x08003FFFU;
- break;
- }
- return size;
-}
-#define FLASH_END get_flash_end()
-#elif defined(STM32G0xx) || defined(STM32G4xx) || defined (STM32L4xx) || \
- defined (STM32L5xx) || defined(STM32WBxx)
-/* If FLASH_PAGE_NUMBER is defined by user, this is not really end of the flash */
-#define FLASH_END ((uint32_t)(FLASH_BASE + (((FLASH_PAGE_NUMBER +1) * FLASH_PAGE_SIZE))-1))
-#elif defined(EEPROM_RETRAM_MODE)
-#define FLASH_END ((uint32_t)(EEPROM_RETRAM_START_ADDRESS + EEPROM_RETRAM_MODE_SIZE -1))
-#elif defined(DATA_EEPROM_END)
-#define FLASH_END DATA_EEPROM_END
-#endif
-#ifndef FLASH_END
-#error "FLASH_END could not be defined"
-#endif
-#endif /* FLASH_END */
-
-/* Be able to change FLASH_BASE_ADDRESS to use */
-#ifndef FLASH_BASE_ADDRESS
-/*
- * By default, Use the last page of the flash to store data
- * in order to prevent overwritting
- * program data
- */
-#if defined(EEPROM_RETRAM_MODE)
-#define FLASH_BASE_ADDRESS EEPROM_RETRAM_START_ADDRESS
-#else
-#define FLASH_BASE_ADDRESS ((uint32_t)((FLASH_END + 1) - FLASH_PAGE_SIZE))
-#endif
-#ifndef FLASH_BASE_ADDRESS
-#error "FLASH_BASE_ADDRESS could not be defined"
-#endif
-#endif /* FLASH_BASE_ADDRESS */
-
-#if !defined(DATA_EEPROM_BASE)
-static uint8_t eeprom_buffer[E2END + 1] __attribute__((aligned(8))) = {0};
-#endif
-
-/**
- * @brief Function reads a byte from emulated eeprom (flash)
- * @param pos : address to read
- * @retval byte : data read from eeprom
- */
-uint8_t eeprom_read_byte(const uint32_t pos)
-{
-#if defined(DATA_EEPROM_BASE)
- __IO uint8_t data = 0;
- if (pos <= (DATA_EEPROM_END - DATA_EEPROM_BASE)) {
- /* with actual EEPROM, pos is a relative address */
- data = *(__IO uint8_t *)(DATA_EEPROM_BASE + pos);
- }
- return (uint8_t)data;
-#else
- eeprom_buffer_fill();
- return eeprom_buffered_read_byte(pos);
-#endif /* _EEPROM_BASE */
-}
-
-/**
- * @brief Function writes a byte to emulated eeprom (flash)
- * @param pos : address to write
- * @param value : value to write
- * @retval none
- */
-void eeprom_write_byte(uint32_t pos, uint8_t value)
-{
-#if defined(DATA_EEPROM_BASE)
- /* with actual EEPROM, pos is a relative address */
- if (pos <= (DATA_EEPROM_END - DATA_EEPROM_BASE)) {
- if (HAL_FLASHEx_DATAEEPROM_Unlock() == HAL_OK) {
- HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE, (pos + DATA_EEPROM_BASE), (uint32_t)value);
- HAL_FLASHEx_DATAEEPROM_Lock();
- }
- }
-#else
- eeprom_buffered_write_byte(pos, value);
- eeprom_buffer_flush();
-#endif /* _EEPROM_BASE */
-}
-
-#if !defined(DATA_EEPROM_BASE)
-
-/**
- * @brief Function reads a byte from the eeprom buffer
- * @param pos : address to read
- * @retval byte : data read from eeprom
- */
-uint8_t eeprom_buffered_read_byte(const uint32_t pos)
-{
- return eeprom_buffer[pos];
-}
-
-/**
- * @brief Function writes a byte to the eeprom buffer
- * @param pos : address to write
- * @param value : value to write
- * @retval none
- */
-void eeprom_buffered_write_byte(uint32_t pos, uint8_t value)
-{
- eeprom_buffer[pos] = value;
-}
-
-/**
- * @brief This function copies the data from flash into the buffer
- * @param none
- * @retval none
- */
-void eeprom_buffer_fill(void)
-{
- memcpy(eeprom_buffer, (uint8_t *)(FLASH_BASE_ADDRESS), E2END + 1);
-}
-
-#if defined(EEPROM_RETRAM_MODE)
-
-/**
- * @brief This function writes the buffer content into the flash
- * @param none
- * @retval none
- */
-void eeprom_buffer_flush(void)
-{
- memcpy((uint8_t *)(FLASH_BASE_ADDRESS), eeprom_buffer, E2END + 1);
-}
-
-#else /* defined(EEPROM_RETRAM_MODE) */
-
-/**
- * @brief This function writes the buffer content into the flash
- * @param none
- * @retval none
- */
-void eeprom_buffer_flush(void)
-{
- FLASH_EraseInitTypeDef EraseInitStruct;
- uint32_t offset = 0;
- uint32_t address = FLASH_BASE_ADDRESS;
- uint32_t address_end = FLASH_BASE_ADDRESS + E2END;
-#if defined (STM32F0xx) || defined (STM32F1xx) || defined (STM32F3xx) || \
- defined (STM32G0xx) || defined (STM32G4xx) || \
- defined (STM32L4xx) || defined (STM32L5xx) || defined (STM32WBxx)
- uint32_t pageError = 0;
- uint64_t data = 0;
-
- /* ERASING page */
- EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
-#if defined (STM32F1xx) || defined (STM32G4xx) || defined (STM32L4xx) || \
- defined (STM32L5xx)
- EraseInitStruct.Banks = FLASH_BANK_NUMBER;
-#endif
-#if defined (STM32G0xx) || defined (STM32G4xx) || defined (STM32L4xx) || \
- defined (STM32L5xx) || defined (STM32WBxx)
- EraseInitStruct.Page = FLASH_PAGE_NUMBER;
-#else
- EraseInitStruct.PageAddress = FLASH_BASE_ADDRESS;
-#endif
- EraseInitStruct.NbPages = 1;
-
- if (HAL_FLASH_Unlock() == HAL_OK) {
-#if defined (STM32G0xx) || defined (STM32G4xx) || defined (STM32L4xx) || \
- defined (STM32L5xx) || defined (STM32WBxx)
- __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
-#else
- __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR);
-#endif
- if (HAL_FLASHEx_Erase(&EraseInitStruct, &pageError) == HAL_OK) {
- while (address <= address_end) {
-
- data = *((uint64_t *)((uint8_t *)eeprom_buffer + offset));
-
- if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address, data) == HAL_OK) {
- address += 8;
- offset += 8;
- } else {
- address = address_end + 1;
- }
- }
- }
- HAL_FLASH_Lock();
- }
-#else
- uint32_t SectorError = 0;
-#if defined(STM32H7xx)
- uint64_t data[4] = {0x0000};
-#else
- uint32_t data = 0;
-#endif
-
- /* ERASING page */
- EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
-#if defined(STM32H7xx)
- EraseInitStruct.Banks = FLASH_BANK_NUMBER;
-#endif
- EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
- EraseInitStruct.Sector = FLASH_DATA_SECTOR;
- EraseInitStruct.NbSectors = 1;
-
- HAL_FLASH_Unlock();
-
- if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) == HAL_OK) {
- while (address <= address_end) {
-#if defined(STM32H7xx)
- /* 256 bits */
- memcpy(&data, eeprom_buffer + offset, 8 * sizeof(uint32_t));
- if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, address, (uint32_t)data) == HAL_OK) {
- address += 32;
- offset += 32;
-#else
- memcpy(&data, eeprom_buffer + offset, sizeof(uint32_t));
- if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data) == HAL_OK) {
- address += 4;
- offset += 4;
-#endif
- } else {
- address = address_end + 1;
- }
- }
- }
- HAL_FLASH_Lock();
-#endif
-}
-
-#endif /* defined(EEPROM_RETRAM_MODE) */
-
-#endif /* ! DATA_EEPROM_BASE */
-
-#ifdef __cplusplus
-}
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/