// 1)本程序为铁电FM250V02驱动程序.
// 2)FM25V02为256KBit,即32KByte.
// 3)此程序也可用适用于FM25V05(64K x 8 bits),FM25V10(128K x 8 bits), FM25H20(256K x 8 bits)等.需要部分修改.
#include "pbdata.h"
#define FM_Speed 1 //读写速度
// FM25H20 Control Command
#define WREN 0x06 // Set Write Enable Latch
#define WRDI 0x04 // Write Disable
#define RDSR 0x05 // Read Status Register
#define WRSR 0x01 // Write Status Register
#define READ 0x03 // Read Memory Data.
#define FSTRD 0x0B // Fast Read Memory Data.
#define WRITE 0x02 // Write Memory Data
#define SLEEP 0xB9 // Enter Sleep Mode.
#define RDID 0x9F // Read Device ID.
#define SNR 0xC3 // Read S/N.
//Fmemory初始化
void Fmemory_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9; //PB6,PA7,PA9推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB 6,7,9
GPIO_SetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9); //PB6,PB7,PB9输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PB8 上拉输入
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设置成浮空输入
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB 8
Ini_Fm();
}
/*
********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时
** input parameters: uiDly延时控制值,值越大,延时越长
** output parameters: 无
** Returned value: 无
********************************************************************************************************
*/
static void Delay(uint32_t uiDly)
{
uint32_t i;
for( ; uiDly > 0; uiDly--){
for(i = 0; i < 10; i++);
}
}
//static void FM_Spi_Write( uint8_t pdat)
//{
// uint8_t i;
// Fmemory_Sck = 0;
//// delay_us(FM_Speed);
// for(i = 0; i < 8; i++)
// {
// if(pdat > 127)
// Fmemory_Sci = 1;
// else
// Fmemory_Sci = 0;
// pdat = pdat << 1;
//// delay_us(FM_Speed);
// Fmemory_Sck = 1;
//// delay_us(FM_Speed);
// Fmemory_Sck = 0;
//// delay_us(FM_Speed);
// }
//}
static void FM_Spi_Write( uint8_t pdat)
{
uint8_t i;//, wbyte;
// wbyte = pdat;
for(i = 0; i < 8; i++)
{
Fmemory_Sck = 0;
// Delay(FM_Speed);
if(pdat > 127)
Fmemory_Sci = 1;
else
Fmemory_Sci = 0;
pdat = pdat << 1;
// Delay(FM_Speed);
Fmemory_Sck = 1;
// Delay(FM_Speed);
Fmemory_Sck = 0;
}
}
//static uint8_t FM_Spi_Read(void)
//{
// uint8_t i;
// uint8_t rdat = 0;
//
// Fmemory_Sck = 0;
// for(i = 0; i < 8; i++)
// {
// rdat = (rdat << 1);
// rdat = rdat | Fmemory_Sdo;
//// delay_us(FM_Speed);
// Fmemory_Sck = 1;
//// delay_us(FM_Speed);
// Fmemory_Sck = 0;
//// delay_us(FM_Speed);
// }
// Fmemory_Cs = 1;
// return rdat;
//}
static uint8_t FM_Spi_Read(void)
{
uint8_t i;
uint8_t rdat = 0;
for(i = 0; i < 8; i++)
{
Fmemory_Sck = 1;
// Delay(FM_Speed);
rdat <<= 1;
rdat = rdat | Fmemory_Sdo;
// Delay(FM_Speed);
Fmemory_Sck = 0;
}
return rdat;
}
/*
********************************************************************************************************
** Function name: FM25V02_WREN()
** Descriptions: F25V02写允许命令
** input parameters: 无
** output parameters: 无
** Returned value: 无
********************************************************************************************************
*/
static void FM25V02_WREN(void)
{
Fmemory_Cs = 0;
FM_Spi_Write(WREN);
Delay(FM_Speed);
Fmemory_Cs = 1;
}
/*
********************************************************************************************************
** Function name: FM25V02_WRDI()
** Descriptions: F25V02写禁止命令
** input parameters: 无
** output parameters: 无
** Returned value: 无
********************************************************************************************************
*/
static void FM25V02_WRDI(void)
{
Fmemory_Cs = 0;
FM_Spi_Write(WRDI);
Delay(FM_Speed);
Fmemory_Cs = 1;
}
/*
********************************************************************************************************
** Function name: FM25V02_WRSR()
** Descriptions: F25V02寄存器配置
** input parameters: 寄存器配置内容(uint8_t)
** output parameters: 无
** Returned value: 无
********************************************************************************************************
*/
void FM25V02_WRSR(uint8_t Reg_Status)
{
FM25V02_WREN();
Delay(FM_Speed);
Fmemory_Cs = 0;
FM_Spi_Write(WRSR);
FM_Spi_Write(Reg_Status);
Delay(FM_Speed);
Fmemory_Cs = 1;
}
/*
********************************************************************************************************
** Function name: FM25V02_RDSR()
** Descriptions: F25V02寄存器配置内容读取
** input parameters: 无
** output parameters: 无
** Returned value: 寄存器配置值
********************************************************************************************************
*/
uint8_t FM25V02_RDSR(void)
{
uint8_t Reg_Status;
Fmemory_Cs = 0;
FM_Spi_Write(RDSR);
Reg_Status = FM_Spi_Read();
Delay(FM_Speed);
Fmemory_Cs = 1;
return(Reg_Status);
}
/*
********************************************************************************************************
** Function name: FM25V02_PWDN()
** Descriptions: F25V02进入睡眠模式
** input parameters: 无
** output parameters: 无
** Returned value: 无
********************************************************************************************************
*/
void FM25V02_PWDN(void)
{
Fmemory_Cs = 0;
FM_Spi_Write(SLEEP);
Delay(2);
Fmemory_Cs = 1;
}
/*
********************************************************************************************************
** Function name: FM25V02_WKUP()
** Descriptions: F25V02进入睡眠模式
** input parameters: 无
** output parameters: 无
** Returned value: 无
********************************************************************************************************
*/
void FM25V02_WKUP(void)
{
Fmemory_Cs = 1;
Fmemory_Cs = 0;
Delay(4); /* wait for a while */
Fmemory_Cs = 1;
}
///*
//********************************************************************************************************
//** Function name: FM25V02_WRITE()
//** Descriptions: 对F25V02内固定地址写入一个字节内容
//** input parameters: 写入地址18位,用三字节表示其中高6位无效;写入的数据
//** output parameters: 无
//** Returned value: 无
//********************************************************************************************************
//*/
//void FM25V02_WRITE(uint32_t WAddr, uint8_t *pBuf, uint32_t num)
//{
// uint8_t WAddrL, WAddrM, WAddrH;
// // FM25V02 ADDR: 0x000000 ~ 0x007FFF.
// // FM25V05 ADDR: 0x000000 ~ 0x00FFFF.
// // FM25V10 ADDR: 0x000000 ~ 0x01FFFF.
// // FM25H10 ADDR: 0x000000 ~ 0x03FFFF.
// WAddrL = WAddr & 0x000000FF;
// WAddrM = ((WAddr >> 8) & 0x0000007F);
// WAddrH = ((WAddr >> 16) & 0x00000000); /* 18 bit effective addr */
// FM25V02_WRSR(0x40); //取消写保护
//
// FM25V02_WREN();
// Delay(FM_Speed);
//// tmp = FM25V02_RDSR();
//// Delay(FM_Speed);
// Fmemory_Cs = 0;
// FM_Spi_Write(WRITE);
// FM_Spi_Write(WAddrH);
// FM_Spi_Write(WAddrM);
// FM_Spi_Write(WAddrL);
// for (; num > 0; num--) {
// FM
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
FM25V02.zip (2个子文件)
FM25V02.h 1KB
FM25V02.c 14KB
共 2 条
- 1
gh_huang2012
- 粉丝: 1
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0