/* * @Author : stark1898y 1658608470@qq.com * @Date : 2024-09-05 10:24:05 * @LastEditors : stark1898y 1658608470@qq.com * @LastEditTime : 2024-09-08 11:51:17 * @FilePath : \JT-DT-YD4N02A_RTT_MRS-4G\bsp\inc\bsp_flash.h * @Description : * * Copyright (c) 2024 by yzy, All Rights Reserved. */ #ifndef __BSP_FLASH_H__ #define __BSP_FLASH_H__ #include "board.h" #include "rtdef.h" #include "bsp_hr.h" #define FLASH_PAGE_SIZE (256U) #define FLASH_PAGE_HR_RECORD_NUM (25U) #define FLASH_HR_ONE_RECORD_SIZE (10U) #define HR_ALARM_MAX_NUM (200) #define HR_ALARM_RCY_MAX_NUM (200) #define HR_FAULT_MAX_NUM (100) #define HR_FAULT_RCY_MAX_NUM (100) #define HR_POWER_FAILURE_MAX_NUM (50) #define HR_POWER_ON_MAX_NUM (50) #define HR_SENSOR_FAILURE_MAX_NUM (1) #define HR_ALARM_PAGES (9U) // 8 + 1 page #define HR_ALARM_RCY_PAGES (9U) // 8 + 1 page #define HR_FAULT_PAGES (5U) // 4 + 1 page #define HR_FAULT_RCY_PAGES (5U) // 4 + 1 page #define HR_POWER_FAILURE_PAGES (3U) // 2 + 1 page #define HR_POWER_ON_PAGES (3U) // 2 + 1 page #define HR_SENSOR_FAILURE_PAGES (1U) // 1 page #define FLASH_CONFIG_INFO_PAGES (1U) #define HR_RECORD_FRAME_HEADER (0xAA55U) #define HR_RECORD_FRAME_LEN (10U) #define FLASH_START_ADDR (0x08000000U) #define FALSH_SIZE_KB (256U) // FLASH_CONFIG #define FLASH_LAST_PAGE_START_ADDR (FLASH_START_ADDR + (FALSH_SIZE_KB * 1024U) - FLASH_PAGE_SIZE) #define FLASH_CONFIG_INFO_START_ADDR FLASH_LAST_PAGE_START_ADDR #define FLASH_FACTORY_TIME_START_ADDR FLASH_CONFIG_INFO_START_ADDR #define FLASH_HR_SENSOR_FAILURE_START_ADDR (FLASH_FACTORY_TIME_START_ADDR - FLASH_PAGE_SIZE) #define FLASH_HR_POWER_ON_START_ADDR (FLASH_HR_SENSOR_FAILURE_START_ADDR - FLASH_PAGE_SIZE * HR_POWER_ON_PAGES) #define FLASH_HR_POWER_FAILURE_START_ADDR (FLASH_HR_POWER_ON_START_ADDR - FLASH_PAGE_SIZE * HR_POWER_FAILURE_PAGES) #define FLASH_HR_FAULT_RCY_START_ADDR (FLASH_HR_POWER_FAILURE_START_ADDR - FLASH_PAGE_SIZE * HR_FAULT_RCY_PAGES) #define FLASH_HR_FAULT_START_ADDR (FLASH_HR_FAULT_RCY_START_ADDR - FLASH_PAGE_SIZE * HR_FAULT_PAGES) #define FLASH_HR_ALARM_RCY_START_ADDR (FLASH_HR_FAULT_START_ADDR - FLASH_PAGE_SIZE * HR_ALARM_RCY_PAGES) #define FLASH_HR_ALARM_START_ADDR (FLASH_HR_ALARM_RCY_START_ADDR - FLASH_PAGE_SIZE * HR_ALARM_PAGES) #define FLASH_FACTOR_TIME_NUM (6U)//这是通过脱机烧录器进行写入的,所以必须要保证这一页不含有效数据 // #define FLASH_FACTOR_TIME_NUM_ADDR (FLASH_HR_ALARM_START_ADDR + FLASH_PAGE_SIZE)// #define FLASH_FACTOR_TIME_NUM_ADDR 0x08032000 /*系统配置信息*/ // 产品有效期 #define FLASH_EXPIRATION_TIME_START_ADDR (FLASH_FACTORY_TIME_START_ADDR + sizeof(TuFlashProductTimeLimitFrame)) #define FLASH_EXPIRATION_TIME_LEN (sizeof(TuFlashProductTimeLimitFrame)) // 硬件版本号 #define FLASH_HW_VER_ADDR (FLASH_EXPIRATION_TIME_START_ADDR + FLASH_EXPIRATION_TIME_LEN) #define FLASH_HW_VER_LEN (1) // 软件版本号 #define FLASH_SW_VER_ADDR (FLASH_HW_VER_ADDR + FLASH_HW_VER_LEN) #define FLASH_SW_VER_LEN (1) // 报警阈值低值 #define FLASH_ALARM_L_VALUE_ADDR (FLASH_SW_VER_ADDR + FLASH_SW_VER_LEN) #define FLASH_ALARM_L_VALUE_LEN (1) // 报警阈值高值 #define FLASH_ALARM_H_VALUE_ADDR (FLASH_ALARM_L_VALUE_ADDR + FLASH_ALARM_L_VALUE_LEN) #define FLASH_ALARM_H_VALUE_LEN (1) /*温度报警阈值*/ #define FLASH_TEMP_ALARM_THRESHOLD_ADDR (FLASH_ALARM_H_VALUE_ADDR + FLASH_ALARM_H_VALUE_LEN) #define FLASH_TEMP_ALARM_THRESHOLD_LEN (1) // 上传周期 #define FLASH_NB_UPLOAD_CYCLE_ADDR (FLASH_TEMP_ALARM_THRESHOLD_ADDR + FLASH_TEMP_ALARM_THRESHOLD_LEN) #define FLASH_NB_UPLOAD_CYCLE_LEN (2) // 重试次数 #define FLASH_NB_RETRY_ADDR (FLASH_NB_UPLOAD_CYCLE_ADDR + FLASH_NB_UPLOAD_CYCLE_LEN) #define FLASH_NB_RETRY_LEN (1) /*电磁阀功能开启*/ #define FLASH_EMAGNETIC_SWITCH_ADDR (FLASH_NB_RETRY_ADDR + FLASH_NB_RETRY_LEN) #define FLASH_EMAGNETIC_SWITCH_LEN (1) /*继电器功能开启*/ #define FLASH_RELAY_SWITCH_ADDR (FLASH_EMAGNETIC_SWITCH_ADDR + FLASH_EMAGNETIC_SWITCH_LEN) #define FLASH_RELAY_SWITCH_LEN (1) //imei #define FLASH_NB_IMEI_ADDR (FLASH_RELAY_SWITCH_ADDR + FLASH_RELAY_SWITCH_LEN) #define FLASH_NB_IMEI_LEN (15) // imsi #define FLASH_NB_IMSI_ADDR (FLASH_NB_IMEI_ADDR + FLASH_NB_IMEI_LEN) #define FLASH_NB_IMSI_LEN (15) // iccid #define FLASH_NB_ICCID_ADDR (FLASH_NB_IMSI_ADDR + FLASH_NB_IMSI_LEN) #define FLASH_NB_ICCID_LEN (20) /*工作时长记录*/ #define FLASH_WORK_TIME_ADDR (FLASH_NB_ICCID_ADDR + FLASH_NB_ICCID_LEN) #define FLASH_WORK_TIME_LEN (2)//单位:天 /*正式平台服务器地址*/ #define FLASH_SERVER_ADDR_ADDR (FLASH_WORK_TIME_ADDR + FLASH_WORK_TIME_LEN) #define FLASH_SERVER_LEN (6) //FF.FF.FF.FF:FFFF #define FLASH_INIT_FLAG_ADDR (FLASH_CONFIG_INFO_START_ADDR + 254) #define FLASH_FIRST_INIT_VALUE (0xA2A2U) #define FLASH_SYS_PRODUCT_VALUE (0xA3A3U) #define FLASH_SYS_USER_VALUE (0xA4A4U) #define FLASH_CONFIG_INFO_FRAME_HEADER (0xA5A5U) #define FLASH_PRODUCT_TIME_FRAME_HEADER (0xA5U) typedef enum { kFactoryTimeId = 0U, kExpirationTimeId } TeFlashProductTimeLimitId; typedef struct __attribute__((packed)) { uint8_t header; uint16_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; } TsFlashProductTimeLimitFrame; typedef union { uint8_t buf[sizeof(TsFlashProductTimeLimitFrame)]; TsFlashProductTimeLimitFrame Struct; } TuFlashProductTimeLimitFrame; // TODO:报警阈值 typedef struct __attribute__((packed)) { uint16_t header; uint16_t value; } TsFlashMqAlarmFrame; typedef union { uint8_t buf[sizeof(TsFlashMqAlarmFrame)]; TsFlashMqAlarmFrame Struct; } TuFlashMqAlarmFrame; typedef struct __attribute__((packed)) { uint16_t header; uint16_t index; uint16_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; } TsFlashHrRecordFrame; typedef union { uint8_t buf[HR_RECORD_FRAME_LEN]; TsFlashHrRecordFrame Struct; } TuFlashHrRecordFrame; typedef struct { uint8_t alarm; uint8_t alarm_rcy; uint8_t fault; uint8_t fault_rcy; uint8_t power_failure; uint8_t power_on; uint8_t sensor_failure; } TsTotalRecords; extern TsTotalRecords TotalRecords; typedef enum { kRecordAlarm = 0, // at least 200 kRecordAlarmRcy, // at least 200 kRecordFault, // at least 100 kRecordFaultRcy, // at least 100 kRecordPowerDown, // at least 50 kRecordPowerOn, // at least 50 kRecordSensoEndOfLife // at least 1 } TeRecord; /*用于枚举Flash配置信息*/ typedef enum { kHwVerId = 0U, kSwVerId, kAlarmLValueId, kAlarmHValueId, kNbUploadCycleId, kNbRetryId, kTempAlarmThresholdId, // 温度报警阈值 kEmagneticSwitchId, // 电磁阀功能开启 kRelaySwitchId, // 继电器功能开启 kNbImeiId, kNbImsiId, kNbIccidId, kCnt } TeFlashCfgInfoId; /*系统配置信息*/ typedef struct __attribute__((packed)) { rt_uint8_t hw_ver; // 硬件版本号 rt_uint8_t sw_ver; // 软件版本号 rt_uint8_t alarm_l_value; // 报警低阈值 rt_uint8_t alarm_h_value; // 报警高阈值 rt_uint8_t temp_alarm_threshold;//温度报警阈值 rt_uint16_t nb_upload_cycle; // NB上传周期 rt_uint8_t nb_retry; // 重试次数 rt_uint8_t emagnetic_switch; rt_uint8_t relay_switch; rt_uint8_t nb_imei[15]; // IMEI rt_uint8_t nb_imsi[15]; // IMSI rt_uint8_t nb_iccid[20]; // ICCID } sys_config_info; struct flash_sever_info { char server_url[64]; char server_port[8]; }; extern struct flash_sever_info sever_info; void Flash_Write_Record(TeRecord record); int Get_Nb_Imei(char *buf, rt_size_t len); int Get_Nb_Imsi(char *buf, rt_size_t len); int Get_Nb_Iccid(char *buf, rt_size_t len); rt_uint8_t Flash_GetNum_Records(TeRecord record); void Flash_ErasePage_ConfigInfo(void); void Flash_ErasePage_ReadConfigInfo(rt_uint8_t *page_buf); int Flash_Write_ConfigInfo(rt_uint8_t *page_buf); ErrorStatus Flash_GetProductTimeLimit(TuFlashProductTimeLimitFrame *pLimitTime, TeFlashProductTimeLimitId id); void Flash_SetProductTimeLimit(rt_uint16_t year, rt_uint8_t mon, rt_uint8_t day, rt_uint8_t hour, rt_uint8_t min, rt_uint8_t second, TeFlashProductTimeLimitId id); void Set_FactoryRtcTime(void); void Set_ExpirationTime(rt_uint16_t days); ErrorStatus Flash_GetTotalRecord(TsTotalRecords *pTotalRecords); ErrorStatus Flash_GetRecord(TeFrameC2 record_type, rt_uint8_t index, TsRecordsTime *pRecordsTime); void Flash_Erase_Records(TeRecord record); void BSP_Flash_EraseRecodrs(void); int BSP_Flash_Init(void); rt_uint8_t Flash_Sys_Cfg(TeFlashCfgInfoId id, rt_uint8_t *buf, rt_size_t len); size_t Flash_Get_SysCfg(TeFlashCfgInfoId id); int BSP_Flash_Write_Info(rt_uint8_t *buf, rt_size_t len); int Flash_Get_Sever_Data(struct flash_sever_info *sever_info); int Flash_Set_Sever_Data(rt_uint8_t *data); rt_uint16_t Flash_Get_WorkDuration(void); int Flash_Set_WorkDuration(rt_uint16_t value); #endif //!@__BSP_FLASH_H__