转载:https://blog.csdn.net/weiweiliulu/article/details/23666717

1、M25P16概述

    M25P16是一款带有先进写保护机制和高速SPI总线访问的2M字节串行Flash存储器,该存储器主要特点:2M字节的存储空间,分32个扇区,每个扇区256页,每页256字节;写入1页数据所需时间为1.4 ms(典型值);能单块擦除和整块擦除:2.7~3.6 V单电源供电电压;SPI总线和50 MHz数据传输时钟频率;每扇区擦写次数保证10万次、数据保存期限至少20年。该款器件特别适用于一体化打印机、PC主板、机顶盒、CD唱机和DVD视盘机、数字电视、数码相机、图形卡和平面显示器等各种应用的代码和数据存储需求。

    M25P16采用SO16封装或VDFPN8封装,其引脚排列图如图1与图2所示。其部分主要引脚功能描述如下:

    引脚Q:输出串行数据。

    引脚D:输入串行数据。

    引脚C:串行时钟信号输入。

    引脚S:片选,该引脚低电平有效。若为高电平,串行数据输出(Q)为高阻抗状态。

    引脚HOLD:控制端,暂停串行通信。在HOLD状态下,串行数据输出(Q)为高阻抗,时钟输入(C)和数据输入(D)无效。

    引脚W:写保护端,能够限制写指令和擦除指令的操作区域,低电平有效。

              

                      图1                                                图2

2、单片机SPI接口与M25P16的连接图如图3

          

                                             图3

3、M25P16工作原理

    M25P16写入一个字节数据需写使能(WREN)和写入(PP)指令。采用这两个指令实现单页编程。对于某个单字节空间的操作,在使用PP指令之前需要对其擦除(FFh)。擦除操作可通过单块擦除指令(SE)和整块擦除(BE)来完成。擦除之前需要先执行WREN指令。当片选S信号为低电平,则选中该器件,此时处于有效电源模式;当片选S信号为高电平,器件未被选中,但能在所有内部指令周期(写入,擦除,写状态寄存器)完成前保持有效电源模式。等指令周期完成则进入备用电源模式。通过特殊指令来读取或设置状态寄存器内的状态位和控制位,实现相应操作。

    在该器件所有输入输出的指令、地址和数据中,数据置于首位。当片选信号被拉为低电平,在时钟信号的第一个下降沿开始采样数据输入信号。每个指令序列都是以单字节指令代码开头,紧接着就是地址或数据。在读取数据、快速读取数据、读状态寄存器、读标识和读电子签名时,数据输出序列紧随输入指令序列。当数据输出序列的所有数据位都输出后,片选信号置为高电平。而在页面数据写入、单块擦除、整块擦除、写状态寄存器、写使能和写无效时,片选信号必须在一个字节内置为高电平。否则,指令不执行。也就是说,拉低片选信号后,时钟信号必须是8的整数倍。在写状态寄存器周期、数据写入周期或者擦除周期,则忽略任何对存储空间的访问,并不会对这些周期产生影响。表l为M25P16的指令表。

    

                     表1

(1)写使能(WREN) 写使能指令用于设置内部写使能锁存器位。在页面数据写入、单块擦除、整块擦除和写状态寄存器之前,必须先执行写使能。当片选信号拉低后,就开始执行写使能指令,接着传输指令。指令发送完后,片选信号置为高电平。写使能时序如图4所示。

    

                                  图4

    (2)读标识指令(RDID) 首先需将片选信号拉为低电平,接着写入读标识指令(RDID),然后通过数据输入引脚读入3字节标识码。片选信号置为高电平终止数据读取指令。时序如图5所示:

    

                                                图5

    (3)读状态寄存器(RDSR)几乎在任何时刻都能读取状态寄存器的值,甚至器件处于写入数据、擦除或写状态寄存器周期时。此时建议在传输新指令之前应先检查WIP位。状态寄存器的格式如表2所示。

    

                                    表2

表2中,WIP位能够确定存储空间是否处于写状态寄存器、写入或擦除周期。WIP为“1”时则处于以上几个周期。WEL位能够确定内部写使能锁存器的状态。写入“1”时置位。写入“0”时,写状态寄存器、数据写入和擦除指令都无效。BP2,BPl,BPO位确定软件写保护的区域大小,并且是非易失性的。SRWD位用于在写无效位和写保护引脚工作时可使该器件处于硬件保护模式。此模式下,3个非易失性位变为只读位,并且写状态寄存器指令不会执行。

    (4)读取数据(READ) 首先需将片选信号拉为低电平,接着写读取数据指令和3个字节的地址(A23~A0)。然后通过数据输出引脚(O)输出该地址存储内容。地址的首字节可以是任意值。在输出每个字节数据后,地址自动加1,跳至下一地址。因此,整个存储空间的数据读取可通过一个简单的数据读取指令(READ)完成。当达到最高地址时,地址计数器自动清零。片选信号置为高电平可终止数据读取指令(READ)。数据输出的任何时候,片选信号都置为高电平。该器件处于擦除或数据写入周期时,数据读取指令无效并且对当前周期无任何影响。其页面数据写入指令时序如图6所示。

    

                                             图6

    (5)页面数据写入(PP)执行PP指令之前,必须先执行写使能指令。写使能指令解码后,器件设置为写使能锁存器。片选信号必须拉低,接着是PP指令代码、3字节的地址和数据输入(至少一个字节)。如果地址的低8位(A7~AO)不全是O而写入的数据字节超出当前页的地址,超出部分则从下一页首地址开始写入。在整个数据写入时序中,片选信号必须拉低。如果写入的数据字节数大于256,则先前所锁存的数据被丢弃。将数据正确写入之后便可核对状态寄存器WIP位的值。若为1,则表明处于自定时数据写入周期;若为0,则此周期完成。如果某一页受到块保护(BP2,BPl,BP0位),则不能执行对此页的数据写入操作。按照上述指令操作,能够获得驱动程序的流程图。图7为数据写入(PP)操作的程序流程。

    

                                             图7

    (6)扇区擦除指令(SE) 首先发送写使能指令(WREN),接着发送扇区擦除指令(SE),然后写入需擦除扇区的3字节地址。时序如图8

    

                                 图8

    (7)整块擦除指令(BE) 首先发送写使能指令(WREN),接着发送整块擦除指令(BE),便可将芯片所有数据擦除,所有的字节数据都变为FF。时序

如图9

M25P16中文版的更多相关文章

  1. 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  2. 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  3. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  4. Python 资源大全中文版

    Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...

  5. Tensorflow 官方版教程中文版

    2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译.一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该 ...

  6. JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)

    JavaScript资源大全中文版(Awesome最新版)   目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...

  7. DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

    前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语 ...

  8. 数据库SQL Service 2014中文版的安装和配置教程

    一.我的电脑环境 1.windows8.1(64位) 2.之前电脑没有安装数据库的软件 二.装机之前准备(我这儿提供百度云保存和下载) 1.下载一个“Sql service 2014中文版” http ...

  9. Effective C#中文版

    我看的书是<Effective C#中文版——改善C#程序的50种方法>,Bill Wagner著,李建忠译.书比较老了,04年写的,主要针对C#1.0,但我相信其中的观点现在仍有价值.( ...

随机推荐

  1. Java 实现ftp 文件上传、下载和删除

    本文利用apache ftp工具实现文件的上传下载和删除.具体如下: 1.下载相应的jar包 commons-net-1.4.1.jar 2.实现代码如下: public class FtpUtils ...

  2. 【原创】使用开源libimobiledevice盗取iphone信息

     一.概述     libimobiledevice可以理解为Linux系统下的iTunes,破解了iTunes的通信协议. 依赖:https://github.com/libimobiledevic ...

  3. LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

    今天我来给大家带来一片蒟蒻题解 ~~真香 LGOJ P2921  [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上 ...

  4. win10操作系统 安装nodejs报2503错误解决方法

    报该错误的原因是由于安装操作没有获得足够的管理权限导致. 在电脑左下角开始菜单[右键]选择"命令提示符(管理员)“ 敲入如下命令 msiexec /package 后面加你nodejs的本机 ...

  5. Fedora-Workstation-netinst-x86_64-27-1.6系统之无法使用中文解决办法

    首先我安装的是Fedora-Workstation-netinst-x86_64-27-1.6操作系统: 但是进入系统之后无论如何都无法使用中文,即使已经安装了[汉语]输入法,最后才发现原因是没有安装 ...

  6. DatePickerAndroid用法

    一.代码/** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import ...

  7. "Loading a plug-in failed The plug-in or one of its prerequisite plug-ins may be missing or damaged and may need to be reinstalled"

    The Unarchiver 虽好,但存在问题比我们在mac上zip打包一个软件xcode, 然后copy to another mac, 这时用The Unarchiver解压缩出来的xcode包不 ...

  8. 1个多商户、多平台版 微信小程序(多商户、多平台版),影城行业、影业连锁 多商户、多平台版微信小程序。(基于多平台版,支持在业务上 可给 每个单独影城 分发定制单独的小程序版本)

    1个 影城行业 微信小程序(多商户.多平台版), 影业连锁 多商户.多平台版微信小程序.(基于多平台版,支持在业务上 可给 每个单独影城 分发定制单独的小程序版本) 资讯QQ: 876635409  ...

  9. latex如何定义宏,插图统一尺寸减少工作量

    问题背景是这样的,因为我要在文中插入一系列的图片,但是这些图片的大小我要保持一致,来达到预期的效果. 比如我有三个figure,这三个figure中,每个figure里面有两行,5列图片,我想要的是, ...

  10. Unity中有限状态机的用法教程

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...