最近项目中使用到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调试与使用总结相关推荐

  1. 关于IAR的一些总结 -- ARM调试和Flash调试的区别

    作者:jicheng0622 最近一直埋头于毕业论文的撰写当中,真是有种"两耳不闻窗外事,一心只写毕业论文"的感觉啊.成天大眼对小眼地面对着word.viso和知网客户端等等文字编 ...

  2. 在ADSP21489下外挂S29AL016J并行FLASH调试记录

    我哭,调试了5天 总结下在ADSP21489下挂S29AL016J并行flash调试记录 S29AL016J:2M*8bit 21489EZ-Kite M29W320EB: 4M*8Bit 在修改fl ...

  3. W25Q128华邦Flash调试踩坑

    W25Q128华邦Flash调试踩坑 存储器内部默认数据为全1,同样整片擦除后数据恢复为全1. 注意:这款Flash不支持写数据覆盖,即写第二次数据之前要先擦除要写入地址对应的扇区.具体原因在于Fla ...

  4. Flex调试工具的安装(Flash 调试 IE Firefox )

    Flex调试工具的安装(Flash 调试 IE Firefox ) 一.IE下flex调试的安装 Flex builder 3.0中使用trace( )调试时(debug方式运行,也可直接按F11运行 ...

  5. PIC32MX 读写flash调试经验

    今天上午终于搞定PIC32 flash的读写,保存一般参数不需要添加外部EEPROM,非常简单,如果你了解了PIC32的存储器的虚拟地址与物理地址的映射. 在这里跟大家分享一下: flash的物理地址 ...

  6. Linux NAND Flash调试

    很久没接触过 nandflash 驱动,最近工作又摸了,于是顺便整理总结一下.nandflash 在我看来算是比较落后的存储设备,所以文章里没有太多细节的东西,更多的是一些开发思路和经验,希望能帮助到 ...

  7. Nand Flash调试日志(1)——时钟频率配置

    在关于NAND Flash的调试中,首先是基于现搭的硬件来进行着相关的操作,以红牛板作为主要参考,辅助参考有①  nand_factory.c(此程序是利用寄存器进行配置,然而我的flash并没有相关 ...

  8. flash调试-用adb通过sysfs点亮flash

    通过sysfs启用Flash和Torch LEDs: 1. Echo a nonzero number into the brightness node to configure the curren ...

  9. Flash 调试助手 Moster Debugger

    http://demonsterdebugger.com/ 可以下载最新版的air 安装之后会有个使用例子 把第3步中到处的swc导入到项目 以下是测试例子: package { import com ...

最新文章

  1. java 自定义 operator_java8 自定义Collector
  2. Android中focusable属性的妙用——底层按钮的实现
  3. springboot学习笔记(九)
  4. 我的工作日志 - 2020年11月11日星期三 阴
  5. Redis:05---键的基本命令(下) 生存周期
  6. 《中国大学--博弈论》
  7. 低成本血氧仪方案设计
  8. 4G车牌识别摄像机 瞬间启动 快速唤醒抓拍 超低功耗硬件方案
  9. 阿拉伯数字金额转中文大写 (python实现)
  10. linux系统yum 安装postgresql
  11. 【牛客网】树根与星际密码
  12. 我的戴尔笔记本E6440官网下载地址
  13. php yii2 sns,GitHub - 13240031972/iisns: 基于 yii2 的 sns 社区系统,一站式解决社区建站...
  14. 【语言学】论语言学知识点
  15. 对计算机的过度依赖英语作文,英语四级作文:Don’t Rely Too Much on Computers(2)
  16. Springboot毕设项目基于SpringBoot的房源管理系统lyh88(java+VUE+Mybatis+Maven+Mysql)
  17. Leetcode36.Valid Sudoku有效的数独
  18. matlab声音信号时域频域转换,关于处理用采集卡采集到的声音时域信号转化成频域信号........
  19. iOS9中实现微信分享到好友、朋友圈
  20. 中国千年潜规则,人情世故每天懂一点

热门文章

  1. (STITP)jotm-btp的深入分析
  2. 是什么让Redis“气急败坏”回击:13年来,总有人想替Redis换套新架构!
  3. CRM助力企业销售运营管理
  4. matlab在管理学中的应用简matlab基础【二】
  5. 京东杭州java面试试水
  6. 70个Python练手项目列表,得不到永远会骚动~
  7. appium环境搭建(10)
  8. 发那科Fanuc数控系统数据采集方案
  9. Docker【从入门到服务器搭建备份迁移】详细教程
  10. Maven aliyun mirror