49 lines
1.5 KiB
C
49 lines
1.5 KiB
C
#ifndef EEPROM_EMUL_H
|
||
#define EEPROM_EMUL_H
|
||
|
||
#include "stm32f1xx_hal.h"
|
||
|
||
// Адреса для эмуляции EEPROM (последние страницы Flash)
|
||
#define EEPROM_START_ADDRESS 0x0800F000 // Последний килобайт Flash
|
||
#define EEPROM_PAGE_SIZE 1024 // Размер страницы STM32F103
|
||
#define EEPROM_SIZE 1024 // Общий размер EEPROM
|
||
|
||
// Максимальное количество переменных
|
||
#define EEPROM_MAX_VARIABLES 64
|
||
|
||
// Статусы операций
|
||
typedef enum {
|
||
EEPROM_OK = 0,
|
||
EEPROM_ERROR = 1,
|
||
EEPROM_INVALID = 2,
|
||
EEPROM_FULL = 3
|
||
} EEPROM_Status;
|
||
|
||
// Структура элемента данных
|
||
#pragma pack(push, 1)
|
||
typedef struct {
|
||
uint16_t address; // Адрес переменной (0-EEPROM_MAX_VARIABLES)
|
||
uint16_t data; // Данные
|
||
uint32_t timestamp; // Временная метка
|
||
} EEPROM_Item;
|
||
#pragma pack(pop)
|
||
|
||
// Инициализация EEPROM
|
||
EEPROM_Status EEPROM_Init(void);
|
||
|
||
// Чтение данных
|
||
EEPROM_Status EEPROM_Read(uint16_t virt_address, uint16_t* data);
|
||
|
||
// Запись данных
|
||
EEPROM_Status EEPROM_Write(uint16_t virt_address, uint16_t data);
|
||
|
||
// Массовая запись
|
||
EEPROM_Status EEPROM_WriteMultiple(uint16_t virt_address, uint8_t* data, uint16_t size);
|
||
|
||
// Получение информации о EEPROM
|
||
void EEPROM_GetInfo(uint32_t* used, uint32_t* total);
|
||
|
||
// Полное форматирование
|
||
EEPROM_Status EEPROM_Format(void);
|
||
|
||
#endif |