nor flash调试与使用总结
最近项目中使用到norflash,总结一下学习与使用经验
文章目录
- 一、Flash基本概念
- 存储器介绍与Flash在其中定位---非易失存储器类别中嵌入式领域常见设备
- Flash的典型分类---NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢写快)
- Flash的基本 存储和 读 写 擦原理---电荷是否超过特定阈值来表示0(低表示1)
- 二、nor flash关键特性理解(以 GD25Q128介绍)
- 基本特性介绍---容量、访问接口、读写速度、擦除性能、写保护
- 【关注点1】flash的 擦除/写 性能远低于读,相差2个量级
- 【关注点2】多线SPI访问特性 与 极限读取性能计算(一定要留有余量)
- 【关注点3】写保护区域设置 与 flash排布设计(只读 和 易变、可变区域 做隔离)
- 【关注点4】3/4字节地址切换问题,为满足超16M的容量空间。
- 三、常见问题与调试方法(待补充)
- 常见开机失败---3/4字节地址切换问题
- 常见读取性能差---中间缓存/时钟偏低
- 常见写数据概率失败---硬件链路设计问题信号干扰
- 常见读取数据概率失败---管脚驱动电流不够
- 参考资料:
一、Flash基本概念
存储器介绍与Flash在其中定位—非易失存储器类别中嵌入式领域常见设备
存储器常见分类类型:
1、易失性存储器:
RAM(Random Access Memory) 随机存取存储器。直接对字节地址进行随机读写,速度快,掉电丢失,用于存储运行数据或代码。包含DRAM(Dynamic Ram需要定时刷新)和SRAM(Static Ram 有电源不需要刷新)两种。
2、非易失存储器:
NVM(non-volatile memory) 断电数据不丢失。常见类型:
1)OTP(One Time Programmable)一次性可编程存储,程序烧入后不可再次更改和清除;
2)EPROM(Erasable Programmable ROM) 可擦除可编程只读存储器,利用高电压写入,曝光于紫外线抹除清空。
3)EEPROM(Eraseable programmable read only memory)电可擦编程只读内存,类似EPROM,抹除方式使用高电场。
4)Flash memory快闪存储器,读写速度和容量上要远远高于E2PROM,价格也便宜的多,嵌入式领域常用存储。
Flash的典型分类—NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢写快)
NOR和NAND是市场上两种主要的非易失闪存技术。NAND一般以存储数据为主,晶片容量大,容量可以达到2Gb甚至更大,读取块形式通常一次512个字节,采用这种技术的Flash比较廉价;NOR一般以存储程序代码为主,又称为Code Flash,采用内存的随机读取技术,可让微处理器直接读取,容量较低。
Flash的基本 存储和 读 写 擦原理—电荷是否超过特定阈值来表示0(低表示1)
1)存储原理:数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。闪存的存储单元为三端器件,源极、漏极和栅极。栅极与硅衬底之间有二氧化硅绝缘层,用来保护浮置栅极中的电荷不会泄漏,使得存储单元具有了电荷保持能力。
2)擦写原理:NAND型闪存的擦和写均是基于隧道效应,电流穿过浮置栅极与硅基层之间的绝缘层,对浮置栅极进行充电(写数据-设置0)或放电(擦除数据-设置1)。NOR型闪存擦除数据仍是基于隧道效应(电流从浮置栅极到硅基层),但在写入数据时则是采用热电子注入方式(电流从浮置栅极到源极)。
3)读取原理:依据有无电荷读取存储的数据,当浮置栅极有电荷时,源极和漏极可以导通,读取到的bit是0;擦除后浮置栅极无电荷,源极和漏极不能导通,读取的bit是1;
二、nor flash关键特性理解(以 GD25Q128介绍)
基本特性介绍—容量、访问接口、读写速度、擦除性能、写保护
容量:存储总量128Mbit(16Mbyte);
擦除性能:支持按4KB sector擦除(400ms) 或者 32KB(1S)/ 64KB(1.2S) block擦除,寿命支持10万次擦写,支持3字节4字节地址模式。
读写性能::访问方式SPI,最大支持4线访问80M时钟读写(数据传输320Mbits/S),支持写保护控制;
【关注点1】flash的 擦除/写 性能远低于读,相差2个量级
flash的读写都是通过时钟CLK配置IO完成,可以通过提升时钟大小,构建多线IO来提高访问速度,如GD25Q128最大支持4线访问80M时钟读写(数据传输320Mbits/S)。但是擦除时不取决于时钟大小,也没有多线的概念, 完全由器件本身性能决定,如按4KB擦除要400ms,最快按64KB单元要1.2S(约0.4Mbits/S)和读取理论数据320Mbits/S相差几百倍。
简单理解一下:
1)读取 是最简单快速的,取值flash只需要做电压值比较确定是0还是1,可以连续读取任意长度字节内容,整个传输瓶颈是在 SPI接口协议用几线 / 时钟频率 大小,举例4线80M。
2)写 相对读复杂一些,分成两部分 先接受SPI传输数据缓存起来,按Page写 如果存储单元不相同就充电把1改到0。整个瓶颈过程是Page写改值过程,如下图每Page 256Byte耗时0.6ms。写的速度相当于 一次读取时间+Page写入等待时间;
3)擦除 耗时是最长的,和器件工艺原理相关,不涉及SPI数据传输因此不受频率限制。如下图,按4KByte单元擦除每个单元需要50ms;
【关注点2】多线SPI访问特性 与 极限读取性能计算(一定要留有余量)
很多flash SPI器件都支持多线访问,即把部分IO作为数据SO或SI来支持多线并行读取。如GD25Q128用4线读取的时候,把SI、SO、WP写保护、HOLD都作为读取IO,可以一次CLK读取4个bit数据。
多线读取和理论值往往有一个损失率,0.5% 甚至可以到 15%(有非常多因素)。我们先算一下理论极限速度。
1)假如SPI时钟为100M = 100x10 ^ 6x4线传输 = 400 * 10 ^ 6 bit / S= 47.68MB / S。
2)再进一步,每次发送一次命令需要先发cmd+addr+Dummy(共20个CLK周期)然后读取,因此一次连续读取nByte(2n个时钟周期)确定了利用率,假如1次读取64个= 47.68MB/S * (2x64 / (2x64+20)) = 41.23MB/S;假如一次读取1M数据就还是47.68MB/S;
3)再进一步,实际测量波形发现大量数据读取过程CLK还是间歇性的,并不是完整连续的。这里引入因素也很多,SPI控制器从flash读取数据fifo是有深度的,当读取后 需要CPU或者DMA搬移走。特别是用CPU搬移的时候,很可能还涉及一些中间缓存buffer上下文,到目标sram可能会再搬移一次导致时间更长。
在计算耗时的时候,一定要根据系统进行排除并留有余量,不要简单按理论值计算。
【关注点3】写保护区域设置 与 flash排布设计(只读 和 易变、可变区域 做隔离)
flash提供写保护区域设置,通过状态寄存器进行设置。如下类似,可以按 保护 首部或者尾部1/x、或首部 或者 尾部 固定大小block。也引导我们方案设计的时候 把只读区域 和 易变、可变区域 做隔离。
【关注点4】3/4字节地址切换问题,为满足超16M的容量空间。
容量低于16MByte的nor flash,一般是3字节模式:cmd+addr0+addr1+addr2,因为3个字节地址表示范围:0xffffff为16M内容。超过16M的时候,就需要用到4字节地址cmd+addr0+addr1+addr2+addr3。
注意点是:部分芯片bootrom不支持4字节地址模式,默认按3字节和nor flash通信,如果切换到4字节后重启就会导致bootrom启动失败。这里的解决方案是 软件在reboot前主动切换到3字节,但是不能解决主芯片硬重启的情况,因此更好的方法是硬件上调整供电控制 让 主芯片和norflash同步reset。一旦主芯片被复位下电norflash也下电,让二者都回到3字节模式,就可以正常启动了。
三、常见问题与调试方法(待补充)
常见开机失败—3/4字节地址切换问题
常见读取性能差—中间缓存/时钟偏低
常见写数据概率失败—硬件链路设计问题信号干扰
常见读取数据概率失败—管脚驱动电流不够
参考资料:
GD25Q128datasheet:https://www.gigadevice.com/zh-hans/flash-memory/gd25q128e/
nor flash调试与使用总结相关推荐
- 关于IAR的一些总结 -- ARM调试和Flash调试的区别
作者:jicheng0622 最近一直埋头于毕业论文的撰写当中,真是有种"两耳不闻窗外事,一心只写毕业论文"的感觉啊.成天大眼对小眼地面对着word.viso和知网客户端等等文字编 ...
- 在ADSP21489下外挂S29AL016J并行FLASH调试记录
我哭,调试了5天 总结下在ADSP21489下挂S29AL016J并行flash调试记录 S29AL016J:2M*8bit 21489EZ-Kite M29W320EB: 4M*8Bit 在修改fl ...
- W25Q128华邦Flash调试踩坑
W25Q128华邦Flash调试踩坑 存储器内部默认数据为全1,同样整片擦除后数据恢复为全1. 注意:这款Flash不支持写数据覆盖,即写第二次数据之前要先擦除要写入地址对应的扇区.具体原因在于Fla ...
- Flex调试工具的安装(Flash 调试 IE Firefox )
Flex调试工具的安装(Flash 调试 IE Firefox ) 一.IE下flex调试的安装 Flex builder 3.0中使用trace( )调试时(debug方式运行,也可直接按F11运行 ...
- PIC32MX 读写flash调试经验
今天上午终于搞定PIC32 flash的读写,保存一般参数不需要添加外部EEPROM,非常简单,如果你了解了PIC32的存储器的虚拟地址与物理地址的映射. 在这里跟大家分享一下: flash的物理地址 ...
- Linux NAND Flash调试
很久没接触过 nandflash 驱动,最近工作又摸了,于是顺便整理总结一下.nandflash 在我看来算是比较落后的存储设备,所以文章里没有太多细节的东西,更多的是一些开发思路和经验,希望能帮助到 ...
- Nand Flash调试日志(1)——时钟频率配置
在关于NAND Flash的调试中,首先是基于现搭的硬件来进行着相关的操作,以红牛板作为主要参考,辅助参考有① nand_factory.c(此程序是利用寄存器进行配置,然而我的flash并没有相关 ...
- flash调试-用adb通过sysfs点亮flash
通过sysfs启用Flash和Torch LEDs: 1. Echo a nonzero number into the brightness node to configure the curren ...
- Flash 调试助手 Moster Debugger
http://demonsterdebugger.com/ 可以下载最新版的air 安装之后会有个使用例子 把第3步中到处的swc导入到项目 以下是测试例子: package { import com ...
最新文章
- java 自定义 operator_java8 自定义Collector
- Android中focusable属性的妙用——底层按钮的实现
- springboot学习笔记(九)
- 我的工作日志 - 2020年11月11日星期三 阴
- Redis:05---键的基本命令(下) 生存周期
- 《中国大学--博弈论》
- 低成本血氧仪方案设计
- 4G车牌识别摄像机 瞬间启动 快速唤醒抓拍 超低功耗硬件方案
- 阿拉伯数字金额转中文大写 (python实现)
- linux系统yum 安装postgresql
- 【牛客网】树根与星际密码
- 我的戴尔笔记本E6440官网下载地址
- php yii2 sns,GitHub - 13240031972/iisns: 基于 yii2 的 sns 社区系统,一站式解决社区建站...
- 【语言学】论语言学知识点
- 对计算机的过度依赖英语作文,英语四级作文:Don’t Rely Too Much on Computers(2)
- Springboot毕设项目基于SpringBoot的房源管理系统lyh88(java+VUE+Mybatis+Maven+Mysql)
- Leetcode36.Valid Sudoku有效的数独
- matlab声音信号时域频域转换,关于处理用采集卡采集到的声音时域信号转化成频域信号........
- iOS9中实现微信分享到好友、朋友圈
- 中国千年潜规则,人情世故每天懂一点