ShipCentralControl/Anjiehui7_DTU/User/spi_FRam.h

128 lines
3.6 KiB
C
Raw Normal View History

2025-04-03 15:59:48 +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>
// 4118~4129: SFLASH<53><48>FRAMһ<4D><D2BB><EFBFBD>Ա<EFBFBD>ʶ<EFBFBD><CAB6>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52>ȣ<EFBFBD>
// 4130~4141: <20><><EFBFBD><EFBFBD>
// 4142~4153: SLFASH<53><48><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>ݼ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52><43>)<29><><EFBFBD><EFBFBD>ΪҪƵ<D2AA><C6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 4154~4165: SLFASH<53><48><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52><43>)<29><><EFBFBD><EFBFBD>ΪҪƵ<D2AA><C6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 4166~4171: <20><><EFBFBD>޵<EFBFBD><DEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52>ȣ<EFBFBD>
// 4172~12363: <20><><EFBFBD>޵<EFBFBD><DEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>512<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪҪƵ<D2AA><C6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>512x16=8K<38><4B>
// 12364~12369: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52>ȣ<EFBFBD>
// 12370~24657: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>512<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪҪƵ<D2AA><C6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>512x24=12K<32><4B>/
// 24658~24679: <20><><EFBFBD><EFBFBD>һ<EFBFBD>ζ<EFBFBD>λ<EFBFBD><CEBB>GPS<50><53>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>CRC<52>ȣ<EFBFBD>
// 24680~32767: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8088<38>ֽڣ<D6BD>
// <20><EFBFBD><E6B4A2>ʼ<EFBFBD><CABC>ַ
#define FRAM_UPGRADE_INFO_BASE 0
#define FRAM_UPGRADE_DATA_BASE 22
#define FRAM_SFLASH_VALID_INFO_BASE 4118
#define FRAM_DATA_INFO_BASE 4142
#define FRAM_TRAN_INFO_BASE 4154
#define FRAM_BOTTLE_INFO_BASE 4166
#define FRAM_BOTTLE_DATA_BASE 4172
#define FRAM_BOX_INFO_BASE 12364
#define FRAM_BOX_DATA_BASE 12370
#define FRAM_GPS_INFO_BASE 24658
#define FRAM_BOTTLE_COUNT 512
#define FRAM_BOX_COUNT 512
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>: 32K bytes
#define FRAM_SIZE 32768ul
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <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);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#pragma anon_unions
#pragma pack(push, 1)
typedef struct
{
uint16_t check; // <20><>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0x55AA
volatile int32_t rdPtr;
volatile int32_t wtPtr;
uint16_t crc; // У<><D0A3>λ
} loopbuff_info_t;
typedef struct
{
loopbuff_info_t info;
uint16_t itemSize;
int32_t maxItemCount;
uint32_t info_base;
union
{
uint32_t data_base;
uint8_t *data;
};
} loopbuff_t;
// <20><>FRAM<41><4D>SFLASH<53><48>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SFlash<73>Ķ<EFBFBD>Ӧ<EFBFBD><D3A6>ϵ<EFBFBD><CFB5>
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B5BD><EFBFBD>߼<EFBFBD>¼<EFBFBD><C2BC>һ<EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>¼<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>SFlash<73>д洢<D0B4>ļ<EFBFBD>¼<EFBFBD><C2BC>Ч<EFBFBD><D0A7>
typedef struct
{
uint16_t check; // <20><>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0x55AA
uint32_t relative_time; // <20><>ȡ<EFBFBD><C8A1>ϵͳʱ<CDB3><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint32_t offset_seconds; // <20><>ȡ<EFBFBD><C8A1>ϵͳʱ<CDB3><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ƫ<EFBFBD><C6AB>
uint16_t crc; // У<><D0A3>λ
} fram_sflash_valid_t;
#pragma pack(pop)
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
void LoopBuff_Create(loopbuff_t *lpbuf, uint16_t itemSize, int32_t maxItemCount, uint32_t info_base, uint32_t data_base);
void LoopBuff_Clear(loopbuff_t *lpbuf);
uint32_t LoopBuff_GetCount(loopbuff_t *lpbuf);
uint32_t LoopBuff_GetNextPtr(loopbuff_t *lpbuf, uint32_t ptr);
void LoopBuff_PutItem(loopbuff_t *lpbuf, uint8_t *item);
void LoopBuff_RemoveItems(loopbuff_t *lpbuf, uint32_t count);
uint32_t LoopBuff_GetDataPos(loopbuff_t *lpbuf, uint32_t ptr);
uint8_t *LoopBuff_GetDataPtr(loopbuff_t *lpbuf, uint32_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