M25P16中文版
转载: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中文版的更多相关文章
- 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- 2DToolkit官方文档中文版打地鼠教程(一):初始设置
这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...
- Python 资源大全中文版
Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...
- Tensorflow 官方版教程中文版
2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译.一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该 ...
- JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)
JavaScript资源大全中文版(Awesome最新版) 目录 前端MVC 框架和库 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 基于 Node 的 CMS 框 ...
- DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)
前言: 距离上一个版本V3.3版本的文章发布,已经是1年10个月前的事了. 其实版本一直在更新,但也没什么大的功能更新,总体比较稳定,所以也不怎么写文介绍了. 至于工作上的事,之前有半年时间跑去学英语 ...
- 数据库SQL Service 2014中文版的安装和配置教程
一.我的电脑环境 1.windows8.1(64位) 2.之前电脑没有安装数据库的软件 二.装机之前准备(我这儿提供百度云保存和下载) 1.下载一个“Sql service 2014中文版” http ...
- Effective C#中文版
我看的书是<Effective C#中文版——改善C#程序的50种方法>,Bill Wagner著,李建忠译.书比较老了,04年写的,主要针对C#1.0,但我相信其中的观点现在仍有价值.( ...
随机推荐
- 汉诺塔III
题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动 ...
- iptables-save命令
[root@localhost ~]# iptables-save -t filter > iptables.bak [root@localhost ~]# cat iptables.bak # ...
- html 使表格随着内容自动适应宽度
所谓难而不会,会儿不难.这个问题让我纠结了很长时间,一句css解决了,仅仅靠一个属性 td { white-space: nowrap; } from:http://blog.csdn.net/liu ...
- neutron基础一(网络基本命令)基本命令,包括veth peer
ip addr ip link tcpdump -i veth1 -e -v route -n ip route arp ethtool -S veth0 ip link add type veth ...
- 使用Axure做验证码之校验验证码(二)
本次作业,输入验证码,并校验验证码是否正确.上篇文章,介绍了如何获取验证码,本次作业在上次作业的基础上,做进一步的深究. 1.在上次作业中,增加新的元件: 文本框,命名:输入验证码: 增加热区,命名为 ...
- Beta发布用户使用报告
用户数量:13人 姓名如下(包括化名):张小斌.王瑞瑞.蛋蛋.小美.晨曦.小丽.张利刚.小闫.小谢.小崔.小欢欢.小胡胡.小霞霞 寻找的用户多为王者荣耀交流协会成员的同学,对PSP Daily软件有极 ...
- 配置两个Hadoop集群Kerberos认证跨域互信
两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Hadoop集群B的服务(实质上是使用Kerberos Re ...
- 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的. 这道题有很多烟雾弹: 首先如果有多对,最前面的两个数就是乘积最小的, ...
- Debug程序的使用
一.什么是Debug程序: Debug是DOS, Windows(但是Win7 64位没有,8 10不清楚.)都提供的实模式程序的调试工具, 使用它,可以查看CPU各种寄存器中的内容,内存的情况和在机 ...
- java效验只能为数字类型
首先要import java.util.regex.Pattern 和 java.util.regex.Matcher /** * 利用正则表达式判断字符串是否是数字 * @param str * @ ...