NOR Flash的三种基本操作擦(erase),写(write),更新(update)实现方式

//分享一下芯片底层Flash操作,因为工作相关,主要接触三星的芯片居多。

很多芯片应用都是由芯片厂商提供API来辅助开发,API是个黑盒,知道输入条件和结果。

降低了客户开发的难度,但是API需要导入LIB才能使用,占用空间啊。其实根据芯片的usermanual完全可以自己实现。

一.擦(erase)


    Flash 的编程原理都是只能将 1 写为 0,而不能将 0 写为 1。所以在 Flash 编程之前,必须将对应的Page擦除,而擦除的过程就是把所有位都写为 1 的过程。是寄存器控制的。都是0xFFFFFFFF才能被写入

1.擦除的单位是page,一个page可能是256B也可能是512B。

2.擦除的地址需要提前进行页对齐。

实现目标 擦除一个page的数据
流程:

(1)设置寄存器为page擦除状态
(2)加载一个无效数据dummy,任意值到目标区域上
(3)激活寄存器高电平状态
(4)加一个while死循环,等待高电平状态消失,高电平状态消失说明擦写完成
(5)使能寄存器的鉴别模式
(6)读出所有数据和0xFFFFFFFF比较
(7)数据相符,关闭寄存器verify模式,返回success。失败重复上面所有步骤
(8)失败次数达到门限值,关闭寄存器verify模式,返回fail


Note:在高电平操作之后,硬件已经记住了目标的擦除page,所以只会是目标page是表现出verify模式

二.写(write)

需要注意:

1.以word为写入单位
2.写前需要提前擦除。写入前,必须是0xFFFFFFFF。

实现目标写一个buffer的数据(需要注意操作的时候要按照具体芯片文档说明来操作,比如关闭一些时钟和中断)

流程:
(1)设置底层寄存器为写状态
(2)加载一个word的数据到buffer上
(3)通过设置寄存器设置为高电平状态
(4)等待高电平状态消失,判定为写结束
(5)数据比对,比对成功则写成功

(6)重复前面的步骤进行第二个一直到第n个word的写操作

三.更新(update)

Update!=Write

 Write是目标区域是空白,然后写入数据;Update是在目标区域已经存在数据的情况下,把目标区域的数据给覆盖更新成新数据

这样一说是不是很清晰了呢?

    按照已知的特点,flash是无法一次擦除,多次写入的。要想写入数据必须重新对目标区域进行擦除。而擦除一擦除就是一整个page,因此需要对数据进行备份到ram中,再擦除,再写入。把flash的擦和写结合一下就是upade了。


实现目标update,nword

流程:

(1)目标地址dst,Upade数据来源地址src,长度n个word,计算目标地址和page起始地址的偏移长度offset
(2)复制备份数据到ram中
(3)在ram中把数据update掉
(4)擦除page
(5)把ram buffer中的数据到目标区域,整个page都重新写入




你可能感兴趣的:(芯片技术)