虽然一开始工作就接触过flash芯片,但都是应用层次的接触,并没有直接接触到flash驱动。

直到最近要基于驱动接口直接操作flash芯片,才发现自己对它的使用特定一点都不了解。

先说一下自己的问题,原本打算对flash中的存储空间进行覆盖写,即写过数据后不擦除直接用新的数据进行覆盖。没想到验证的时候一直乱码,查了资料才知道,原来flash芯片不支持覆盖写,只能在擦除过的区域进行写操作,想要重写数据,必须进行擦除,而且擦除一般是按照扇区或者是块进行擦除。根本原因其实是flash芯片的写操作只能将1变为0,而不能将0变为1,擦除之后,flash中是全1的状态,若想将0变为1则只能通过擦除操作。所以严格来说不是不支持覆盖写,因为对于特定的数据(只要不涉及0变1)也可以进行覆盖写。

下面是一篇简单的介绍:

写flash时为什么需要先擦除?

Flash 的编程原理都是只能将 1 写为 0,而不能将 0 写为 1。所以在 Flash 编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为 1 的过程,块内的所有字节变为 0xFF

存储器分为两大类:ram(内存:随机存储器)和rom(外存:程序存储器),分别存数据和程序。

  ram就不讲了,今天主要讨论rom。

  (1)rom最初不能编程,出厂什么内容就永远什么内容,不灵活。

  (2)后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉。

  (3)人类文明不断进步,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。

  (4)历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修改rom中的内容了。

  (ROM--PROM--EPROM--EEPROM的进化!)

 EEPROM的全称是“电可擦除可编程只读存储器(不要觉得多高大上,其实经常都会用到),即Electrically Erasable Programmable Read-Only Memory。是相对于紫外擦除的rom来讲的。但是今天已经存在多种EEPROM的变种,变成了一类存储器的统称。

  

  flash属于广义的EEPROM,因为它也是电擦除的rom。但是为了区别于一般的按字节为单位的擦写的EEPROM,我们都叫它flash。狭义的EEPROM:这种rom的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1。这是最传统的一种EEPROM,掉电后数据不丢失,可以保存100年,可以擦写100w次。具有较高的可靠性,但是电路复杂/成本也高。因此目前的EEPROM都是几十千字节到几百千字节的,绝少有超过512K的。

  flash做的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。上M的rom一般都是flash。

  flash分为nor flash和nand flash。nor flash数据线和地址线分开,可以实现ram一样的随机寻址功能,可以读取任何一个字节。但是擦除仍要按块来擦。

  nand flash同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。(nandflash按块来擦除,按页来读,norflash没有页)

  由于nandflash引脚上复用,因此读取速度比nor flash慢一点,但是擦除和写入速度比nor flash快很多。nand flash内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是nand型的。小容量的2~12M的flash多是nor型的。

  使用寿命上,nand flash的擦除次数是nor的数倍。而且nand flash可以标记坏块,从而使软件跳过坏块。nor flash 一旦损坏便无法再用。

    因为nor flash可以进行字节寻址,所以程序可以在nor flash中运行。嵌入式系统多用一个小容量的nor flash存储引导代码,用一个大容量的nand flash存放文件系统和内核。

初识flash芯片----写之前为什么要先擦除相关推荐

  1. 利用MinproI给FLASH芯片烧写固件,给ESP8266更换更大容量的flash

    利用MinproI给FLASH芯片烧写固件

  2. SPI Flash芯片W25Q32英文版数据手册解读(三)---------程序编写,电路应用

    一.序言 序言对这篇文章进行一个总体的说明: 1.这部分是根据手册写程序,因此采用手册截图+程序截图的形式,对图片不进行标号,而且对重点部分进行颜色标注. 2.考虑到很多读者(包括我),使用手机看文章 ...

  3. 镁光256Gb NAND Flash芯片介绍

    总体概述 该芯片是一款典型的大容量NAND Flash存储颗粒,支持Open NAND Flash Interface (ONFI) 2.1的接口标准,采用ONFI NANDFlash的操作协议.该芯 ...

  4. CC2530(SPI)驱动FLASH芯片W25Qxx

    由于之前用的存储芯片价格涨得离谱,需要寻找新的存储芯片,综合考虑找到了W25Qxx来测试替代的可行性.不用DMA的具体代码经过测试可用,但DMA收发测试不成功,仍在测试修改阶段. 所用芯片:cc253 ...

  5. 理解ESP32 Flash烧写的DOUT/DIO/QOUT/QIO配置

    一.目的 刚接触ESP32开发的同学如果不是使用Ubuntu进行烧写的话,可能在使用乐鑫的Flash烧写工具时可能会有这样的疑问 Flash工具下载地址 工具 | 乐鑫科技 (espressif.co ...

  6. STM32F103ZE单片机FSMC接口读取NAND Flash芯片K9F1G08U0E的数据时出现数据丢失的解决办法

    [问题] STM32单片机使用FSMC读取K9F1G08U0E NAND Flash时,出现部分字节丢失的情况.例如:Flash存储器中存储有连续的0xff字节,则在进行连续读(Page Read)操 ...

  7. STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程

    STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...

  8. 痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码). 痞子衡之前写过一篇文章 <J-Flash在Micron ...

  9. FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用

    写在前面 SPI协议系列文章: FPGA实现的SPI协议(一)----SPI驱动 FPGA实现的SPI协议(二)----基于SPI接口的FLASH芯片M25P16的使用 在上篇文章,简要介绍了SPI协 ...

最新文章

  1. ubuntu系统php环境变量设置,Ubuntu系统环境变量详解
  2. 动手写一个简单版的谷歌TPU
  3. 2017年卖掉全副身家买比特币,全家人一起游牧……这个企业家好疯狂!
  4. C# 简单软件有效期注册的实现【原】
  5. 深入redis内部之redis启动过程之一
  6. 并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子
  7. nacos 持久化 mysql(windows/linux环境)
  8. 分布式消息流平台:不要只想着Kafka,还有Pulsar
  9. 怎样在javascript中直接设置好打印方式为横向或纵向(測試未果)
  10. 第三方app_官方打不过第三方APP之 知乎 篇
  11. mysql时间加减运算
  12. 头文件自包含是什么意思_女朋友发了一张这样的自拍给我,说想我了,她这是什么意思呢?...
  13. 基于 RISC-V SoC 的可配置 FFT 系统设计(10)1024 点 FFT 程序的交叉编译
  14. 联想智能云教室_被低估的联想能复制微软之路吗? | 公司观察
  15. mysql创建视图注意事项_mysql视图创建注意事项(转)
  16. IP.cn - 全国 DNS 服务器 IP 地址汇总 | 公共 DNS 服务器 | DNS 地址
  17. 「技术架构」技术风险管理权威指南
  18. 寒江独钓——Windows内核安全编程
  19. ubuntu折腾笔记【三】
  20. Redis核心技术与实战-学习笔记(二十九):Redis并发控制

热门文章

  1. 写在2021年第一个工作日
  2. 1.MIL 编程环境设置
  3. 天津小学计算机老师的工资,最辛苦的3种小学教师,工资都差不多,工作量差距大...
  4. 微信群机器人微云助手微小云如何积分商城账户管理
  5. homestead是什么玩意? 怎么弄?
  6. 解密Globeimposter-Alpha865qqz勒索病毒:如何恢复被加密的数据文件?
  7. loj #6468. 魔法
  8. mmdetection小技巧(强烈推荐 逐步完善中)
  9. java 循环嵌套_Java的循环结构及嵌套循环
  10. 关于python中 if 和 while 的区别