2026-03-20 21:16:58 +08:00
|
|
|
#include "../main/SystemInclude.h"
|
|
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
/* File start *****************************************************************/
|
|
|
|
|
#if ENABLE_USE_MB85RS16
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
2026-03-20 21:16:58 +08:00
|
|
|
/******************************************************************************/
|
|
|
|
|
void FRAMInit(void)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
FRAM_WP_OUTPUT();
|
|
|
|
|
FRAM_CS_OUTPUT();
|
|
|
|
|
DisableFRAM();
|
|
|
|
|
DisableFRAMWrite();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void ProtectFRAM(void)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
EnableFRAMWrite();
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
|
|
|
|
|
SPIWriteData(FRAM_WREN);
|
|
|
|
|
SPIWriteData(FRAM_WRSR);
|
|
|
|
|
SPIWriteData(FULL_ARRAY_PROTECTION);
|
|
|
|
|
SPIWriteData(FRAM_WRDI);
|
|
|
|
|
|
|
|
|
|
DisableFRAM();
|
|
|
|
|
DisableFRAMWrite();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void UnProtectFRAM(void)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
EnableFRAMWrite();
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
|
|
|
|
|
SPIWriteData(FRAM_WREN);
|
|
|
|
|
SPIWriteData(FRAM_WRSR);
|
|
|
|
|
SPIWriteData(NO_PROTECTION);
|
|
|
|
|
SPIWriteData(FRAM_WREN);
|
|
|
|
|
|
|
|
|
|
DisableFRAM();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void WriteByteToFRAM(u16 address, u8 data)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
EnableSPI(SPI_MODE3);
|
2026-03-20 21:16:58 +08:00
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
UnProtectFRAM();
|
|
|
|
|
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
SPIWriteData(FRAM_WRITE);
|
|
|
|
|
SPIWriteData(address>>8);
|
|
|
|
|
SPIWriteData(address);
|
|
|
|
|
SPIWriteData(data);
|
|
|
|
|
DisableFRAM();
|
2026-03-20 21:16:58 +08:00
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
ProtectFRAM();
|
|
|
|
|
DisableSPI();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
u8 ReadByteFromFRAM(u16 address)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
u8 data;
|
|
|
|
|
|
|
|
|
|
EnableSPI(SPI_MODE3);
|
|
|
|
|
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
SPIWriteData(FRAM_READ);
|
|
|
|
|
SPIWriteData(address>>8);
|
|
|
|
|
SPIWriteData(address);
|
|
|
|
|
data = SPIReadData();
|
|
|
|
|
DisableFRAM();
|
|
|
|
|
|
|
|
|
|
DisableSPI();
|
|
|
|
|
|
|
|
|
|
return data;
|
2026-03-20 21:16:58 +08:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void WriteMultiByteToFRAM(u16 address, u8 *pointer, u8 length)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
u8 I;
|
|
|
|
|
|
|
|
|
|
EnableSPI(SPI_MODE3);
|
|
|
|
|
delay_ms(1);
|
|
|
|
|
|
|
|
|
|
UnProtectFRAM();
|
|
|
|
|
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
SPIWriteData(FRAM_WRITE);
|
|
|
|
|
SPIWriteData(address>>8);
|
|
|
|
|
SPIWriteData(address);
|
|
|
|
|
for(I=0; I<length; I++)
|
|
|
|
|
{
|
|
|
|
|
SPIWriteData(*pointer);
|
|
|
|
|
pointer++;
|
|
|
|
|
}
|
2026-03-20 21:16:58 +08:00
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
DisableFRAM();
|
2026-03-20 21:16:58 +08:00
|
|
|
|
2026-03-20 21:19:53 +08:00
|
|
|
ProtectFRAM();
|
|
|
|
|
DisableSPI();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void ReadMultiByteFromFRAM(u16 address, u8 *pointer, u8 length)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
u16 I;
|
|
|
|
|
|
|
|
|
|
EnableSPI(SPI_MODE3);
|
|
|
|
|
delay_ms(1);
|
|
|
|
|
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
SPIWriteData(FRAM_READ);
|
|
|
|
|
SPIWriteData(address>>8);
|
|
|
|
|
SPIWriteData(address);
|
|
|
|
|
for(I=0; I<length; I++) *(pointer+I) = SPIReadData();
|
|
|
|
|
DisableFRAM();
|
|
|
|
|
|
|
|
|
|
DisableSPI();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
u8 ReadFRAMDeviceID(void)
|
|
|
|
|
{
|
2026-03-20 21:19:53 +08:00
|
|
|
u8 temp[8];
|
|
|
|
|
|
|
|
|
|
//DisableSPI();
|
|
|
|
|
DisableFRAM();
|
|
|
|
|
EnableSPI(SPI_MODE3);
|
|
|
|
|
delay_10us(100);
|
|
|
|
|
EnableFRAM();
|
|
|
|
|
|
|
|
|
|
SPIWriteData(FRAM_RDID);
|
|
|
|
|
delay_10us(10);
|
|
|
|
|
temp[0] = SPIReadData();
|
|
|
|
|
temp[1] = SPIReadData();
|
|
|
|
|
temp[2] = SPIReadData();
|
|
|
|
|
temp[3] = SPIReadData();
|
|
|
|
|
temp[4] = SPIReadData();
|
|
|
|
|
temp[5] = SPIReadData();
|
|
|
|
|
temp[6] = SPIReadData();
|
|
|
|
|
temp[7] = SPIReadData();
|
|
|
|
|
DisableFRAM();
|
|
|
|
|
// DisableSPI();
|
|
|
|
|
|
|
|
|
|
if(temp[0] != 0x04) return 1;
|
|
|
|
|
if(temp[1] != 0x7f) return 1;
|
2026-03-20 21:16:58 +08:00
|
|
|
return 0;
|
|
|
|
|
}
|
2026-03-20 21:19:53 +08:00
|
|
|
|
|
|
|
|
/* File end *****************************************************************/
|
|
|
|
|
#endif
|
|
|
|
|
/****************************************************************************/
|