这个FLASH的问题也是我一直困扰得问题。
下面是我请教鱼大侠,的对话:
Sky_~ 12:06:01
鱼大侠在么
不吃猫的鱼 12:06:30
?
Sky_~ 12:06:43
有个弱弱的问题不好意思在群里问
直接跟你说了
呵呵
Sky_~ 12:08:16
对于FLASH芯片 一般都是按扇区 擦除的
那 在一个扇区内 写数据 是不是每次都要 擦除呢
还是就需要擦除一次?
Sky_~ 12:08:50
我 没做过FLASH 的读写 不太清楚
不吃猫的鱼 12:09:03
如果你确认那个地方被擦除过后没有写过数据,再次写入的时候不必擦除
不吃猫的鱼 12:09:26
例如你擦除了一块区域,第一次写了地址0,第二次写地址1的时候,就不必再擦除了
Sky_~ 12:09:41
哦 这样得啊
不吃猫的鱼 12:10:45
如果无法确认,那就只能先把那整块都读出来,放到RAM里暂时保存,然后擦掉那块,再整块写回去
Sky_~ 12:10:57
那对于FLASH写得时候 我一次写 5,6个字节也可以吧
直到把这扇区写满后
下次在用时候 在全扇区 擦除 是,么?
不吃猫的鱼 12:11:08
可以这样
Sky_~ 12:11:38
但是 我看FLASH得资料为什么写 说
对于20个字节一下 写得速度很满
Sky_~ 12:11:43
很慢呢?
不吃猫的鱼 12:12:07
有些FLASH要求整页写
Sky_~ 12:12:31
哦 是这样得啊
我清楚 了
Sky_~ 12:12:37
不吃猫的鱼 12:12:56
对于那些暂时用不到的位,你可以先写入擦除后的状态,后面还可以再改
不吃猫的鱼 12:13:11
对于nor 擦除后的状态是1,对于NAND,擦除后是0
Sky_~ 12:13:35
恩 很清楚了
不吃猫的鱼 12:14:42
对于FLASH,如果对它写入擦除后的那种状态,是不会影响他存储的值的
不吃猫的鱼 12:15:22
例如对于nor flash,数据是00,你不擦除,就写入0xff,数据不会变
Sky_~ 12:15:37
我现在有个项目 就是 间断性得 写数据
一次就 几个字节
对于这样的应用
我是否可以 首先整个FLASH全 擦除一遍
然后我 间断性得写
如果 写完了 全部FLASH 空间我再 擦除一遍?
不吃猫的鱼 12:18:39
可以这样做
不吃猫的鱼 12:18:57
数据量多大?
Sky_~ 12:19:33
一次 就5,6个字节 然后
共80K得数据吧
不吃猫的鱼 12:19:55
如果很频繁,可以考虑用FRAM
Sky_~ 12:19:56
就是停车场得 POS
要记录 停车时间
Sky_~ 12:20:20
停车厂应该不是很频繁
就大约2,3个小时一次
不吃猫的鱼 12:20:35
可以用EEPROM
不吃猫的鱼 12:20:57
EEPROM速度比FLASH略慢,但是可擦除次数比FLASH高一两个数量级
Sky_~ 12:21:13
恩 我其实就是编程
硬件式人家提供的一个 通用POS机器
Sky_~ 12:21:42
一般FLASH 就10W次左右
EEPROM 能有20W次?
Sky_~ 12:22:03
错了 能有100W次?
不吃猫的鱼 12:23:02
有些EEPROM可以做到100万次
Sky_~ 12:23:30
恩 牛!
可以推荐他们用EEPROM做
Sky_~ 12:23:48
谢谢鱼大侠
不吃猫的鱼 12:23:49
FRAM可以做到100亿次
不吃猫的鱼 12:23:56
而且写如前不必擦除
Sky_~ 12:24:01
晕 这个更狠
不吃猫的鱼 12:24:11
不过贵
Sky_~ 12:24:27
那不是速度很快?
Sky_~ 12:24:52
不用擦除
那么速度相当于FLASH好几倍了
不吃猫的鱼 12:25:35
可以做到和SRAM差不多的速度
不吃猫的鱼 12:25:45
但是不便宜啊
不吃猫的鱼 12:25:59
批量不清楚,零售价格,32KB的要10多块
Sky_~ 12:26:25
晕 那 买个几百M的得 多钱啊
不吃猫的鱼 12:26:48
所以一般只是用那种几百字节的小容量的
Sky_~ 12:27:01
还是不能替换FLASH啊
不过小容量存储倒是 可以考虑
Sky_~ 12:27:50
好了鱼大侠
耽误你吃饭了
呵呵
总结:
我原来观点:FLASH只要有写操作就需要将整个数据对应的页区擦除一遍。
现在我知道,并不知这样的,只有需要修改的地址才要擦除,对于可以按字节擦除的FLASH来说,你想写那就差那里就OK了,对于那些只允许以页擦除的FLASH就必须将整个页都擦除了。
对于FLASH来说分NOR FLASH和 NAND FLASH 对于他们写之前都要进行擦除操作,才能将信息写到FLASH里 类似还有EEPROM 等,而铁电存储器和硬盘来说就不用,这是由内部结构决定的。对于一个固定的FLASH地址并不需要每次都擦除他,除非你上面写过数据了,想改变他才要擦除,否则你是写不进去的。
阅读(1251) | 评论(0) | 转发(0) |