- 新增usb连接状态检测函数,根据usb连接状态自动切换数据采集模式 - 新增文件系统动态挂载/卸载功能,usb连接时卸载文件系统,断开时重新挂载 - 修改系统启动逻辑,根据初始usb连接状态决定是否开始数据采集 - 新增usb模式系统状态,完善系统状态机 🐛 fix(sdio): 修复sdio配置问题并启用中断 - 修改sdio时钟分频为2,优化sd nand通信时序 - 启用sdio数据线内部上拉电阻,提高信号稳定性 - 提高sdio dma传输优先级至最高,确保数据传输实时性 - 启用sdio全局中断并设置优先级为9 🔧 chore(config): 优化系统配置参数 - 修改系统滴答定时器中断优先级为0(最高优先级) - 增加堆栈大小至0x1000,增加堆大小至0x800 - 修改usb msc媒体数据包大小至32768,提高usb传输效率 - 修改fatfs配置,设置最大最小扇区大小为512字节 ♻️ refactor(usb): 重构usb存储接口实现 - 修改usb存储初始化逻辑,避免重复初始化sd卡 - 优化usb存储容量报告机制,强制报告512字节扇区 - 增加sd nand读写超时等待机制,确保数据传输完成 - 修改usb中断优先级为11,避免与sdio中断冲突 📝 docs(headers): 更新头文件声明 - 在stm32f4xx_it.h中添加sdio中断处理函数声明 - 在system_monitor.h中添加usb模式系统状态定义 - 更新data_storage.h中的数据存储路径配置
77 lines
2.6 KiB
C
77 lines
2.6 KiB
C
#ifndef DATA_STORAGE_H
|
|
#define DATA_STORAGE_H
|
|
|
|
#include "main.h"
|
|
#include "fatfs.h"
|
|
#include "ff.h"
|
|
#include "data_packet.h"
|
|
#include "correction.h"
|
|
#include <stdint.h>
|
|
|
|
// 数据存储配置
|
|
#define DATA_STORAGE_BUFFER_SIZE 32768 // 缓冲区大小(字节)
|
|
#define DATA_STORAGE_FILE_MAX_SIZE (10*1024*1024) // 单个文件最大10MB
|
|
#define DATA_STORAGE_PATH "0:/DATA1" // 数据存储路径
|
|
#define DATA_STORAGE_FILE_PREFIX "ADC_DATA_" // 文件名前缀
|
|
|
|
// 缓冲区状态
|
|
typedef enum {
|
|
BUFFER_IDLE = 0, // 缓冲区空闲
|
|
BUFFER_WRITING, // 正在写入数据
|
|
BUFFER_READY_TO_FLUSH, // 准备刷新到文件
|
|
BUFFER_FLUSHING // 正在刷新到文件
|
|
} BufferState_t;
|
|
|
|
// 数据存储状态
|
|
typedef enum {
|
|
DATA_STORAGE_IDLE = 0,
|
|
DATA_STORAGE_RECORDING,
|
|
DATA_STORAGE_ERROR,
|
|
DATA_STORAGE_FULL
|
|
} DataStorageState_t;
|
|
|
|
// 数据存储统计信息
|
|
typedef struct {
|
|
uint32_t total_samples;
|
|
uint32_t current_file_size;
|
|
uint32_t file_count;
|
|
uint32_t error_count;
|
|
DataStorageState_t state;
|
|
char current_filename[64];
|
|
} DataStorageStats_t;
|
|
|
|
// 双缓冲区结构
|
|
typedef struct {
|
|
uint8_t data[DATA_STORAGE_BUFFER_SIZE];
|
|
uint16_t index;
|
|
BufferState_t state;
|
|
} DataBuffer_t;
|
|
|
|
// 数据存储句柄
|
|
typedef struct {
|
|
FIL file;
|
|
DataBuffer_t buffers[2]; // 双缓冲区
|
|
uint8_t active_buffer; // 当前活动缓冲区索引 (0 或 1)
|
|
uint8_t flush_buffer; // 待刷新缓冲区索引
|
|
DataStorageStats_t stats;
|
|
uint8_t initialized;
|
|
uint8_t flush_in_progress; // 刷新进行中标志
|
|
} DataStorageHandle_t;
|
|
|
|
// 函数声明
|
|
HAL_StatusTypeDef DataStorage_Init(DataStorageHandle_t *handle);
|
|
HAL_StatusTypeDef DataStorage_StartRecording(DataStorageHandle_t *handle);
|
|
HAL_StatusTypeDef DataStorage_StopRecording(DataStorageHandle_t *handle);
|
|
HAL_StatusTypeDef DataStorage_WriteData(DataStorageHandle_t *handle, const DataPacket_t *packet);
|
|
HAL_StatusTypeDef DataStorage_WriteCorrectedData(DataStorageHandle_t *handle, const CorrectionResult_t *result);
|
|
HAL_StatusTypeDef DataStorage_Flush(DataStorageHandle_t *handle);
|
|
void DataStorage_GetStats(DataStorageHandle_t *handle, DataStorageStats_t *stats);
|
|
HAL_StatusTypeDef DataStorage_CreateNewFile(DataStorageHandle_t *handle);
|
|
|
|
// 双缓冲区管理函数
|
|
HAL_StatusTypeDef DataStorage_SwitchBuffer(DataStorageHandle_t *handle);
|
|
HAL_StatusTypeDef DataStorage_FlushBuffer(DataStorageHandle_t *handle, uint8_t buffer_index);
|
|
void DataStorage_ProcessBackgroundTasks(DataStorageHandle_t *handle);
|
|
|
|
#endif // DATA_STORAGE_H
|