nor flash调试与使用总结

news2025/4/17 6:59:26

最近项目中使用到norflash,总结一下学习与使用经验

文章目录

    • 一、Flash基本概念
        • 存储器介绍与Flash在其中定位---非易失存储器类别中嵌入式领域常见设备
        • Flash的典型分类---NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢写快)
        • Flash的基本 存储和 读 写 擦原理---电荷是否超过特定阈值来表示0(低表示1)
    • 二、nor flash关键特性理解(以 GD25Q128介绍)
        • 基本特性介绍---容量、访问接口、读写速度、擦除性能、写保护
        • 【关注点1】flash的擦除性能远低于读写,相差几个量级
        • 【关注点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的擦除性能远低于读写,相差几个量级

flash的读写都是通过时钟CLK配置IO完成,可以通过提升时钟大小,构建多线IO来提高访问速度,如GD25Q128最大支持4线访问80M时钟读写(数据传输320Mbits/S)。但是擦除时不取决于时钟大小,也没有多线的概念, 完全由器件本身性能决定,如按4KB擦除要400ms,最快按64KB单元要1.2S(约0.4Mbits/S)和读取理论数据320Mbits/S相差几百倍

【关注点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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zookeeper 4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例

Zookeeper 【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.9 模拟12306 售票案例4.9.1 Curator 实现分布式锁 API4.9.2 分布式锁案例 - 模拟12306 售票4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例 4.…

企业经常会问到的软件测试面试题及答案,一定要好好记住

相信对于很多软件测试新手来说,技术项目的面试是十分让人头疼的,生怕没回答得好,就会跟这个offer失之交臂,因此,今天,我以身边朋友面试遇到过的几个问题以及刷过的软件测试题库柠檬班中的压中的题目&#x…

Maven 项目模板

Maven 项目模板 Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板。 在前面章节我们学到 Maven 使用下面的命令来快速创建 java 项目: mvn archetype:generate 什么是 archetype? archetype 也就是原型&#xff…

终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南

Java给大部分人的感觉就是慢,有严重的性能问题。其实程序慢的问题,与语言无关,与Java无关。Java应用的性能优化也是一个老生常谈的话题,但是只要我们深入的了解性能调优方法,走遍天下都不怕! 大多数开发人…

mac系统M1pro芯片安装VMware Fusion虚拟机win11操作系统(原创详细版)

VMware22年11月份推出Fusion 13,这是Fusion虚拟软件的最新更新。它允许Mac用户操作虚拟机来运行非macOS操作系统,如Windows 11。 有了Fusion 13,英特尔和苹果芯片Mac用户可以访问Windows 11虚拟机。英特尔Mac提供对Windows 11的全面支持&…

webpack 构建脚手架

前言 1. 构建项目 2. 局部安装 3. webpack.config.js 4. 打包 css 文件 5. 打包 less 文件 6. 打包 vue 文件 7. loader 和 plugin 区别 8. 添加版权的插件 9. html-webpack-plugin 打包 html 的插件 10. 压缩文件 11. webpack-dev-server 搭建本地服务器 前言 本文记录 webpa…

基于鸽群算法改进的DELM预测 -附代码

鸽群算法改进的深度极限学习机DELM的回归预测 文章目录鸽群算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机(DELM)原理3.鸽群算法4.鸽群算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https:…

自学编程的人成千上万,为什么坚持下来的没几个?

在互联网职位薪资水涨船高的现下,越来越多的人都对此跃跃欲试,想要通过学习进入这个新兴的朝阳行业。但或因为现下工作,或因为各种压力,多数人并不能果断投入,自学成了常见的学习方式! 但是据数据显示&…

PDF翻译怎么操作?教你几个PDF翻译的技巧

当你在查阅国外资料的时候,有没有发现很多资料都是以PDF格式来呈现的?毕竟,PDF文件方便查阅也不易出现格式混乱的状态。但是,这对于英语基础不好的小伙伴就有一定的影响了,而且如果一字一字去翻译解释,那也…

linux安装php环境

linux安装php环境首先,打开终端并更新系统的软件包列表。运行以下命令然后安装 PHP。运行以下命令安装完成后,可以使用以下命令检查 PHP 的版本:如果您需要使用 PHP 的扩展,可以使用以下命令安装它们:例如,…

[2]MQTT基础知识

MQTT(消息队列遥测传输)是一个客户端服务端架构的发布/订阅模式的消息传输协议。 MQTT协议最初版本是在1999年建立的。该协议的发明人是的Andy Stanford-Clark和Arlen Nipper。 MQTT协议是当今世界上最受欢迎的物联网协议,广泛应用于车联网、智能家居、即时聊天应用…

自学Python学习经验分享

学编程语言有个小秘诀,直接上项目就是干,做完之后你就是Pythoner了。 不要怕没基础,边做边学边查,进步很快的。 因人而异,一周或一个月就能基本入门,当然也需要你百分百的投入。 以前我也觉得收集资料、钻…

一个新工具引发IT巨变:程序员在转行,不懂编程的人却成了程序员

编程一定需要代码吗?我看未必。 科技进步可谓日新月异,无代码开发在近几年,俨然被越来越多的人所熟知。这是一场解放码农的运动,让不懂编程的人也能进行软件开发。 我在发文前,看到了一则信息,更加坚定了…

【MySQL】MySQL初级笔记

MySQL1、初识MySQL(了解)1.1、为什么学习数据库1.2、什么是数据库1.3、什么是DBMS1.4、MySQL简介1.7 连接数据库1.8 基本操作2、操作数据库2.1、结构化查询语句分类2.2、数据库操作2.3、数据值和列类型数值类型字符串类型日期和时间型数值类型NULL值2.4、数据字段属性(重点)UnS…

SpringBoot配置文件的加载顺序

一、引言 如果我们了解SpringBoot配置文件的加载顺序,对项目的开发和部署会有很大的帮助。举个工作中的例子,我们的项目是微服务架构模式,用Nacos做注册中心(可以配置每个微服务),所有服务请求需要通过网关…

解决PageHelper版本不匹配,结果可能全部返回问题

1.问题: 使用 pagehelper ,如果和mybatis版本不匹配,就会出现返回结果错误问题,比如:本来想返回pageNum:1,pageSize:1的数据,但却是全部返回。自己的代码没问题的情况下&#xff0c…

无向图以及图的java代码实现

1. 图的定义 定义:图是由一组顶点和一组能够将两个顶点相连的边组成的 1.1特殊的图 自环:即一条连接一个顶点和其自身的边;平行边:连接同一对顶点的两条边; 1.2图的分类 按照连接两个顶点的边的不同,可…

含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功]

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 含文档PPT源码等]精品基于SSM的图书管理系统[包运行成功] 系统介绍 《基于SSM框架图书管理系统开发与设计》 该项目含有源码、配套开发软件、软件安…

Pytest用例运行及先后顺序

温馨提示 本篇约1600字,看完需3-5分钟,学习学半小时,加油! 先看普通函数运行顺序 import pytestdef test_one():print("我是清安")def test_02():print("--02--")def test_a():print("--a--")de…

老生常谈的一个问题,转行学习编程,是自学还是报班

1、自学 a、优点: 1、自我分析问题和自我解决问题的能力比较的强: 自学要自己的找学习资料,学习要自己的摸索学习,学习中遇到的问题要自己去分析,自己去解决。 通过自学成功的人往往自我分析问题和自我解决问题的能…