痞子衡嵌入式:通用NOR接口标准(CFI-JESD68)及SLC Parallel NOR简介
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是CFI标准及SLC Parallel NOR。
NOR Flash是嵌入式世界里最常见的存储器,常常内嵌在微控制器里(Parallel型)或外置作为内存扩展(Serial型),作为代码存储器。对于嵌入式开发而言,NOR主要分为两大类:Serial NOR、Parallel NOR,最早出现的NOR是Parallel NOR,后来为了简化引脚数,逐渐发展出了Serial NOR,目前的格局是Serial NOR主要占据低容量NOR市场(128Mb以下),而Parallel NOR主要占据高容量NOR市场(128Mb以上),生产Parallel NOR的厂商有很多,但无论是哪个厂商的Parallel NOR基本上都兼容CFI接口标准,这给软件驱动开发带来了便利。
一、CFI-JESD68标准由来
关于NOR Flash发展史,我们知道早在1988年Intel便发表了NOR Flash结构,从此改变了由EPROM/EEPROM一统天下的局面。早期的NOR产品主要是Parallel NOR,作为半导体行业领导大厂,为了使NOR产品发展标准化,Intel于1996年制定了CFI 1.0标准(1.0版本属于draft版本,正式版本是1997年发布的1.1),CFI标准的存在是为了让Host能够从NOR Flash device中直接获取制造商ID、设备ID、Flash大小以及各种物理特性,从而使得NOR Flash产品在前后兼容性上表现更好,软件驱动设计也更加标准化。
鉴于CFI已慢慢发展成为NOR Flash事实上的接口标准,JEDEC组织于1999年9月正式将CFI标准命名为JESD68,下表是CFI-JESD68标准制定的时间关系:
时间 | NOR标准 | 制定者 |
---|---|---|
1996.07 | CFI 1.0 | Intel |
1997.05 | CFI 1.1 | Intel |
1999.09 | JESD68 | JEDEC |
2001.12 | CFI 2.0 | AMD |
2003.09 | JESD68.01 | JEDEC |
Note: CFI-JESD68标准原则上是为Parallel NOR制定的,但是部分Serial NOR也支持这一标准。
二、SLC Parallel NOR原理
2.1 Parallel NOR分类
从软件驱动开发角度而言,Parallel NOR可以从以下几个方面进一步细分:
单元层数(bit/cell):SLC(1bit/cell) / MLC(2bit/cell)
地址模式: ADP / ADM / AADM
数据线宽度:x8 / x16
信号线模式:Asynchronous / Synchronous
数据采集模式:SDR / DDR
接口标准:CFI
本文的主要研究对象是兼容CFI 2.0 (JESD68.01)标准的Asynchronous SDR SLC Parallel NOR Flash。
2.2 Parallel NOR内存模型
NOR内存单元从大到小一般分为如下5层:Device、Block、Sector、Page、Byte,其中Byte、Page和Sector是必有的,因为Byte是读取的最小单元(即可以任意地址随机访问),Page是编程的最小单元,Sector是擦除的最小单元,而Block则不是必有的(如没有,可认为Block=1)。
Note: 关于Block有一点需要特别说明,即NOR的RWW(Read While Write)特性,我们知道NOR是可以存储代码直接原地执行XIP的,如果在某个Block里执行代码(即CPU从NOR中读取指令数据)的同时去擦除或编程这块Block会发生什么情况呢?有些NOR是支持这种RWW操作的,但也有的NOR不支持RWW(此时会产生hardfault/lockup),Block的存在是为了规避RWW问题,RWW问题的作用范围是Block,如果某Block中执行代码擦除/编程的是另一块Block,则完全不用担忧RWW问题。
2.3 Parallel NOR信号与封装
CFI手册里并没有明确规定Parallel NOR信号线与封装,但业界有默认的标准,从信号线角度来说NOR和SRAM基本是一样的,如下是典型的Parallel NOR内部结构图,除了内存单元外,还有三大组成,分别是控制单元、地址译码单元和输出缓冲单元,信号线主要挂在这三大组成上,关于各信号线具体作用,请查阅相关文档。
NOR芯片根据Flash size大小不同封装也不尽相同,以经典的128Mb容量的ADP NOR芯片为例,其封装一般有三种TSOP-56, TFBGA-56, LFBGA-64,下图是TSOP-56封装信号分布:
2.4 Parallel NOR接口命令
CFI手册里也没有明确规定Parallel NOR接口命令,同样地业界还是有默认的标准,如下是从Micron MT28EW系列手册里截取的部分基本命令,包括Reset、Read、Read CFI、Program(Word program)、Buffer Program、Block(Sector) Erase,涵盖读写擦最基本的三种操作,这些基本命令在主流厂商的NOR产品里都被支持。此外,NOR还支持更多高级命令(Blank Check、security/protect相关,lower power相关等),那些命令因Device而异,不是本文讨论重点。
除了读写擦这三个最基本命令外,还有一个Data Polling机制也非常常用,这个机制用于获取命令(主要是Program/Erase)执行状态与结果,当Program/Erase命令发给NOR device之后,NOR device是通过DQ[7:0]引脚来返回命令执行状态的,各bit意义如下图所示,简单来说DQ3(Erase timer bit)表明操作的开始,DQ5(Error bit)表明操作过程中是否发生硬件错误,DQ6(Toggle bit)表明操作是否结束。
下图为Toggle bit检测的流程图,这个检测流程是最常用的,主要用于确认Program/Erase操作是否成功地执行了。
此外,还有一个必有命令不得不提,这个命令是Read CFI,用于获取芯片内部存储的出厂信息(包括内存结构、特性、其他行为参数等),这个query table最多由五部分组成,其结构已由CFI规定如下表,痞子衡已经圈出了一些重要信息,在设计NOR软件驱动时,可以通过获取这个query table来做到代码通用。
2.5 Parallel NOR数据速率
数据存取速率是个重要的技术指标,对于这个指标,CFI手册里并没有定义,所以需要根据NOR Flash手册里的AC characteristics表来确定。以异步模式Read命令为例讲解(以Micron生产的型号为MT28EW128ABA为例),下面是Read的两种模式Random Read和Page Read完整时序简图:
从上述时序图,我们可以知道Page Read平均数据率肯定是比Random Read要高的,那么这两种数据率分别能达到多少呢?可继续参看如下时序参数表,tRC最小为70ns,那么Random Read数据率最大为2Bytes/70ns = 228.571Mbps,而tPAGE最大为20ns,那么Page Read的数据率最小为2Bytes / 20ns = 800Mbps。(注:均以x16 Device为例)
如果想快捷地了解NOR Flash的性能,最简单的就是打开NOR Flash手册,看首页的feature介绍,如下是MT28EW128ABA的简要feature:
• Single-level cell (SLC) process technology
• Density: 128Mb
• Supply voltage
– VCC = 2.7–3.6V (program, erase, read)
– VCCQ = 1.65 - VCC (I/O buffers)
• Asynchronous random/page read
– Page size: 16 words or 32 bytes
– Page access: 20ns
– Random access: 70ns (VCC = VCCQ = 2.7-3.6V)
– Random access: 75ns (VCCQ = 1.65-VCC)
• Buffer program (512-word program buffer)
– 2.0 MB/s (TYP) when using full buffer program
– 2.5 MB/s (TYP) when using accelerated buffer program (VHH)
• Word/Byte program: 25us per word (TYP)
• Block erase (128KB): 0.2s (TYP)
• Memory organization
– Uniform blocks: 128KB or 64KW each
– x8/x16 data bus
• CFI (Common Flash Interface) support
三、SLC Parallel NOR产品
最后痞子衡收集了可以售卖SLC Parallel NOR芯片的厂商及产品系列:
厂商 | 芯片系列 | 官方网址 |
---|---|---|
Micron | MT28EW, MT28FW | https://www.micron.com parallel-nor-part-catalog |
Macronix | MX68GL MX29LA, MX29GL, MX29GA, MX29LV MX29VS, MX29NS, MX29SL, MX29F |
http://www.macronix.com parallel-nor-part-catalog |
Winbond | W29GL | http://www.winbond.com.tw parallel-nor-part-catalog |
Spansion | S29GL, S29AL, S29AS, S29PL | http://www.cypress.com/ parallel-nor-part-catalog |
ISSI | IS29GL | www.issi.com parallel-nor-part-catalog |
Microchip | SST38VF, SST39VF | https://www.microchip.com parallel-nor-part-catalog |
至此,CFI标准及SLC Parallel NOR痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。
痞子衡嵌入式:通用NOR接口标准(CFI-JESD68)及SLC Parallel NOR简介的更多相关文章
- 痞子衡嵌入式:并行接口NAND标准(ONFI)及SLC Raw NAND简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ONFI标准及SLC Raw NAND. NAND Flash是嵌入式世界里常见的存储器,对于嵌入式开发而言,NAND主要分为两大类:S ...
- 痞子衡嵌入式:串行EEPROM接口事实标准及SPI EEPROM简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是EEPROM接口标准及SPI EEPROM. 痞子衡之前写过一篇文章 <SLC Parallel NOR简介>,介绍过并行N ...
- 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的应用相当广泛,既可用作数据存储也可以用作代码(XiP)存储, ...
- 痞子衡嵌入式:嵌入式里通用微秒(microseconds)计时函数框架设计与实现
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里通用微秒(microseconds)计时函数框架设计与实现. 在嵌入式软件开发里,计时可以说是非常基础的功能模块了,其应用也非常 ...
- 痞子衡嵌入式:嵌入式MCU中通用的三重中断控制设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式MCU中通用的三重中断控制设计. 我们知道在 MCU 裸机中程序代码之所以能完成多任务并行实时处理功能,其实主要是靠中断来调度的, ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(9)- 从Parallel NOR启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Parallel NOR启动. 上一篇讲i.MXRT从Raw NAND启动的文章 从Raw NAND启 ...
- 痞子衡嵌入式:ARM Cortex-M调试那些事(1)- 4线协议标准(JTAG)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式调试里的接口标准JTAG. 在结束<ARM Cortex-M文件那些事>系列文章之后,痞子衡休整了一小段时间,但是讲课的 ...
- 痞子衡嵌入式:导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP. i.MXRT系列MCU发布已两年多了,基于i.MXR ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是飞思卡尔i.MX RT系列微控制器相关知识. 飞思卡尔半导体(现恩智浦半导体)于2017年开始推出的i.MX RT系列开启了高性能MC ...
随机推荐
- python爬取网页内容demo
#html文本提取 from bs4 import BeautifulSoup html_sample = '\ <html> \ <body> \ <h1 id = & ...
- springboot增删改查
改https://blog.csdn.net/weixin_42338186/article/details/81561592 添加https://blog.csdn.net/weixin_42338 ...
- Git使用的自我总结
一.Git安装后打开Git bash,第一次使用 1.Git账号信息配置 2.用命令git clone从远程库克隆 会在克隆的项目下有一个隐藏的.git目录,这个目录是Git来跟踪管理版本库的,没事千 ...
- 浅谈C++ STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. C++ 标准模板库的核心包括以 ...
- Spring Cloud 组件 —— feign
feign 作为一个声明式的 Http Client 开源项目.在微服务领域,相比于传统的 apache httpclient 与在 spring 中较为活跃的 RestTemplate 更面向服务化 ...
- Unbuntu 16.04 英文环境安装中文输入法
ubuntu 16.04 使用的是ibus输入系统,没有预装中文输入法,你要自己安装一下.以中文拼音输入法为例:1.sudo apt install ibus-pinyin2.sudo apt ins ...
- Android 实现卡片翻转的动画(翻牌动画)
Android 实现卡片翻转的动画(翻牌动画) 需求描述 点击卡片,卡片翻转过来显示内容. 点击左边的卡片,将卡片翻转显示右边的图片结果. 功能实现 因为要翻转所以使用动画来完成翻转的动画.动画分为两 ...
- #Java学习之路——基础阶段(第三篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- 事件派发dispatchEvent
1.什么是dispatchEvent? dispatch意为"调度"."派遣",event为"事件".所以dispatchEvent即向指定 ...
- [Java]LeetCode690. 员工的重要性 | Employee Importance
You are given a data structure of employee information, which includes the employee's unique id, his ...