128 lines
3.6 KiB
C
128 lines
3.6 KiB
C
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* 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
|