343 lines
11 KiB
C
343 lines
11 KiB
C
/*
|
||
* @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_Iot_Imei(char *buf, rt_size_t len);
|
||
int Get_Iot_Imsi(char *buf, rt_size_t len);
|
||
int Get_Iot_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 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_Addr_Info(flash_sever_info *sever_info);
|
||
int Flash_Set_Sever_Addr_Info(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__
|
||
|
||
|