Files
CHJ/user/Device/MB85RS16.c
2026-03-20 21:19:53 +08:00

158 lines
3.5 KiB
C

#include "../main/SystemInclude.h"
/* File start *****************************************************************/
#if ENABLE_USE_MB85RS16
/******************************************************************************/
/******************************************************************************/
void FRAMInit(void)
{
FRAM_WP_OUTPUT();
FRAM_CS_OUTPUT();
DisableFRAM();
DisableFRAMWrite();
}
/******************************************************************************/
void ProtectFRAM(void)
{
EnableFRAMWrite();
EnableFRAM();
SPIWriteData(FRAM_WREN);
SPIWriteData(FRAM_WRSR);
SPIWriteData(FULL_ARRAY_PROTECTION);
SPIWriteData(FRAM_WRDI);
DisableFRAM();
DisableFRAMWrite();
}
/******************************************************************************/
void UnProtectFRAM(void)
{
EnableFRAMWrite();
EnableFRAM();
SPIWriteData(FRAM_WREN);
SPIWriteData(FRAM_WRSR);
SPIWriteData(NO_PROTECTION);
SPIWriteData(FRAM_WREN);
DisableFRAM();
}
/******************************************************************************/
void WriteByteToFRAM(u16 address, u8 data)
{
EnableSPI(SPI_MODE3);
UnProtectFRAM();
EnableFRAM();
SPIWriteData(FRAM_WRITE);
SPIWriteData(address>>8);
SPIWriteData(address);
SPIWriteData(data);
DisableFRAM();
ProtectFRAM();
DisableSPI();
}
/******************************************************************************/
u8 ReadByteFromFRAM(u16 address)
{
u8 data;
EnableSPI(SPI_MODE3);
EnableFRAM();
SPIWriteData(FRAM_READ);
SPIWriteData(address>>8);
SPIWriteData(address);
data = SPIReadData();
DisableFRAM();
DisableSPI();
return data;
return 0;
}
/******************************************************************************/
void WriteMultiByteToFRAM(u16 address, u8 *pointer, u8 length)
{
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++;
}
DisableFRAM();
ProtectFRAM();
DisableSPI();
}
/******************************************************************************/
void ReadMultiByteFromFRAM(u16 address, u8 *pointer, u8 length)
{
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();
}
/******************************************************************************/
u8 ReadFRAMDeviceID(void)
{
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;
return 0;
}
/* File end *****************************************************************/
#endif
/****************************************************************************/