打印

往flash中写数据前不擦除不可以吗?

[复制链接]
25208|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuxiaolinsara|  楼主 | 2012-7-12 11:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
往flash中第一次写数据时,先把芯片中的数据全部擦除后,再写数据,读出来发现写的全部正确。而忘这个flash中第二次写数据时,没有擦除,而是接着上次的地址往后写,发现写入的数据的前12个字节是错误的,其余的数据都正确。不知道是为什么?

相关帖子

沙发
悠然科技| | 2012-7-12 11:46 | 只看该作者
貌似往里写也需要先擦除再写,需要时间,前12个字节就是在这擦出时间里牺牲掉的,12个节后已经擦除完成,再写自然就没问题
flash擦除是有最小单位的,一般是一页,所以12个字节的时间就可以擦完这整页数据
以上纯属猜测,但是个人建议,还是按照步骤和流程来写程序的好,不要轻易增减步骤。

使用特权

评论回复
板凳
john_lee| | 2012-7-12 12:17 | 只看该作者
写入,只能把数据(bit)从1改为0;擦除,只能把所有数据(bit)从0改为1。
所以,要想写入数据,而不擦除,是有条件的:保证写入数据的每一个bit,不会从 0 变成 1。

使用特权

评论回复
地板
zhexuan| | 2012-7-12 12:23 | 只看该作者
3楼说的是对的,有些芯片可能要整块擦除才可以,所以某些数据更新的时候有备份、再写入这个步奏

使用特权

评论回复
5
dong_abc| | 2012-7-12 13:10 | 只看该作者
flash,不擦除就想写,没门!

使用特权

评论回复
6
liuxiaolinsara|  楼主 | 2012-7-12 13:54 | 只看该作者
写入,只能把数据(bit)从1改为0;擦除,只能把所有数据(bit)从0改为1。
所以,要想写入数据,而不擦除,是有条件的:保证写入数据的每一个bit,不会从 0 变成 1。 ...
john_lee 发表于 2012-7-12 12:17

如果想保留第一次写的数据,第二次写数据时从下一个地址开始写应该是可以的吧,因为第一次写数据之前已经进行了芯片擦除。

使用特权

评论回复
7
dlyt_test001| | 2012-7-12 14:12 | 只看该作者
如果想保留第一次写的数据,第二次写数据时从下一个地址开始写应该是可以的吧,因为第一次写数据之前已经进行了芯片擦除。
liuxiaolinsara 发表于 2012-7-12 13:54

这样是可以的。其实只要写入的目标地址的原数据是FF,就可以写入。擦除就是把目标地址的数据变成FF。

使用特权

评论回复
8
liuxiaolinsara|  楼主 | 2012-7-12 15:04 | 只看该作者
这样是可以的。其实只要写入的目标地址的原数据是FF,就可以写入。擦除就是把目标地址的数据变成FF。
dlyt_test001 发表于 2012-7-12 14:12

我认为也是这样的,但是实际操作的时候,会出现错误。比如说第二次写入的前12个字节出现错误,并且每次写入时,都是一样的结果。“00 03 9C 52 FF 00 00 00 11 00 40”每次都变成了:“00 02 04 10 6A 00 00 00 00 00 00 ”。所以我也不知道这到底是哪里的问题。

使用特权

评论回复
9
ningling_21| | 2012-7-12 20:21 | 只看该作者
写入FLASH之前,先判断如果不是FF就要先擦除,再写入...

使用特权

评论回复
10
杜专| | 2012-7-12 20:52 | 只看该作者
不可以  我以前试过   你可以用仿真器试试 嘿嘿

使用特权

评论回复
11
cjseng| | 2012-7-12 21:01 | 只看该作者
简单地说,不擦除,可以把bit 1改成0,不一定要争个字节为FF,反过来把0写成1不可以。

使用特权

评论回复
12
cool_coder| | 2012-7-13 10:53 | 只看该作者
遇到这个问题应该先搞清楚闪存的原理,不然后面还会有麻烦。

使用特权

评论回复
13
z1111| | 2012-7-13 10:54 | 只看该作者
一般的nand flash,擦除是以Block为最小操作单位的,写入以Page为最小操作单位。多个Page组成一个Block。一些SPI flash也有类似的特点。
还有就是像三楼所说:写入,只能把数据(bit)从1改为0;擦除,只能把所有数据(bit)从0改为1。
所以写入数据,必须写到已经擦除过的PAGE,否则数据会乱掉。

一个比较笨的办法是,先将已经写入的数据读到RAM中,更新数据,擦除,然后写入。

使用特权

评论回复
14
wukunshan| | 2012-7-13 11:23 | 只看该作者
flash写入数据前必须先擦除。因为flash只能写0!写0时是把原来的数据改为0;写1时其实是保持原来的状态。

使用特权

评论回复
15
inurl| | 2013-1-14 13:35 | 只看该作者
z1111 发表于 2012-7-13 10:54
一般的nand flash,擦除是以Block为最小操作单位的,写入以Page为最小操作单位。多个Page组成一个Block。一 ...

我擦 ,原来还有这么多限制

使用特权

评论回复
16
fengxiaofeifei| | 2013-3-29 11:05 | 只看该作者
john_lee 发表于 2012-7-12 12:17
写入,只能把数据(bit)从1改为0;擦除,只能把所有数据(bit)从0改为1。
所以,要想写入数据,而不擦除,是 ...

学习了,这个问题困扰很久了!

使用特权

评论回复
17
yhhsky| | 2013-3-29 19:24 | 只看该作者

使用特权

评论回复
18
hunter727| | 2013-10-28 00:21 | 只看该作者
看完这个比较明白了

使用特权

评论回复
19
风中溯| | 2015-9-12 18:14 | 只看该作者
这个就比较清楚了

使用特权

评论回复
20
玲玲灵灵2013| | 2016-4-25 09:19 | 只看该作者
悠然科技 发表于 2012-7-12 11:46
貌似往里写也需要先擦除再写,需要时间,前12个字节就是在这擦出时间里牺牲掉的,12个节后已经擦除完成,再 ...

你说的这个  :往里写也需要先擦除再写,需要时间 ,前12个字节就是在这擦出时间里牺牲掉的        这该怎么解决?擦除后加延时再往里写吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

44

帖子

0

粉丝