добавил второй проект для C8T6
This commit is contained in:
56
john103C6T6NewVer/EEPROM_Emul/lib/EEPROM_Emul.h
Normal file
56
john103C6T6NewVer/EEPROM_Emul/lib/EEPROM_Emul.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#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)
|
||||
|
||||
typedef struct {
|
||||
uint8_t data[EEPROM_SIZE]; // Массив для хранения данных
|
||||
uint16_t head; // Указатель на место записи
|
||||
uint16_t tail; // Указатель на место чтения
|
||||
} RingBuffer_t;
|
||||
|
||||
|
||||
// Инициализация 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
|
||||
31
john103C6T6NewVer/EEPROM_Emul/lib/flash_ring.h
Normal file
31
john103C6T6NewVer/EEPROM_Emul/lib/flash_ring.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef FLASH_RING_H
|
||||
#define FLASH_RING_H
|
||||
#include "stm32f1xx_hal.h"
|
||||
|
||||
//#define FLASH_PAGE_SIZE 1024
|
||||
#define NUM_OF_PAGE_EEPROM 2
|
||||
#define FLASH_START_ADDR 0x08000000
|
||||
#define FLASH_SIZE (64 * 1024) // для STM32F103C8
|
||||
#define LAST_PAGE_ADDR (FLASH_START_ADDR + FLASH_SIZE - NUM_OF_PAGE_EEPROM*FLASH_PAGE_SIZE)
|
||||
#define RECORD_SIZE 255
|
||||
#define RECORDS_PER_PAGE NUM_OF_PAGE_EEPROM*(FLASH_PAGE_SIZE / RECORD_SIZE) // 10 записей
|
||||
|
||||
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint32_t timestamp;
|
||||
uint8_t data[RECORD_SIZE-4]; // 200 - 4 байта timestamp
|
||||
} FlashRecord_t;
|
||||
#pragma pack(pop)
|
||||
|
||||
typedef struct {
|
||||
uint32_t write_index; // индекс следующей записи (0-9)
|
||||
uint8_t initialized; // флаг инициализации
|
||||
} BufferState_t;
|
||||
BufferState_t buffer_init(void);
|
||||
HAL_StatusTypeDef buffer_write_record(FlashRecord_t* record, BufferState_t* state);
|
||||
HAL_StatusTypeDef erase_flash_page(void) ;
|
||||
HAL_StatusTypeDef write_flash_record(uint32_t address, FlashRecord_t* record);
|
||||
FlashRecord_t* buffer_read_record(uint32_t index);
|
||||
void buffer_get_all_records(FlashRecord_t* records[], uint32_t* count);
|
||||
#endif // FLASH_RING_H
|
||||
Reference in New Issue
Block a user