MS-DTU/MS-DTU-V1/User/spi_FRam.h

129 lines
3.8 KiB
C
Raw Permalink Normal View History

2025-04-03 14:18:58 +08:00
/*
*********************************************************************************************************
* IAR Development Kits
* on the
*
* M451
*
* Filename : spi_fram.h
* Version : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/
#ifndef USER_SPI_FRAM_PRESENT
#define USER_SPI_FRAM_PRESENT
#include "type.h"
// FRAM<41><EFBFBD><EFBFBD><E6BBAE><EFBFBD>£<EFBFBD>
// 0~21: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52><43>)
// 22~4117: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>4K<34><4B><EFBFBD><EFBFBD><E6A3AC>δд<CEB4><D0B4>SFlash<73>У<EFBFBD>
// ---------- GPS ----------
// 4118~4125: GPSѭ<53><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52><43>)
// 4126~14940: GPS<50><53>¼<EFBFBD><C2BC>ÿ<EFBFBD><C3BF>15<31>ֽڣ<D6BD><DAA3><EFBFBD>720 + 1<><31><EFBFBD><EFBFBD>10815<31>ֽڣ<D6BD><DAA3><EFBFBD>4<EFBFBD><34>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD>48<34><38><EFBFBD><EFBFBD>
// ---------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>ʱ<EFBFBD><CAB1><EFBFBD>㷨 ----------
// 14941~16290: TankPara<72><61>¼<EFBFBD><C2BC>1350<35>ֽڣ<D6BD>1298+<2B><>־λ+CRC+<2B><><EFBFBD><EFBFBD>48<34>ֽڣ<D6BD>
// ---------- GPRS (<28><>Ϊʱ<CEAA><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><E7B2BB><EFBFBD><EFBFBD>GPRS<52><53>¼<EFBFBD><C2BC>----------
// 16291~16298: GPRSѭ<53><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52><43>)
// 16299~32098: GPRS<52><53>¼<EFBFBD><C2BC>ÿ<EFBFBD><C3BF>158<35>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>99 + 1<><31><EFBFBD><EFBFBD>15800<30>ֽڣ<D6BD>
// ---------- BD_GPRS (<28><>Ϊʱ<CEAA><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><E7B2BB><EFBFBD><EFBFBD>GPRS<52><53>¼<EFBFBD><C2BC>----------
// 32099~32106: BD_GPRSѭ<53><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52><43>)
// 32107~32580: BD_GPRS<52><53>¼<EFBFBD><C2BC>ÿ<EFBFBD><C3BF>158<35>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD>2 + 1<><31><EFBFBD><EFBFBD>474<37>ֽڣ<D6BD>
// 32581~32656: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ76<37>ֽڣ<D6BD>
// 32657~32767: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>111<31>ֽڣ<D6BD>
// GPS<50><53>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD>720+1<><31>)
#define FRAM_GPS_DATA_COUNT 720
// GPRS<52><53>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD>99+1<><31><EFBFBD><EFBFBD>
#define FRAM_GPRS_DATA_COUNT 99
// BD-GPRS<52><53>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ<EFBFBD>2+1<><31><EFBFBD><EFBFBD>
#define FRAM_BD_GPRS_DATA_COUNT 2
// <20><EFBFBD><E6B4A2>ʼ<EFBFBD><CABC>ַ
#define FRAM_UPGRADE_INFO_BASE 0
#define FRAM_UPGRADE_DATA_BASE 22 // =0+22
// ---------- <20>۳<EFBFBD>-GPS ----------
#define FRAM_GPS_INFO_BASE 4118 // =22+4096
#define FRAM_GPS_DATA_BASE 4126 // =4118+8
// ---------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>ʱ<EFBFBD><CAB1><EFBFBD>㷨 ----------
#define FRAM_CCS_TANK_BASE 14941 // = 4126+15*721
// ---------- GPRS(<28><>Ϊʱ<CEAA><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><E7B2BB><EFBFBD><EFBFBD>GPRS<52><53>¼<EFBFBD><C2BC> ----------
#define FRAM_GPRS_INFO_BASE 16291 // =14941+1350
#define FRAM_GPRS_DATA_BASE 16299 // =16291+8
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FRAM_GPRS_BD_INFO_BASE 32099 // =16299+158*100
#define FRAM_GPRS_BD_DATA_BASE 32107 // =32099+8
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD>洢λ<E6B4A2><CEBB>
#define FRAM_ALIYUN_SECRET_BASE 32581 // =32107+158*3
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>: 32K bytes
#define FRAM_SIZE 32768ul
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void FRAM_Init();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void FRAM_Open();
void FRAM_ReadID();
uint8_t FRAM_WriteEN();
uint16_t FRAM_BufferWrite(uint32_t Addr, uint8_t *buf, uint32_t nbytes);
uint16_t FRAM_BufferRead(uint32_t Addr, uint8_t *buf, uint32_t nbytes);
uint32_t FRAM_BufferVerify(uint32_t Addr, uint8_t *buf, uint32_t nbytes);
void FRAM_Sleep(uint8_t sleep);
#pragma pack(push, 1)
typedef struct
{
uint16_t check; // <20><>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0x55AA
volatile uint16_t rdPtr;
volatile uint16_t wtPtr;
uint16_t crc; // У<><D0A3>λ
} loopbuff_info_t;
typedef struct
{
loopbuff_info_t info;
uint16_t itemSize;
uint16_t maxItemCount;
uint32_t info_base;
union
{
uint32_t data_base;
uint8_t *data;
};
} loopbuff_t;
#pragma pack(pop)
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
void LoopBuff_Create(loopbuff_t *lpbuf, uint16_t itemSize, uint16_t maxItemCount, uint32_t info_base, uint32_t data_base);
void LoopBuff_Clear(loopbuff_t *lpbuf);
uint16_t LoopBuff_GetCount(loopbuff_t *lpbuf);
uint16_t LoopBuff_GetNextPtr(loopbuff_t *lpbuf, uint16_t ptr);
void LoopBuff_PutItem(loopbuff_t *lpbuf, uint8_t *item);
void LoopBuff_RemoveItems(loopbuff_t *lpbuf, uint16_t count);
uint32_t LoopBuff_GetDataPos(loopbuff_t *lpbuf, uint16_t ptr);
uint8_t *LoopBuff_GetDataPtr(loopbuff_t *lpbuf, uint16_t ptr);
// <20><>FRAM<41><4D>ȡ<EFBFBD><C8A1>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0>2<EFBFBD><32><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>־0x55AA<41><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊcrc<72><63>
uint32_t FRAM_LoadInfo(uint32_t Addr, uint8_t *buf, uint32_t nbytes);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>FRAM<41>У<EFBFBD>ǰ<EFBFBD><C7B0>2<EFBFBD><32><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>־0x55AA<41><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊcrc<72><63>
uint32_t FRAM_SaveInfo(uint32_t Addr, uint8_t *buf, uint32_t nbytes);
#endif