rom最初不能编程,出厂什么内容就永远什么内容,不灵活。后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉。人类文明不断进步,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。历史的车轮不断前进,伟大的EEPROM出现了,拯救了一大批程序员,终于可以随意的修改rom中的内容了。
以JZ2440开发板为例,烧录程序到S3C2440。可以使用dnw软件进行烧录。在windows下,一般dnw的驱动都装不好,一般需要禁止数字签名才能装好。所以我们可以把dnw装到linux下,在linux下烧录程序。
ROM(Read Only Memory)和RAM(Random Access Memory)指的都是半导体存储器,ROM在系统停止供电的时候仍然可以保持数据,而RAM通常是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
该文章介绍了Nor Flash的基本原理、基本操作以及驱动程序的基本使用。它还提供了在用户空间中驱动Nor Flash设备的示例代码。文章还讨论了如何使用MTD设备来模拟Nor Flash,并展示了如何编写简单的用户空间应用程序来与Nor Flash进行通信。
1.本节使用的nand flash型号为K9F2G08U0M,它的命令如下: 1.1我们以上图的read id(读ID)为例,它的时序图如下: 首先需要使能CE片选 1)使能CLE 2)发送0X90命
NAND FLASH版本和eMMC版本核心板使用方法基本一致。本文主要描述U-Boot编译、基础设备树文件编译、固化Linux系统NAND FLASH分区说明和NAND FLASH启动系统、固化Linux系统、AND FLASH读写测试等,NAND FLASH版本与eMMC版本核心板在使用方面的不同之处,相同之处将不重复描述。
介绍 Sunxi SPINand mtd/ubi 驱动设计, 方便相关驱动和应用开发人员
1、EPROM:(Electrically Programmable Read-Only-Memory)电可编程序只读存储器
UBI全称是Unsorted Block Images,上图为UBI在系统中的层次结构,最下面是flash层(包括flash控制器,各个flash驱动代码,spi-mem层等);MTD层是对flash层的抽象,一个flash可能被划分成不同的分区,每一个分区都会对应一个MTD设备;UBI层是基于MTD层之上的更高层,UBI层抽象出一个个逻辑擦写块,每个逻辑擦写块都有一个物理擦写块与之前对应,有了这个映射,我们就可以加一些软件算法,达到擦写均衡的目的,从而提高flash的使用寿命;再往上是基于UBI层实现和各种文件系统,比如UBIFS。
阅读本文前,建议先阅读下这两篇文章:《NAND Flash基础知识简介》、《Flash写入性能下降问题》。
本文主要介绍STM32的内部Flash擦除方式和擦除长文件的功能函数怎样编写。并且介绍一些注意事项,如只想擦除当前地址,却发现上下地址都出现了擦除等问题。阅读完本文可以使你能够正常的完成Flash擦除。并对擦除时会影响的地址大小有一个深入的认识,并在对页擦除时,页的起始地址和大小有所了解。
#第001节_Nor Flash原理及硬件操作 # Nor Flash的连接线有地址线,数据线,片选信号读写信号等,Nor Flash的接口属于内存类接口,Nor Flash可以向内存一样读,但是不能像内存一样写,需要做一些特殊的操作才能进行写操作,读只需像内存一样读很简单。
https://blog.csdn.net/yuanlulu/article/details/6163106
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第70章 STM32H7的内部Flash基础知识和HAL库
通过这两个步骤,即可解锁 FLASH_CR,如果写入错误,那么 FLASH_CR 将被锁定,直到下次复位后才可以再次解锁。
说明 因为用到了HC32F460系列的单片机的flash存储数据,所以写了这套程序. 目的是为了在便于存储. 关于407的Flash 写数据时最小写的单位是 4字节 擦除的时候,最小擦除的单位是1个扇区(8KB) 读取数据的时候最大读取的位宽是128位(16字节) 关于提供的基本的flash操作函数 1.读取 2.擦除 3.写入 关于本节封装的Flash写读函数思路 1.使用其中一个扇区存储数据,假设使用11扇区,准备一个固定大小(假设是512)的u32类型的数组用来存储数据 记住一
很多的MCU控制器不带有片上EEPROM,但是我们有时候鉴于成本的考虑又不想外扩EEPROM,所以经常用Flash来模拟EEPROM存储,但是Flash都是块擦除,所以需要考虑频繁擦除的影响,需要借鉴软件算法来综合考虑,最近经常在使用NXP的KE系片子,KE系列除过KE02带有256字节的片上EEPROM外,KE04和KE06都不带片上EEPROM,所以我们采用Flash来模拟。
编译环境:我用的是(Keil)MDK4.7.2 stm32库版本:我用的是3.5.0 一、本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料。 对STM32 内部FLASH进行编程操作,需要遵循以下流程: FLASH解锁 清除相关标志位 擦除FLASH(先擦除后写入的原因是为了工业上制作方便,即物理实现方便) 写入FLASH 锁定FLASH 实例: #define FLASH_PAGE_SIZE ((uint16_t)0x400) //如果一页为1K大小 #define WRITE_START_ADDR ((uint32_t)0x08008000)//写入的起始地址 #define WRITE_END_ADDR ((uint32_t)0x0800C000)//结束地址 uint32_t EraseCounter = 0x00, Address = 0x00;//擦除计数,写入地址 uint32_t Data = 0x3210ABCD;//要写入的数据 uint32_t NbrOfPage = 0x00;//记录要擦除的页数 volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;/*FLASH擦除完成标志*/ void main() { /*解锁FLASH*/ FLASH_Unlock(); /*计算需要擦除FLASH页的个数 */ NbrOfPage = (WRITE_END_ADDR - WRITE_START_ADDR) / FLASH_PAGE_SIZE; /* 清除所有挂起标志位 */ FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); /* 擦除FLASH 页*/ for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++) { FLASHStatus = FLASH_ErasePage(WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter)); } /* 写入FLASH */ Address = WRITE_START_ADDR; while((Address < WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE)) { FLASHStatus = FLASH_ProgramWord(Address, Data); Address = Address + 4; } /* 锁定FLASH */ FLASH_Lock(); } 二、FLASH 擦除(以及防止误擦除程序代码) 1、擦除函数 FLASH_Status FLASH_ErasePage(u32 Page_Address)只要()里面的数是flash第xx页中对应的任何一个地址!就是擦除xx页全部内容! 防止误擦除有用程序代码的方法 方法一:首先要计算程序代码有多少,把FLASH存取地址设置在程序代码以外的地方,这样就不会破坏用户程序。原则上从0x0800 0000 + 0x1000 以后的FLASH空间都可以作为存储使用。如果代码量占了 0x3000, 那么存储在 0x0800 0000+ 0x4000 以后的空间就不会破坏程序了。 方法二:先在程序中定义一个const 类型的常量数组,并指定其存储位置(方便找到写入、读取位置),这样编译器就会分配你指定的空间将常量数组存入FLASH中。当你做擦除。读写操作时,只要在这个常量数组所在的地址范围就好。 const uint8_t table[10] __at(0x08010000) = {0x55} ; MDK3.03A开始就支持关键字 __at() 。 需要加#include <absacc.h> 方法三:在程序中定义一个const 类型的常量数组,无需指定其存储位置。只要定义一个32位的变量存储这个数组的FLASH区地址就行。 uint32_t address;//STM32的地址是32位的 const uint8_t imageBuffer[1024] = {0,1,2,3,4,5,6,7}; address = (uint32_t) imageBuffer;/*用强制类型转换的方式,可以把FLASH中存储的imageBuffer[1024]的地址读到RAM中的变量address 里,方便找到写入、读取位
通过有线方式进行升级,叫本地升级,比如通过UART,USB或者SPI通信接口来升级设备固件。
<iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/单片机知识点总结/directory.html" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe>
ROM、PROM、EPROM、EEPROM、NAND flash、NOR flash
STM32 芯片内部的 FLASH 存储器,主要用于存储我们代码。如果内部FLASH存储完我们的代码还有剩余的空间,那么这些剩余的空间我们就可以利用起来,存储一些需要掉电保存的数据。
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区
FEE(Flash EEPROM Emulation),即Flash模拟EEPROM。为什么要用Flash模拟EEPROM?下面我们来看下两者之间的区别。
学习完协议篇,今天我们来学习飞思卡尔Flashloader之命令API。 获取属性命令 获取属性命令用来查询Flashloader的各种属性和设置,每一个支持的属性都有一个关联的32位标签名称,标签名称占据命令包的第一个参数,目标板会返回一个带有属性值的获取命令响应包。可以通过获取属性或者设置属性命令存取访问属性,属性有可能是只读的也有可能是可读可写的,所有可读可写的属性是32位整形,所以他们可以被命令参数简单的携带。获取属性命令仅仅需要一个参数那就是32位的参数属性标签名称。 获取属性命令按照协议完整
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z2066411585/article/details/88955900
在使用Arduino开发时,有个内置库可以使用Flash模拟EEPROM,极大的方便了嵌入式数据存储的开发。
最近做STM32的远程升级,保存到Flash里面,用于记录更新状态的信息总是无故的清理掉
提前说下哈,bit代表位 也就是 0 1 0 1 , Bit代表字节 ,一字节就是8位
基于Flash的SSD 基于Flash芯片的SSD中从整体到局部的分层为Nand Flash => Chip => Plane => Block => Page几个层次。其中Block是Nand Flash擦除的最小单位;Page是读写操作的基本单位 Erase Before OverWrite问题 基于Flash芯片的SSD往某个block写数据的过程中,不论原来的Block是什么,必须先擦除(Erase)整个Block为1,然后在往这个Block写入新数据,这个擦除操作增加了覆盖写的开销
最近研究了下nor flash的掉电问题,对nor的掉电有了更多的认识。总结分享如下
说明 在升级的过程中,许多地方需要擦除Flash,为了增加Flash的使用寿命. 在擦除之前先判断下是不是需要擦除. 修改 打开 BootLoader程序的 stmflash.c文件 找到 FlashErasePage 函数 修改如下: 把原先的直接擦除屏蔽掉,然后加上判断擦除程序 FlashStatus = FLASH_COMPLETE; for(j=0;j<STM_SECTOR_SIZE;j+=2)//ÅжϲÁ³ý {
做mcu开发时,涉及到数据存储时,往往都会考虑使用flash、eeprom,或者铁电存储器。从数据储存的角度上来说,安全性最高的肯定是FRAM,接着才会考虑使用EEPROM,对于一般的数据储存,flash就足够了。考虑到一般的MCU都不会携带EEPROM,最简单的方案可以利用flash模拟出eeprom,并且实现基本的日志文件系统操作,下面来描述一下基本的原理。
stm32f103ze是大容量的芯片,每个page2k字节,每次至少写2字节,即2*n字节数量,通常情况下,写入数据都是1->0,而不能0->1,因为这个是flash的特性决定的,如果是0->1的操作,那么必须要整个page擦除,这个和eeprom是不一样的, eeprom是可以按字节进行读写的,当然容量没有flash大,因此各有利弊。
Flash Controller 为 R128 内置的一个 Nor Flash 读写控制器,用于控制命令的收发、数据读写和执行 XIP,兼容 Standard SPI/Dual SPI/Quad SPI。R128 既可以通过 SPI 控制器与Nor Flash 芯片通讯,也可以通过 Flash 控制器与之通讯。在 Flash Controller 前一级加入了 Flash Encryption 模块。Flash Encryption 模块在向Flash 写数据时进行 AES 加密,从 Flash 中读数据时进行解密。Flash Controller 与 Flash Encryption 组合称为 FlashC_Enc。
NAND Flash是一种非易失存储介质(掉电后数据不会丢失),常见的U盘、TF卡/SD卡,以及大部分SSD(固态硬盘)都是由它组成的。 本文主要介绍其组成及工作原理。
以华邦W25Q128为例,详解SPI Flash的特点,读写注意事项,和地址范围等。
FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具有电可擦除可编程(EEPROM)的功能,还不会断电丢失数据,同时可以快速读取数据(NVRAM的优势),U盘使用这种存储器。
Flash Memory又叫做闪存,是一种非易失性存储器。非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解)。
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第36章 STM32F407的SPI 总线应用之SPI Fla
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第47章 STM32F429的SPI 总线应用之SPI Fla
上世纪90年代,伯克利的Jhon Ousterhout带领一个小组开发了一个新的文件系统来尝试解决文件系统的性能问题,这个研究的成果就是Log-structured File System(LFS),然而多年以来它并没有得到业界的采纳,直到固态硬盘(Solid State Drive)兴起后,LFS才终于大放异彩。
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第71章 STM32H7的内部Flash应用之模拟EEPR
我们用Visual Studio来开发程序时,可以选择编译Debug版本,也可以选择编译Release版本。Debug版本为调试版本,Release版本为对外发布版本。
以Hi3536为例 SDRAM的地址范围: 40000000 – 43FFFFFF (实际DDR是4Gbit,MPP和OS共用) 相应海思的型号DDR范围到此目录寻找:01.software/board/document_cn/Hi3518EV20X/Hi3516CV200 SDK 安装以及升级使用说明.txt Flash型号MX25L25635F(32MB);block(32k或64k);
本文介绍了全面理解SSD和NAND Flash的重要性和评价标准,包括稳定性、性能、寿命等方面的指标。
hex文件位置: 工程文件夹 -> Progect文件夹 -> output文件夹
4、一般都是在最后几页进行数据保存的,确保数据量不超过flash的的大小,比如f103大容量是2k字节,其实一个扇区只能写入1k数量的2字节的数据。
领取专属 10元无门槛券
手把手带您无忧上云