Files
CHJ/user/Device/MB85RS16.c

158 lines
3.5 KiB
C
Raw Permalink Normal View History

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
/****************************************************************************/