optical/NxFuncs/fram/fram.c
2025-09-04 09:45:08 +08:00

75 lines
1.5 KiB
C

#include "fram.h"
#include "inout.h"
//-------------------------------------------------------------------------------
// 读写函数
//----------------------------------------
// 访问命令
#define FRAM_CMD_WREN 0x06 // 设置写保护
#define FRAM_CMD_WRDI 0x04 // 清除写保护
#define FRAM_CMD_RDSR 0x05 // 读状态寄存器
#define FRAM_CMD_WRSR 0x01 // 写状态寄存器
#define FRAM_CMD_READ 0x03 // 读数据
#define FRAM_CMD_WRITE 0x02 // 写数据
//------------------------------------------------------------------------------------------
// 初始化 Fram
void InitFram(void)
{
InitFramSpi();
}
//------------------------------------------------------------------------------------------
// 读数据
int ReadFramData(u16 addr, u8 * pBuf, u16 len)
{
int i;
if (len != 0 && pBuf != NULL)
{
FramNceOn();
FramWriteByte(FRAM_CMD_READ); // 读命令
FramWriteByte(HIBYTE(addr));
FramWriteByte(LOBYTE(addr));
for (i = 0; i < len; i++)
{
*pBuf++ = FramReadByte();
}
FramNceOff();
return len;
}
return 0;
}
//------------------------------------------------------------------------------------------
// 写数据
int WriteFramData(u16 addr, u8 * pBuf, u16 len)
{
int i;
if (len != 0 && pBuf != NULL)
{
FramNceOn();
FramWriteByte(FRAM_CMD_WREN); // 清除写保护
FramNceOff();
FramNceOn();
FramWriteByte(FRAM_CMD_WRITE); // 写命令
FramWriteByte(HIBYTE(addr));
FramWriteByte(LOBYTE(addr));
for (i = 0; i < len; i++)
{
FramWriteByte(*pBuf++);
}
FramNceOff();
return len;
}
return 0;
}