Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2675643
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: 嵌入式

2014-08-29 16:35:10

M25P80 的模拟SPI 总线读写程序

MCU:MSP430.

存储器:M25P80(SPI总线)

虽然MSP430本身自带SPI总线模块.但下面的程序并没有用此.而是

用普通I/O模拟总线时序进行操作的.详细代码如下:

在调试时,犯了超级无敌白痴错误.我竟然把FLASHRAM编程写入只

能有1 变0,不能从0 到1,结果在调式的时候不断的向首地址写数,然

后都给变成0,接下来回读数据全0,当时还以为是自己的时序没搞定

呢.无意间换了个地址重写重读,数据正常。/于是乎"天才的"我认为是

首地址已经被我写坏(调试的时候不停的循环写入).接着我象改变的

地址重新写一个新数,读出比较,发现数据还是不对.才想起FLASH

RAM的这个特点,不象E2RAM可以随改随写.FLASH 要先擦除再

写..!切记

/****************************************************************

*****

*公司名称: *

*模块 名: SPI总线FLASHRAM读写模块*

*创建 人: 日期: *

*修改 人: 日期: *

*功能描述: *

*其他说明: *

*版本:VER 1.0

*****************************************************************

*****/

#define M25_CLK_0 P4OUT&=~BIT2 //时钟置0

#define M25_CLK_1 P4OUT|=BIT2 //时钟置1

#define M25_SI_0 P4OUT&=~BIT3 //输入0,上升沿写数据

#define M25_SI_1 P4OUT|=BIT3 //输入1

#define M25_SO (P4IN & 0X80)>>7 //读出数据,下降沿读数

#define M25_CS_0 P5OUT&=~BIT2 //片选有效

#define M25_CS_1 P5OUT|=BIT2 //片选无效

#define M25_WP_0 P4OUT&=~BIT5

#define M25_WP_1 P4OUT|=BIT5

#define M25_HD_0 P4OUT&=~BIT4 //C为低电平

时,HOLD下降沿,HOLD模式

#define M25_HD_1 P4OUT|=BIT4

#define WREN 0X06 //写使能

#define WRDI 0X04 //写禁止

#define RDSR 0X05 //读状态寄存器

#define WRSR 0X01 //写状态寄存器,WEL为0不允许写

#define READ 0X03 //读字节

#define FAST_READ 0X0B //快读指令

#define PP 0X02 //页写指令

#define SE 0XD8 //区域擦除

#define BE 0XC7 //批擦除

#define DP 0XB9 //深度掉电模式

#define RES 0XAB //从深度掉电模式苏醒

#define uchar unsigned char

#define uint unsigned int

/****************************************************************

*****

*

* 函数 名:Delay

* 功能描述: 延时子程序

* 函数说明:

* 调用函数:

* 全局变量:无

* 输入: 无

* 返回: 无

* 设计 者 : 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MDelay(uint ui_temp)

{

uint ui_i;

for(ui_i=ui_temp;ui_i>0;ui_i--)

{

;

}

}

/****************************************************************

*****

*

* 函数 名:M25P80_SPI_Write8

* 功能描述: 基于SPI总线的8位数据写操作

* 函数说明: 实现SPI总线的8位数据写操作,上升沿写数据

* 调用函数:

* 全局变量:无

* 输入: 无

* 返回: 无

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void M25P80_SPI_Write8(uchar temp8)

{

uchar i;

for(i=8;i>0;i--)

{

if( ( temp8 & 0X80 ) == 0x80 )

{

M25_SI_1; //写入1

}

else

{

M25_SI_0; //写入0

}

M25_CLK_0;

MDelay(5);

M25_CLK_1;

temp8<<=1; //左移

}

}

/****************************************************************

*****

*

* 函数 名:MP25_WriteEnable

* 功能描述: 写使能

* 函数说明: PP,SE,BE,WRSR之前必须进行写使能

* 调用函数:M25P80_SPI_Write8

* 全局变量:无

* 输入: 无

* 返回: 无

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_WriteEnable(void)

{

M25_CS_0; //片选

M25P80_SPI_Write8(WREN); //写使能

M25_CS_1; //禁止片选

//

MDelay(10);

}

/****************************************************************

*****

*

* 函数 名:SPI_Write24

* 功能描述: 基于SPI总线的24 位数据写操作

* 函数说明: 实现SPI总线的24 位数据写操作

* 调用函数:

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void M25P80_SPI_Write24(long temp24)

{

uchar i;

for(i=24;i>0;i--)

{

if( ( temp24 & 0X800000 ) == 0x800000 )

{

M25_SI_1; //写入1

}

else

{

M25_SI_0; //写入0

}

M25_CLK_0;

MDelay(5);

M25_CLK_1;

temp24<<=1; //左移

}

}

/****************************************************************

*****

*

* 函数 名:M25P80_Read

* 功能描述基于SPI总线的8位数据读操作

* 函数说明实现SPI总线的8位数据读操作

* 调用函数:

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

uchar M25P80_Read(void)

{

uchar i,tempbit;

uchar tempData8;

M25_CLK_0;

for(i=8;i>0;i--)

{

if(M25_SO == 0X01)

{

tempbit=1; //置1

}

else

{

tempbit=0; //置0

}

M25_CLK_1;

MDelay(5);

M25_CLK_0;

tempData8= ( (tempData8<<1) | tempbit ); //数据读

出操作

}

return (tempData8);

}

/****************************************************************

*****

*

* 函数 名:MP25_ReadReg

* 功能描述读功能寄存器

* 函数说明:

* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

uchar MP25_ReadReg(void)

{

uchar Reg_Temp;

M25_CS_0; //片选

M25P80_SPI_Write8(RDSR); //写指令

Reg_Temp=M25P80_Read(); //数据读出

M25_CS_1; //禁止片选

MDelay(10);

return(Reg_Temp); //返回值

}

/****************************************************************

*****

*

* 函数 名:MP25_Check

* 功能描述: WIP 位检查

* 函数说明: 1,表示写操作未完成,表示写操作完成

* 调用函数:MP25_ReadReg

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_Check(void)

{

while(MP25_ReadReg() & 0X01)

{

;

}

}

/****************************************************************

*****

*

* 函数 名:MP25_WriteDis

* 功能描述写禁止

* 函数说明:

* 调用函数:M25P80_SPI_Write8

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_WriteDis(void)

{

M25_CS_0; //片选

M25P80_SPI_Write8(WRDI); //写禁止

M25_CS_1; //禁止片选

//

MDelay(10);

}

/****************************************************************

*****

*

* 函数 名:MP25_WriteReg

* 功能描述写功能寄存器

* 函数说明:

* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_WriteReg(uchar comm)

{

MP25_WriteEnable(); //写使能

M25_CS_0; //片选

M25P80_SPI_Write8(WRSR); //写指令

M25P80_SPI_Write8(comm); //写数据

M25_CS_1; //禁止片选

MP25_Check();

MP25_WriteDis(); //写禁止

}

/****************************************************************

*****

*

* 函数 名:M25P80_SPI_Read

* 功能描述M25P80的指定地址读出一字节数

* 函数说明:

* 调用函数:M25P80_Read

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

uchar M25P80_SPI_Read(long ADDR)

{

uchar Data_Temp;

M25_CS_0; //片选

M25P80_SPI_Write8(READ); //写指令

M25P80_SPI_Write24(ADDR); //写地址

Data_Temp = M25P80_Read(); //数据读出操作

M25_CS_1; //禁止片选

MDelay(10);

return (Data_Temp);

}

/****************************************************************

*****

*

* 函数 名:MP25_Write_Byte

* 功能描述存储单字节数据

* 函数说明:

* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable

M25PWriteWait

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_Write_Byte(long Addr,uchar data)

{

MP25_WriteEnable(); //写使能

M25_CS_0; //片选

M25P80_SPI_Write8(PP); //页写指令

M25P80_SPI_Write24(Addr); //写指令

M25P80_SPI_Write8(data); //写数据

M25_CS_1; //禁止片选

MDelay(10);

MP25_Check();

MDelay(10);

MP25_WriteDis(); //写禁止

}

/****************************************************************

*****

*

* 函数 名:MP25_Write_nByte

* 功能描述存储多字节子程序

* 函数说明:

* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable

M25PWriteWait

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_Write_nByte(long Addr,uchar *buffer,uchar nByte)

//double 改为uchar

{

uchar i;

MP25_WriteEnable(); //写使能

M25_CS_0; //片选

M25P80_SPI_Write8(PP); //页写指令

M25P80_SPI_Write24(Addr); //写指令

for(i=0 ; i

{

M25P80_SPI_Write8(*(buffer+i)); //写数据

}

M25_CS_1; //禁止片选

MDelay(10);

MP25_Check();

MP25_WriteDis(); //写禁止

}

/****************************************************************

*****

*

* 函数 名:MP25_EraseSector

* 功能描述扇区擦除

* 函数说明:

* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable

M25PWriteWait

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_EraseSector(long Addr)

{

MP25_WriteEnable(); //写使能

M25_CS_0; //片选

M25P80_SPI_Write8(SE); //扇区擦除指令

M25P80_SPI_Write24(Addr); //写指令

M25_CS_1; //禁止片选

MP25_Check();

MP25_WriteDis(); //写禁止

}

/****************************************************************

*****

*

* 函数 名:MP25_EraseBulk

* 功能描述批擦除

* 函数说明:

* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable

M25PWriteWait,MP25_WriteDis

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void MP25_EraseBulk(void)

{

MP25_WriteEnable(); //写使能

M25_CS_0; //片选

M25P80_SPI_Write8(BE); //批擦除指令

M25_CS_1; //禁止片选

MP25_Check(); //等待操作完毕

MP25_WriteDis(); //写禁止

}

/****************************************************************

*****

*

* 函数 名:M25P80_SPI_NRead

* 功能描述M25P80的指定地址读出N个字节

* 函数说明:

* 调用函数:M25P80_Read

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void M25P80_SPI_NRead(long ADDR,uchar *buffer,uchar

nByte)

{

uchar i;

M25_CS_0; //片选

M25P80_SPI_Write8(READ); //写指令

M25P80_SPI_Write24(ADDR); //写地址

//Data_Temp = M25P80_Read(); //数据读出操作

for(i=0 ; i

{

*(buffer+i)=M25P80_Read(); //读取数据

}

M25_CS_1; //禁止片选

MDelay(10);

}

/****************************************************************

*****

*

* 函数 名:M25PWriteStatus

* 功能描述:写状态寄存器

* 函数说明:

* 调用函数:

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void M25PWriteStatus(uchar databyte)

{

MP25_WriteEnable(); // Must enable write

latch first

M25_CS_0; // Set CS_N low

M25P80_SPI_Write8(WRSR);

//MP25_Check();

M25P80_SPI_Write8(databyte);

//MP25_Check();

M25_CS_1; // Set CS_N high

MDelay(10);

MP25_Check();

MP25_WriteDis();

}

/****************************************************************

*****

*

* 函数 名:Init_m25p80

* 功能描述初始化M25P80

* 函数说明:

* 调用函数:

* 全局变量:

* 输入

* 返回

* 设计 者: 日期:

* 修改 者: 日期:

* 版本:VER 1.0

*****************************************************************

******/

void Init_m25p80(void)

{

M25_CS_1;

M25_CLK_0;

M25PWriteStatus(0x00);

}

copyright by 沉思的鱼__




//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
M25P80 的模拟SPI 总线读写程序


MCU:MSP430.

存储器:M25P80(SPI总线)

虽然MSP430本身自带SPI总线模块.但下面的程序并没有用此.而是

用普通I/O模拟总线时序进行操作的.详细代码如下:

在调试时,犯了超级无敌白痴错误.我竟然把FLASHRAM编程写入只

能有1 变0,不能从0 到1,结果在调式的时候不断的向首地址写数,然

后都给变成0,接下来回读数据全0,当时还以为是自己的时序没搞定

呢.无意间换了个地址重写重读,数据正常。/于是乎"天才的"我认为是

首地址已经被我写坏(调试的时候不停的循环写入).接着我象改变的

地址重新写一个新数,读出比较,发现数据还是不对.才想起FLASH

RAM的这个特点,不象E2RAM可以随改随写.FLASH 要先擦除再

写..!切记

/****************************************************************

*****

*公司名称: *

*模块 名: SPI总线FLASHRAM读写模块*

*创建 人: 日期: *

*修改 人: 日期: *

*功能描述: *

*其他说明: *

*版本:VER 1.0

*****************************************************************

*****/

 

 

 

 

#define M25_CLK_0 P4OUT&=~BIT2 //时钟置0

#define M25_CLK_1 P4OUT|=BIT2 //时钟置1

#define M25_SI_0 P4OUT&=~BIT3 //输入0,上升沿写数据

#define M25_SI_1 P4OUT|=BIT3 //输入1

#define M25_SO (P4IN & 0X80)>>7 //读出数据,下降沿读数

#define M25_CS_0 P5OUT&=~BIT2 //片选有效

#define M25_CS_1 P5OUT|=BIT2 //片选无效

#define M25_WP_0 P4OUT&=~BIT5

#define M25_WP_1 P4OUT|=BIT5

 

 

 

 

#define M25_CLK_0 P4OUT&=~BIT2   //时钟置 0

 

#define M25_CLK_1 P4OUT|=BIT2   //时钟置 1

 

#define M25_SI_0 P4OUT&=~BIT3   //输入 0,上升沿写数据

 

#define M25_SI_1 P4OUT|=BIT3   //输入 1

 

#define M25_SO  (P4IN & 0X80)>>7  //读出数据,下降沿读数

 

#define M25_CS_0 P5OUT&=~BIT2   //片选有效

 

#define M25_CS_1 P5OUT|=BIT2   //片选无效

 

#define M25_WP_0 P4OUT&=~BIT5

 

#define M25_WP_1 P4OUT|=BIT5

 

#define M25_HD_0 P4OUT&=~BIT4                     //C 为低电平

 

时,HOLD 下降沿,HOLD 模式

 

#define M25_HD_1 P4OUT|=BIT4   

 

#define WREN  0X06    //写使能

 

#define WRDI  0X04    //写禁止

 

#define RDSR  0X05    //读状态寄存器

 

#define WRSR  0X01    //写状态寄存器,WEL 为 0 不允许写

 

#define READ  0X03    //读字节

 

#define FAST_READ 0X0B    //快读指令


 

 

 

 

#define PP  0X02            //页写指令

 

#define SE  0XD8            //区域擦除

 

#define BE  0XC7            //批擦除

 

#define DP  0XB9            //深度掉电模式

 

#define RES  0XAB            //从深度掉电模式苏醒

 

#define uchar            unsigned char

 

#define uint             unsigned int

 

 

 

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:Delay

 

*   功能描述:   延时子程序

 

*   函数说明:  

 

*   调用函数:

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无

 

*   设  计  者 :                        日期:


 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:


 

*****************************************************************



 

 

 

 

******/

 

void MDelay(uint ui_temp)

 

{

 

     uint ui_i;

 

     for(ui_i=ui_temp;ui_i>0;ui_i--)

 

     {

 

         ;

 

     }

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:M25P80_SPI_Write8

 

*   功能描述:   基于 SPI 总线的 8 位数据写操作

 

*   函数说明:   实现 SPI 总线的 8 位数据写操作,上升沿写数据

 

*   调用函数:

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:



 

 

 

 

*****************************************************************

 

******/

 

void M25P80_SPI_Write8(uchar temp8)

 

{

 

     uchar i;

 

     for(i=8;i>0;i--)

 

     {

 

         if( ( temp8 & 0X80 ) == 0x80 )

 

         {

 

            M25_SI_1;   //写入 1

 

         }

 

         else

 

         {

 

            M25_SI_0;     //写入 0

 

         }

 

         M25_CLK_0;        

 

         MDelay(5);

 

         M25_CLK_1;         

 

         temp8<<=1;   //左移


 

 

 

 

     }

 

}

 

 

 

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_WriteEnable

 

*   功能描述:   写使能

 

*   函数说明: PP,SE,BE,WRSR 之前必须进行写使能

 

*   调用函数:M25P80_SPI_Write8

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void MP25_WriteEnable(void)

 

{



 

 

 

 

     M25_CS_0;    //片选

 

     M25P80_SPI_Write8(WREN);  //写使能

 

     M25_CS_1;    //禁止片选

 

     //

 

     MDelay(10);  

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:SPI_Write24

 

*   功能描述:   基于 SPI 总线的 24 位数据写操作

 

*   函数说明:   实现 SPI 总线的 24 位数据写操作

 

*   调用函数:

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void M25P80_SPI_Write24(long temp24)



 

 

 

 

{

 

     uchar i;

 

     for(i=24;i>0;i--)

 

     {

 

         if( ( temp24 & 0X800000 ) == 0x800000 )

 

         {

 

            M25_SI_1;   //写入 1

 

         }

 

         else

 

         {

 

            M25_SI_0;                     //写入 0

 

         }

 

         M25_CLK_0;

 

         MDelay(5);

 

         M25_CLK_1;

 

         temp24<<=1;                      //左移

 

     }

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:M25P80_Read


 

 

 

 

*   功能描述:   基于 SPI 总线的 8 位数据读操作

 

*   函数说明:   实现 SPI 总线的 8 位数据读操作

 

*   调用函数:

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:


 

 

 

 

日期:


 

日期:


 

*   版  本:VER 1.0

 

*****************************************************************

 

******/

 

uchar M25P80_Read(void)

 

{

 

     uchar i,tempbit;

 

     uchar tempData8;

 

 

 

 

     M25_CLK_0;     

 

 

 

 

     for(i=8;i>0;i--)

 

     {

 

         if(M25_SO == 0X01)

 

         {



 

 

 

 

            tempbit=1;     //置 1

 

         }

 

         else

 

         {

 

            tempbit=0;     //置 0

 

         }

 

         M25_CLK_1;

 

         MDelay(5);

 

         M25_CLK_0;

 

         tempData8= ( (tempData8<<1) | tempbit );         //数据读

 

出操作

 

     }                                 

 

     return (tempData8);

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_ReadReg

 

*   功能描述:   读功能寄存器

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8,MP25_WriteEnable

 

*   全局变量:无


 

 

 

 

*   输  入: 无

 

*   返  回: 无

 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

 

 

 

 

 

 

 

 

 

日期:

 

日期:


 

*****************************************************************

 

******/

 

uchar MP25_ReadReg(void)

 

{

 

     uchar Reg_Temp;

 

     M25_CS_0;      //片选

 

     M25P80_SPI_Write8(RDSR);    //写指令

 

     Reg_Temp=M25P80_Read();    //数据读出

 

     M25_CS_1;      //禁止片选

 

     MDelay(10);

 

     return(Reg_Temp);                                    //返回值

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_Check

 

*   功能描述: WIP 位检查



 

 

 

 

*   函数说明: 1,表示写操作未完成,0 表示写操作完成

 

*   调用函数:MP25_ReadReg

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void MP25_Check(void)

 

{

 

     while(MP25_ReadReg() & 0X01)        

 

     {

 

         ;

 

     }

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_WriteDis

 

*   功能描述:   写禁止



 

 

 

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void MP25_WriteDis(void)

 

{

 

     M25_CS_0;      //片选

 

     M25P80_SPI_Write8(WRDI);    //写禁止

 

     M25_CS_1;      //禁止片选

 

     //

 

     MDelay(10);

 

}

 

 

 

 

/****************************************************************

 

*****   

 

*



 

 

 

 

*   函  数  名:MP25_WriteReg

 

*   功能描述:   写功能寄存器

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8,MP25_WriteEnable

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void MP25_WriteReg(uchar comm)

 

{

 

     MP25_WriteEnable();     //写使能

 

     M25_CS_0;      //片选

 

     M25P80_SPI_Write8(WRSR);    //写指令

 

     M25P80_SPI_Write8(comm);    //写数据

 

     M25_CS_1;      //禁止片选

 

     MP25_Check();

 

     MP25_WriteDis();     //写禁止

 

}



 

 

 

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:M25P80_SPI_Read

 

*   功能描述:   从 M25P80 的指定地址读出一字节数

 

*   函数说明:  

 

*   调用函数:M25P80_Read

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

 

 

 

日期:


 

日期:


 

*****************************************************************

 

******/

 

uchar M25P80_SPI_Read(long ADDR)

 

{

 

     uchar Data_Temp;

 

     M25_CS_0;        //片选

 

     M25P80_SPI_Write8(READ);      //写指令

 

     M25P80_SPI_Write24(ADDR);      //写地址

 

     Data_Temp = M25P80_Read();      //数据读出操作



 

 

 

 

     M25_CS_1;        //禁止片选

 

     MDelay(10);

 

     return (Data_Temp);

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_Write_Byte

 

*   功能描述:   存储单字节数据

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8,MP25_WriteEnable,

 

M25PWriteWait

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void MP25_Write_Byte(long Addr,uchar data)

 

{



 

 

 

 

     MP25_WriteEnable();     //写使能

 

     M25_CS_0;      //片选

 

     M25P80_SPI_Write8(PP);    //页写指令

 

     M25P80_SPI_Write24(Addr);    //写指令

 

     M25P80_SPI_Write8(data);    //写数据

 

     M25_CS_1;      //禁止片选

 

     MDelay(10);

 

     MP25_Check();

 

     MDelay(10);

 

     MP25_WriteDis();     //写禁止

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_Write_nByte

 

*   功能描述:   存储多字节子程序

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8,MP25_WriteEnable,

 

M25PWriteWait

 

*   全局变量:无

 

*   输  入: 无


 

 

 

 

*   返  回: 无

 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

 

 

 

 

 

 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void MP25_Write_nByte(long Addr,uchar *buffer,uchar nByte)

 

//double         改为  uchar

 

{

 

     uchar i;

 

     MP25_WriteEnable();   //写使能

 

     M25_CS_0;    //片选

 

     M25P80_SPI_Write8(PP);  //页写指令

 

     M25P80_SPI_Write24(Addr);  //写指令

 

     for(i=0 ; i

 

     {

 

        M25P80_SPI_Write8(*(buffer+i)); //写数据

 

     }

 

     M25_CS_1;    //禁止片选

 

     MDelay(10);

 

     MP25_Check();



 

 

 

 

     MP25_WriteDis();   //写禁止

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_EraseSector

 

*   功能描述:   扇区擦除

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8,MP25_WriteEnable,

 

M25PWriteWait

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:


 

 

 

 

日期:


 

*****************************************************************

 

******/

 

void MP25_EraseSector(long Addr)

 

{

 

     MP25_WriteEnable();   //写使能

 

     M25_CS_0;    //片选



 

 

 

 

     M25P80_SPI_Write8(SE);  //扇区擦除指令

 

     M25P80_SPI_Write24(Addr);          //写指令

 

     M25_CS_1;    //禁止片选

 

     MP25_Check();

 

     MP25_WriteDis();   //写禁止

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:MP25_EraseBulk

 

*   功能描述:   批擦除

 

*   函数说明:  

 

*   调用函数:M25P80_SPI_Write8,MP25_WriteEnable,

 

M25PWriteWait,MP25_WriteDis

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/



 

 

 

 

void MP25_EraseBulk(void)

 

{

 

     MP25_WriteEnable();   //写使能

 

     M25_CS_0;    //片选

 

     M25P80_SPI_Write8(BE);  //批擦除指令

 

     M25_CS_1;    //禁止片选

 

     MP25_Check();   //等待操作完毕

 

     MP25_WriteDis();   //写禁止

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:M25P80_SPI_NRead

 

*   功能描述:   从 M25P80 的指定地址读出 N 个字节

 

*   函数说明:  

 

*   调用函数:M25P80_Read

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

 

 

 

日期:


 

日期:



 

 

 

 

*****************************************************************

 

******/

 

void M25P80_SPI_NRead(long ADDR,uchar *buffer,uchar

 

nByte) 

 

{

 

 uchar i;

 

 M25_CS_0;     //片选

 

 M25P80_SPI_Write8(READ);   //写指令

 

 M25P80_SPI_Write24(ADDR);   //写地址

 

 //Data_Temp = M25P80_Read();   //数据读出操作

 

 for(i=0 ; i

 

 {

 

      *(buffer+i)=M25P80_Read();   //读取数据

 

 }

 

 M25_CS_1;     //禁止片选

 

 

 

 

         MDelay(10);

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:M25PWriteStatus


 

 

 

 

*   功能描述:写状态寄存器

 

*   函数说明:  

 

*   调用函数:

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无

 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void M25PWriteStatus(uchar databyte)  

 

{

 

     MP25_WriteEnable();                      // Must enable write

 

latch first

 

     M25_CS_0;                                // Set CS_N low

 

     M25P80_SPI_Write8(WRSR);

 

     //MP25_Check();

 

     M25P80_SPI_Write8(databyte);

 

     //MP25_Check();

 

     M25_CS_1;                               // Set CS_N high

 

     MDelay(10);



 

 

 

 

     MP25_Check();

 

     MP25_WriteDis();

 

}

 

/****************************************************************

 

*****   

 

*

 

*   函  数  名:Init_m25p80

 

*   功能描述:   初始化 M25P80

 

*   函数说明:  

 

*   调用函数:

 

*   全局变量:无

 

*   输  入: 无

 

*   返  回: 无


 

*   设  计  者:

 

*   修  改  者:

 

*   版  本:VER 1.0


 

日期:

 

日期:


 

*****************************************************************

 

******/

 

void Init_m25p80(void)

 

{

 

     M25_CS_1;

 

     M25_CLK_0;



 

 

 

 

     M25PWriteStatus(0x00);

 

}

 

 

阅读(1226) | 评论(0) | 转发(0) |
0

上一篇:位反转Demo工程

下一篇:片外FLASH 读取函数

给主人留下些什么吧!~~