BLE_TYQ_BJQ_CH32V303/bsp/inc/bsp_flash.h

343 lines
11 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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\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"
#include "user_sys.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 (2)
// 报警阈值高值
#define FLASH_ALARM_H_VALUE_ADDR (FLASH_ALARM_L_VALUE_ADDR + FLASH_ALARM_L_VALUE_LEN)
#define FLASH_ALARM_H_VALUE_LEN (2)
/*温度报警阈值*/
#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_IOT_UPLOAD_CYCLE_ADDR (FLASH_TEMP_ALARM_THRESHOLD_ADDR + FLASH_TEMP_ALARM_THRESHOLD_LEN)
#define FLASH_IOT_UPLOAD_CYCLE_LEN (2)
// 重试次数
#define FLASH_IOT_RETRY_ADDR (FLASH_IOT_UPLOAD_CYCLE_ADDR + FLASH_IOT_UPLOAD_CYCLE_LEN)
#define FLASH_IOT_RETRY_LEN (1)
/*电磁阀功能开启*/
#define FLASH_EMAGNETIC_SWITCH_ADDR (FLASH_IOT_RETRY_ADDR + FLASH_IOT_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_IOT_IMEI_ADDR (FLASH_RELAY_SWITCH_ADDR + FLASH_RELAY_SWITCH_LEN)
#define FLASH_IOT_IMEI_LEN (15)
// imsi
#define FLASH_IOT_IMSI_ADDR (FLASH_IOT_IMEI_ADDR + FLASH_IOT_IMEI_LEN)
#define FLASH_IOT_IMSI_LEN (15)
// iccid
#define FLASH_IOT_ICCID_ADDR (FLASH_IOT_IMSI_ADDR + FLASH_IOT_IMSI_LEN)
#define FLASH_IOT_ICCID_LEN (20)
/*工作时长记录 5* 365 * 24 = 43800 < 65535*/
#define FLASH_WORK_TIME_ADDR (FLASH_IOT_ICCID_ADDR + FLASH_IOT_ICCID_LEN)
#define FLASH_WORK_TIME_LEN (2)//单位hours
/*正式平台服务器地址*/
#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_CALIBRATION_STATUS_ADDR (FLASH_SERVER_ADDR_ADDR + FLASH_SERVER_LEN)
#define FLASH_CALIBRATION_STATUS_LEN (1)
/*无线阀门数量*/
#define FLASH_VALVE_NUM_ADDR (FLASH_CALIBRATION_STATUS_ADDR + FLASH_CALIBRATION_STATUS_LEN)
#define FLASH_VALVE_NUM_LEN (1)
/*无线阀门 1号 MAC地址*/
#define FLASH_VALVE_1_MAC_ADDR_ADDR (FLASH_VALVE_NUM_ADDR + FLASH_VALVE_NUM_LEN)
#define FLASH_VALVE_MAC_ADDR_LEN (6)
#define FLASH_VALVE_2_MAC_ADDR_ADDR (FLASH_VALVE_1_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#define FLASH_VALVE_3_MAC_ADDR_ADDR (FLASH_VALVE_2_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#define FLASH_VALVE_4_MAC_ADDR_ADDR (FLASH_VALVE_3_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#define FLASH_VALVE_5_MAC_ADDR_ADDR (FLASH_VALVE_4_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#define FLASH_VALVE_6_MAC_ADDR_ADDR (FLASH_VALVE_5_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#define FLASH_VALVE_7_MAC_ADDR_ADDR (FLASH_VALVE_6_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#define FLASH_VALVE_8_MAC_ADDR_ADDR (FLASH_VALVE_7_MAC_ADDR_ADDR + FLASH_VALVE_MAC_ADDR_LEN)
#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,
kIotUploadCycleId,
kIotRetryId,
kTempAlarmThresholdId, // 温度报警阈值
kEmagneticSwitchId, // 电磁阀功能开启
kRelaySwitchId, // 继电器功能开启
kIotImeiId,
kIotImsiId,
kIotIccidId,
kCnt
} TeFlashCfgInfoId;
/*系统配置信息*/
typedef struct __attribute__((packed))
{
rt_uint8_t hw_ver; // 硬件版本号
rt_uint8_t sw_ver; // 软件版本号
rt_uint16_t alarm_l_value; // 报警低阈值
rt_uint16_t alarm_h_value; // 报警高阈值
rt_uint8_t temp_alarm_threshold;//温度报警阈值
rt_uint16_t iot_upload_cycle; // NB上传周期
rt_uint8_t iot_retry; // 重试次数
rt_uint8_t emagnetic_switch;
rt_uint8_t relay_switch;
rt_uint8_t iot_imei[15]; // IMEI
rt_uint8_t iot_imsi[15]; // IMSI
rt_uint8_t iot_iccid[20]; // ICCID
}sys_config_info;
typedef struct
{
char server_url[32];
char server_port[8];
}flash_sever_info;
void Flash_Write_Record(TeRecord record);
int Get_IotImei(char *buf, rt_size_t len);
int Get_IotImsi(char *buf, rt_size_t len);
int Get_IotIccid(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 Flash_Set_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number);
int Flash_Get_Mac_Addr(rt_uint8_t *mac_addr, rt_uint8_t number);
rt_uint8_t Flash_Get_Valve_Num(void);
int Flash_Set_Valve_Num(rt_uint8_t valve_num);
int BSP_Flash_Write_Info(rt_uint8_t *buf, rt_size_t len);
int Flash_Get_Sever_Data(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);
TeCalibrationStatus Flash_Get_Calibration_State(void);
int Flash_Set_Calibration_State(TeCalibrationStatus status);
#endif //!@__BSP_FLASH_H__