2024-08-31 10:27:58 +08:00
|
|
|
|
/***
|
|
|
|
|
* @Author: mbw
|
|
|
|
|
* @Date: 2024-08-22 16:18:15
|
|
|
|
|
* @LastEditors: mbw && 1600520629@qq.com
|
|
|
|
|
* @LastEditTime: 2024-08-26 16:58:32
|
|
|
|
|
* @FilePath: \USART1_Interrupt - RT-Thread\bsp\inc\bsp_flash.h
|
|
|
|
|
* @Description:
|
|
|
|
|
* @
|
|
|
|
|
* @Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
|
|
|
|
|
*/
|
|
|
|
|
#ifndef __BSP_FLASH__H__
|
|
|
|
|
#define __BSP_FLASH__H__
|
|
|
|
|
|
|
|
|
|
#include "rtthread.h"
|
|
|
|
|
#include "bsp_history.h"
|
|
|
|
|
|
2024-09-02 15:12:26 +08:00
|
|
|
|
// #ifdef __cplusplus
|
|
|
|
|
// extern "C"
|
|
|
|
|
// {
|
|
|
|
|
// #endif
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
|
|
|
|
/*帧格式:4bit(年) + 4bit(月) + 5bit(日) + 5bit(时) + 6bit(分) + (8bit)SUM_CHECK = 32byte*/
|
|
|
|
|
#define ErrorStatus std_status_t
|
|
|
|
|
#define ERROR STD_ERR
|
|
|
|
|
#define SUCCESS STD_OK
|
|
|
|
|
|
2024-08-31 14:50:41 +08:00
|
|
|
|
#define HR_RECORD_FRAME_LEN (4U)
|
2024-08-31 10:27:58 +08:00
|
|
|
|
#define FALSH_SIZE_KB (64U)
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define FLASH_PAGE_RECORD_WORD_NUM (128U)
|
2024-08-31 14:50:41 +08:00
|
|
|
|
#define FLASH_PAGE_BYTE_SIZE (512U)
|
|
|
|
|
#define BASE_YEAR (2024U)
|
|
|
|
|
#define FLASH_START_ADDR (0x08000000U)
|
2024-08-31 10:27:58 +08:00
|
|
|
|
#define FLASH_DEFAULT_VALUE (0xFFFFFFFFU) // 读取word更准确一点
|
|
|
|
|
|
|
|
|
|
#define HR_ALARM_PAGES (3U) // 2 + 1 page
|
|
|
|
|
#define HR_ALARM_RCY_PAGES (3U) // 2 + 1 page
|
|
|
|
|
#define HR_FAULT_PAGES (2U) // 1 + 1 page
|
|
|
|
|
#define HR_FAULT_RCY_PAGES (2U) // 1 + 1 page
|
2024-09-18 14:03:55 +08:00
|
|
|
|
#define HR_power_down_PAGES (2U) // 1 + 1 page
|
2024-08-31 10:27:58 +08:00
|
|
|
|
#define HR_POWER_ON_PAGES (2U) // 1 + 1 page
|
|
|
|
|
#define HR_SENSOR_FAILURE_PAGES (1U) // 1 page
|
|
|
|
|
|
2024-08-31 14:50:41 +08:00
|
|
|
|
#define FLASH_HR_SENSOR_FAILIRE_START_PAGE (126U) // 传感器故障信息起始页
|
|
|
|
|
#define FLASH_HR_ALARM_PAGE (123U) // 报警信息起始页
|
|
|
|
|
#define FLASH_HR_ALARM_RCY_PAGE (120U) // 报警恢复信息起始页
|
|
|
|
|
#define FLASH_HR_FAULT_PAGE (118U) // 故障信息起始页
|
|
|
|
|
#define FLASH_HR_FAULT_RCY_PAGE (116U) // 故障恢复信息起始页
|
2024-09-18 14:03:55 +08:00
|
|
|
|
#define FLASH_HR_power_down_PAGE (114U) // 掉电信息起始页
|
2024-08-31 14:50:41 +08:00
|
|
|
|
#define FLASH_HR_POWER_ON_PAGE (112U) // 上电信息起始页
|
|
|
|
|
|
2024-09-04 09:01:05 +08:00
|
|
|
|
#define FLASH_HR_INFO_PAGE (127U)
|
2024-08-31 14:50:41 +08:00
|
|
|
|
/*信息页写值标志值*/
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define FLASH_FIRST_INIT_VALUE (0xA2A3A4A5U) // 第一次写值标志位
|
|
|
|
|
/*每页512个字节,每条记录4byte*/
|
|
|
|
|
#define FLASH_HR_PAGE_RECORD_NUM (FLASH_PAGE_BYTE_SIZE / HR_RECORD_FRAME_LEN)
|
2024-08-31 14:50:41 +08:00
|
|
|
|
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define HR_ALARM_MAX_NUM (256U)
|
|
|
|
|
#define HR_ALARM_RCY_MAX_NUM (256U)
|
|
|
|
|
#define HR_FAULT_MAX_NUM (128U)
|
|
|
|
|
#define HR_FAULT_RCY_MAX_NUM (128U)
|
2024-09-18 14:03:55 +08:00
|
|
|
|
#define HR_power_down_MAX_NUM (128U)
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define HR_POWER_ON_MAX_NUM (128U)
|
|
|
|
|
#define HR_SENSOR_FAILURE_MAX_NUM (1U)
|
2024-08-31 14:50:41 +08:00
|
|
|
|
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define CHECKSUM_MASK 0xFF
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
|
|
|
|
/*最后一页起始地址127page*/
|
|
|
|
|
#define FLASH_LAST_PAGE_START_ADDR (FLASH_START_ADDR + (FALSH_SIZE_KB * 1024) - FLASH_PAGE_BYTE_SIZE)
|
|
|
|
|
/*传感器失效地址:126page*/
|
|
|
|
|
#define FLASH_HR_SENSOR_FAILURE_START_ADDR (FLASH_LAST_PAGE_START_ADDR - FLASH_PAGE_BYTE_SIZE)
|
|
|
|
|
/*报警起始地址:123~125page*/
|
|
|
|
|
#define FLASH_HR_ALARM_START_ADDR (FLASH_HR_SENSOR_FAILURE_START_ADDR - FLASH_PAGE_BYTE_SIZE * HR_ALARM_PAGES)
|
|
|
|
|
/*报警恢复起始地址:120~122page*/
|
|
|
|
|
#define FLASH_HR_ALARM_RCY_START_ADDR (FLASH_HR_ALARM_START_ADDR - FLASH_PAGE_BYTE_SIZE * HR_ALARM_RCY_PAGES)
|
|
|
|
|
/*故障起始地址:118~119page*/
|
|
|
|
|
#define FLASH_HR_FAULT_START_ADDR (FLASH_HR_ALARM_RCY_START_ADDR - FLASH_PAGE_BYTE_SIZE * HR_FAULT_PAGES)
|
|
|
|
|
/*故障恢复起始地址:116~117page*/
|
|
|
|
|
#define FLASH_HR_FAULT_RCY_START_ADDR (FLASH_HR_FAULT_START_ADDR - FLASH_PAGE_BYTE_SIZE * HR_FAULT_RCY_PAGES)
|
|
|
|
|
/*掉电起始地址:114~115page*/
|
2024-09-18 14:03:55 +08:00
|
|
|
|
#define FLASH_HR_power_down_START_ADDR (FLASH_HR_FAULT_RCY_START_ADDR - FLASH_PAGE_BYTE_SIZE * HR_power_down_PAGES)
|
2024-08-31 10:27:58 +08:00
|
|
|
|
/*上电起始地址:112~113page*/
|
2024-09-18 14:03:55 +08:00
|
|
|
|
#define FLASH_HR_POWER_ON_START_ADDR (FLASH_HR_power_down_START_ADDR - FLASH_PAGE_BYTE_SIZE * HR_POWER_ON_PAGES)
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
|
|
|
|
/*最后一页512个字节,用来存储一些初始化信息:
|
|
|
|
|
信息页初始化标志
|
|
|
|
|
出厂日期
|
|
|
|
|
到期日期
|
|
|
|
|
报警值
|
|
|
|
|
软件版本
|
|
|
|
|
硬件版本
|
|
|
|
|
公司名称
|
|
|
|
|
更新日期
|
|
|
|
|
*/
|
2024-08-31 14:50:41 +08:00
|
|
|
|
|
2024-08-31 10:27:58 +08:00
|
|
|
|
#define FLASH_CONFIG_INFO_START_ADDR FLASH_LAST_PAGE_START_ADDR
|
2024-08-31 14:50:41 +08:00
|
|
|
|
/*配置信息页初始化标志位地址*/
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define FLASH_CONFIG_INFO_INIT_FLAG_ADDR FLASH_CONFIG_INFO_START_ADDR
|
2024-08-31 10:27:58 +08:00
|
|
|
|
/*出厂日期:127 page */
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#define FLASH_FACTORY_TIME_ADDR (FLASH_CONFIG_INFO_INIT_FLAG_ADDR + sizeof(uint32_t))
|
2024-08-31 10:27:58 +08:00
|
|
|
|
/*到期日期:127page + 8byte*/
|
2024-08-31 14:50:41 +08:00
|
|
|
|
#define FLASH_EXPIRATION_TIME_ADDR (FLASH_FACTORY_TIME_ADDR + sizeof(uint32_t))
|
|
|
|
|
/*低阈值报警值地址 */
|
|
|
|
|
#define FLASH_LOW_ALARM_VALUE_ADDR (FLASH_EXPIRATION_TIME_ADDR + sizeof(uint32_t))
|
|
|
|
|
/*高阈值报警值地址 */
|
|
|
|
|
#define FLASH_HIGH_ALARM_VALUE_ADDR (FLASH_LOW_ALARM_VALUE_ADDR + sizeof(uint32_t))
|
|
|
|
|
/*软件版本地址 */
|
|
|
|
|
#define FLASH_SOFTWARE_VERSION_ADDR (FLASH_HIGH_ALARM_VALUE_ADDR + sizeof(uint32_t))
|
|
|
|
|
/*硬件版本地址 */
|
|
|
|
|
#define FLASH_HARDWARE_VERSION_ADDR (FLASH_SOFTWARE_VERSION_ADDR + sizeof(uint32_t))
|
|
|
|
|
/*公司名称地址 */
|
|
|
|
|
#define FLASH_COMPANY_NAME_ADDR (FLASH_HARDWARE_VERSION_ADDR + sizeof(uint32_t))
|
|
|
|
|
/*更新日期地址 */
|
|
|
|
|
#define FLASH_UPDATE_TIME_ADDR (FLASH_COMPANY_NAME_ADDR + sizeof(uint32_t))
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
2024-09-02 15:12:26 +08:00
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
kFlashInitFlag, // 0xA2A3A4A5
|
|
|
|
|
kFlashFactoryTime,
|
|
|
|
|
kFlashExpirationTime,
|
|
|
|
|
kFlashLowAlarmValue,
|
|
|
|
|
kFlashHighAlarmValue,
|
|
|
|
|
kFlashSoftwareVersion,
|
|
|
|
|
kFlashHardwareVersion,
|
|
|
|
|
kFlashCompanyName,
|
|
|
|
|
kFlashUpdateTime,
|
|
|
|
|
kFlashReadModeMax
|
|
|
|
|
} TeFlashReadInfo;
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
2024-09-02 15:12:26 +08:00
|
|
|
|
kRecordAlarm = 0, // at least 200 actually HR_ALARM_MAX_NUM
|
|
|
|
|
kRecordAlarmRcy, // at least 200 actually HR_ALARM_RCY_MAX_NUM
|
|
|
|
|
kRecordFault, // at least 100 actually HR_FAULT_MAX_NUM
|
|
|
|
|
kRecordFaultRcy, // at least 100 actually HR_FAULT_RCY_MAX_NUM
|
2024-09-18 14:03:55 +08:00
|
|
|
|
kRecordPowerDown, // at least 50 actually HR_power_down_MAX_NUM
|
2024-09-02 15:12:26 +08:00
|
|
|
|
kRecordPowerOn, // at least 50 actually HR_POWER_ON_MAX_NUM
|
|
|
|
|
kRecordSensorFailure // at least 1 actually HR_SENSOR_FAILURE_MAX_NUM
|
|
|
|
|
} TeRecord;
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
uint16_t hr_num; // 记录当前记录数
|
|
|
|
|
uint16_t hr_page; // 记录所在页数
|
|
|
|
|
uint32_t hr_start_addr; // 记录最新的起始地址
|
|
|
|
|
uint32_t hr_index_addr; // 当前要写入的地址
|
|
|
|
|
} TsRecordIndex;
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
|
|
|
|
/*记录对应项目的总记录数*/
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
2024-09-19 14:14:59 +08:00
|
|
|
|
uint8_t alarm;
|
|
|
|
|
uint8_t alarm_rcy;
|
2024-08-31 10:27:58 +08:00
|
|
|
|
uint8_t fault;
|
|
|
|
|
uint8_t fault_rcy;
|
2024-09-18 14:03:55 +08:00
|
|
|
|
uint8_t power_down;
|
2024-08-31 10:27:58 +08:00
|
|
|
|
uint8_t power_on;
|
|
|
|
|
uint8_t sensor_failure;
|
|
|
|
|
|
|
|
|
|
} TsTotalRecords;
|
|
|
|
|
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
typedef union
|
2024-08-31 10:27:58 +08:00
|
|
|
|
{
|
2024-09-02 16:09:03 +08:00
|
|
|
|
struct __attribute__((packed))
|
2024-08-31 10:27:58 +08:00
|
|
|
|
{
|
2024-09-02 15:12:26 +08:00
|
|
|
|
uint32_t year : 4; // 16年
|
|
|
|
|
uint32_t month : 4;
|
|
|
|
|
uint32_t day : 5;
|
|
|
|
|
uint32_t hour : 5;
|
|
|
|
|
uint32_t minute : 6;
|
|
|
|
|
uint32_t check_sum : 8;
|
|
|
|
|
} time ;
|
2024-08-31 10:27:58 +08:00
|
|
|
|
uint32_t hr_data;
|
|
|
|
|
} TuFlashHrRecordFrame;
|
2024-09-02 15:12:26 +08:00
|
|
|
|
#pragma pack(pop)
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
2024-09-02 16:09:03 +08:00
|
|
|
|
|
2024-08-31 14:50:41 +08:00
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
kFactoryTimeId,
|
|
|
|
|
kExpirationTimeId,
|
|
|
|
|
} TeFlashProductTimeLimitId;
|
2024-08-31 10:27:58 +08:00
|
|
|
|
|
2024-09-04 09:01:05 +08:00
|
|
|
|
|
|
|
|
|
int BSP_Flash_Init(void);
|
|
|
|
|
|
2024-08-31 10:27:58 +08:00
|
|
|
|
ErrorStatus Flash_Write_Record(TeRecord record);
|
2024-09-02 15:12:26 +08:00
|
|
|
|
void Flash_SetProductTimeLimit(uint16_t year, uint8_t mon, uint8_t day, uint8_t hour, uint8_t min, TeFlashProductTimeLimitId id);
|
2024-08-31 10:27:58 +08:00
|
|
|
|
ErrorStatus Flash_GetTotalRecord(TsTotalRecords *pTotalRecords);
|
|
|
|
|
ErrorStatus Flash_GetRecord(TeFrameC2 record_type, uint8_t index, TsRecordsTime *pRecordsTime);
|
2024-09-02 15:12:26 +08:00
|
|
|
|
ErrorStatus Flash_GetProductTimeLimit(TuFlashHrRecordFrame *pLimitTime, TeFlashProductTimeLimitId id);
|
2024-08-23 11:16:27 +08:00
|
|
|
|
|
2024-09-02 15:12:26 +08:00
|
|
|
|
// #ifdef __cplusplus
|
|
|
|
|
// }
|
|
|
|
|
// #endif
|
2024-08-23 11:16:27 +08:00
|
|
|
|
|
2024-08-31 10:27:58 +08:00
|
|
|
|
#endif // !__BSP_FLASH__H__
|