串行闪存M25P10与AVR单片机的接口技术

来源:本站
导读:目前正在解读《串行闪存M25P10与AVR单片机的接口技术》的相关信息,《串行闪存M25P10与AVR单片机的接口技术》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《串行闪存M25P10与AVR单片机的接口技术》的详细说明。
简介: M25PXX系列串行闪存是ST公司推出的系列存储器产品,具有体积小、规格全、容量大、功耗低和硬件接口简单的特点,非常容易与各种单片机构成存储系统。本文重点介绍此类存储器与单片机的接口,并结合AVR单片机,给出实际电路和软件驱动函数。

1概述

SO8N封装的高速串行闪存M25PXX系列尺寸紧凑,成本低廉,适合各种对成本有较高要求的计算机及消费电子产品的代码存储应用,如打印机、光驱、无线局域网(WLAN)模块以及机顶盒(STB)。

M25PXX系列串行闪存容量为512 Kb~128 Mb可选择,具有先进的写保护机制,支持速度高达50 MHz的SPI兼容总线的存取操作。这一系列闪存IC的工作电压范围为2.7~3.6 V,工作温度范围为-40℃~+85℃。软件功能包括整体擦除和扇区擦除、灵活的页编程指令和写保护,JEDEC标准2字节电子签名简化了设备身份验证,同时向后兼容1字节电子签名。数据保存期限为20年,每个扇区可承受100 000次擦写循环。

2芯片简介

2.1引脚排列和功能

M25P10单片容量为1 Mb,其引脚排列如图1所示,引脚功能如表1所列。

串行闪存M25P10与AVR单片机的接口技术

图1M25P10引脚图

表1M25P10引脚功能

串行闪存M25P10与AVR单片机的接口技术

2.2芯片的内部逻辑结构

如图2所示,M25P10的内部逻辑结构由5部分组成: 控制逻辑、I/O移位寄存器、地址寄存器和地址计数器、数据缓存寄存器、存储器页阵列。其中,存储器页阵列每页128字节,共1 024页。

串行闪存M25P10与AVR单片机的接口技术

图2M25P10内部逻辑结构图

3存储器的读写接口与操作命令

3.1SPI接口

M25P10与MCU之间采用增强型4线SPI接口,在一个系统中允许多片以复用总线方式连接,连接示意图如图3所示。

串行闪存M25P10与AVR单片机的接口技术

图3M25P10与MCU的SPI接口图

3.2存储器操作命令及其格式

M25P10支持的操作指令共有10条(如表2所列),所有命令都是8位。部分命令需要3字节地址和至少1字节数据,详见表2。

表2M25P10的存储命令

串行闪存M25P10与AVR单片机的接口技术

操作步骤如图4所示。首先选中芯片(即片选信号拉低),然后串行输入命令字节(1字节)和地址字节(0或3字节),接着串行输入或输出数据字节,最后把片选信号拉高,M25P10启动内部控制逻辑,自行完成相应的操作。

串行闪存M25P10与AVR单片机的接口技术

图4存储命令操作步骤

4M25P10与AVR单片机的接口设计

4.1电路图

AVR单片机是基于RISC指令集的单片机,接口丰富,带有功能完善的SPI接口。这里以ATmega88驱动M25P10为例,接口电路图如图5所示。单片机ATmega88 SPI接口引脚SCK、MISO、MOSI分别接M25P10的引脚C、Q、D,另外单片机还需要一个引脚提供片选信号。

串行闪存M25P10与AVR单片机的接口技术

图5M25P10与ATmega88接口电路图

4.2驱动程序设计

M25P10驱动程序包括:SPI初始化,数据读取,数据写入,扇区擦除,整体擦除,掉电休眠,掉电唤醒等函数。这里使用标准C编程,编译器选择AVR GCC。

AVR单片机具有非常完善的SPI接口,由控制寄存器SPCR和状态寄存器SPSR控制。其结构分别如下:

串行闪存M25P10与AVR单片机的接口技术

这里将SPI配置为主机模式,时钟倍速,SPI初始化与读写函数代码如下:

void spi_init(void){//SPI初始化

/*设置引脚MOSI、SCK、SS为输出,其他为输入*/

DDRB = _BV(PB5) |_BV(PB3) |_BV(PB2);

SPSR = _BV(SP2X);//SPI时钟倍速为fosc/2,fosc为

//CPU时钟

/* SPI使能,配置成主机传送模式,时钟上升沿有效,时钟不分频 */

SPCR = _BV(SPE) |_BV(MSTR);

}

void write_spi(uint8_t dat) {//通过SPI写1字节数据

SPDR = dat;

while(!(SPSR & (1<<SPIF)));//这里采用查询方式

}

uint8_t read_spi() {//通过SPI读回1字节数据

SPDR = 0;

while(!(SPSR & (1<<SPIF)));//这里采用查询方式

return SPDR;

}

M25P10状态寄存器由SRWD、BP[1∶0]、WEL、WIP等位构成,SRWD与引脚一起,实现写保护;BP[1∶0]用来设置分块操作;WEL (Write Enable Latch)=1表示写允许,否则禁止写操作;WIP(WriteInProcess)=1表示写操作正在进行中,否则写操作结束。一般在启动新的读写数据操作前,通过读状态寄存器检测写操作是否正在进行;如果前次写操作正在进行中,则不允许新的读写操作发生。忙检测函数代码如下:

void check_busy(void) {//忙检测

CLR_SS();//片选拉低

write_spi(RDSR);//定义RDSR=0x05,发出读状态

//寄存器命令

while((read_spi() & 0x01))//读状态寄存器,直到WIP=0

if(time_out()) break;//超时退出

SET_SS();//片选拉高

}

其中CLR_SS()和SET_SS()为宏定义,分别使片选引脚电平拉低和拉高。

其他读写、擦除函数等略——编者注。

M25P10将1 Mb(即131 072字节)分成4个扇区(Sector),地址范围如表3所列。

数据擦除有两种方式: 扇区擦除和整体擦除。其中,扇区地址由地址位16、15确定。执行数据擦除函数将会使内部所有数据变为FFH。

以上代码都通过实际运行测试。实践证明,M25P10性能可靠,是一款高性价比的串行闪存。

表3存储空间分块地址范围

串行闪存M25P10与AVR单片机的接口技术

结语

笔者前不久在设计一款温度测量记录仪时选择了M25P10作为存储器,并参考英文数据手册,编写了测试程序。发现命令简单,容易上手,性能完全满足设计要求。现在总结出来,希望有一定的参考价值。

提醒:《串行闪存M25P10与AVR单片机的接口技术》最后刷新时间 2024-03-14 00:56:58,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《串行闪存M25P10与AVR单片机的接口技术》该内容的真实性请自行鉴别。