Большой апгрейд:

- исправлены баги библиотеки memspi
- добавлены модули для сохранения настреок в eeprom и flash (с равномерным износом)
- надо тестить, проверять и рефакторить
This commit is contained in:
2026-02-17 18:34:50 +03:00
parent e9d2214953
commit 643391038e
8 changed files with 2534 additions and 193 deletions

View File

@@ -26,30 +26,61 @@
#include "memspi_config.h"
#ifndef local_time
#define local_time() HAL_GetTick() ///< Локальное время
#endif
/** @defgroup MEMSPI_Commands Memory SPI Commands
* @brief Определения команд SPI-памяти
* @{
*/
#define MEMSPI_READ_JEDEC_ID 0x9F ///< Команда чтения JEDEC ID
#define MEMSPI_READ_UNIQUE_ID 0x4B ///< Команда чтения уникального идентификатора
#ifdef RUFLASH
#define MEMSPI_READ_DATA (0x03)
#define MEMSPI_ERASE_SECTOR (0xD8)
#define MEMSPI_ERASE_CHIP (0x60)
#define MEMSPI_WRITE_ENABLE (0x06)
#define MEMSPI_WRITE_DISABLE (0x04)
#define MEMSPI_PAGE_PROGRAM (0x02)
#define MEMSPI_BYTE_PROGRAM (0x02)
#define MEMSPI_WRITE_EEPROM (MEMSPI_PAGE_PROGRAM)
#define MEMSPI_PROTECT_SECTOR (0x36)
#define MEMSPI_UNPROTECT_SECTOR (0x39)
#define MEMSPI_READ_PROTECT_REG (0x3C)
#define MEMSPI_READ_STATUS_REG (0x05)
#if defined(SEPARATED_STATUS_REGISTER)
#define MEMSPI_READ_STATUS_REG_2 (0x35)
#endif
#define MEMSPI_WRITE_STATUS_REG (0x01)
#define MEMSPI_READ_JEDEC_ID (0x9F)
#define MEMSPI_READ_UNIQUE_ID (0x4B)
#else
#define MEMSPI_READ_DATA 0x03 ///< Чтение данных из памяти
#define MEMSPI_ERASE_SECTOR 0x20 ///< Стирание одного сектора
#define MEMSPI_WRITE_ENABLE 0x06 ///< Разрешение записи
#define MEMSPI_WRITE_DISABLE 0x04 ///< Запрещение записи
#define MEMSPI_WRITE_STATUS_REG 0x01 ///< Запись в регистр состояния
#define MEMSPI_ERASE_SECTOR 0x20 ///< Стирание одного сектора
#define MEMSPI_PAGE_PROGRAM 0x02 ///< Программирование одной страницы
#define MEMSPI_WRITE_EEPROM MEMSPI_PAGE_PROGRAM ///< Псевдоним для программирования EEPROM
#define MEMSPI_READ_STATUS_REG 0x05 ///< Чтение регистра состояния
#define MEMSPI_READ_STATUS_REG 0x05 ///< Чтение регистра состояния
#if defined(MEMSPI_SEPARATED_STATUS_REGISTER)
#define MEMSPI_READ_STATUS_REG_2 0x35 ///< Чтение второго регистра состояния (если поддерживается)
#endif
#define MEMSPI_WRITE_STATUS_REG 0x01 ///< Запись в регистр состояния
#define MEMSPI_READ_DATA 0x03 ///< Чтение данных из памяти
#define MEMSPI_READ_JEDEC_ID 0x9F ///< Команда чтения JEDEC ID
#define MEMSPI_READ_UNIQUE_ID 0x4B ///< Команда чтения уникального идентификатора
#endif
/** //MEMSPI_Commands
* @}
*/
@@ -82,6 +113,8 @@
#define MEMSPI_SR_SRWD MEMSPI_SR_SRP0 ///< Status Register Write Disable (аналог SRP0)
#define MEMSPI_SR_WIP MEMSPI_SR_WEL ///< Write-In-Progress (используется в некоторых EEPROM)
// Exclusive (by name) RUFLASH SR bits
#define MEMSPI_SR_EPE (1<<5) ///< Ошибка/стирания записи
/**
* @}
*/
@@ -144,8 +177,16 @@ HAL_StatusTypeDef MEMSPI_CMD_Read_Data(MEMSPI_HandleTypeDef *hmemspi, uint32_t F
HAL_StatusTypeDef MEMSPI_CMD_EEPROM_Write(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout);
/* Send command to page program in FLASH */
HAL_StatusTypeDef MEMSPI_CMD_FLASH_Page_Program(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout);
/* Send command to byte program in FLASH */
HAL_StatusTypeDef MEMSPI_CMD_FLASH_Byte_Program(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t Byte, uint32_t Timeout);
/* Send command to erase sector of FLASH */
HAL_StatusTypeDef MEMSPI_CMD_FLASH_Erase_Sector(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint32_t Timeout);
/* Send command to Unprotect Sector */
HAL_StatusTypeDef MEMSPI_CMD_Unprotect_Sector(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint32_t Timeout);
/* Send command to Protect sector */
HAL_StatusTypeDef MEMSPI_CMD_Protect_Sector(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint32_t Timeout);
/* Send command to read Sector Protection Register */
HAL_StatusTypeDef MEMSPI_CMD_Read_Sector_Protection(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pStatus, uint32_t Timeout);
/* Send command to read JEDEC ID */
uint32_t MEMSPI_CMD_Read_JEDEC_ID(MEMSPI_HandleTypeDef *hmemspi, uint32_t Timeout);
/* Send command to read JEDEC ID */
@@ -158,6 +199,17 @@ HAL_StatusTypeDef MEMSPI_CMD_Fast_Read(MEMSPI_HandleTypeDef *hmemspi, uint32_t F
* @}
*/
#ifndef local_time
#define local_time() HAL_GetTick() ///< Локальное время
#endif
#ifndef printf_memspi
#define printf_memspi(...)
#endif
#ifndef printf_memspi_err
#define printf_memspi_err(...)
#endif
#endif // __SPI_MEMORY_CORE_H_
/** //MEMSPI_CORE