北国牧马 发表于 2018-3-27 10:25:03

flash某位置已经写好数据,能否不用擦除继续覆盖写入数据

如图所示。地址0x6200位置处,已经写入了0x00000002,能否再次在地址0x6200处再次写入另外一个数据,例如0x00000003.求教各位大神指点如何操作。我在测试时发现如果第一次写入的是0x00,可以再次写入别的数据,如果写入非0数,就不能再次写入了。

bargagebaobei 发表于 2018-3-27 10:26:11

本帖最后由 bargagebaobei 于 2018-3-27 10:27 编辑

貌似不可以 只能弄出来 然后擦除 在和后续数据一起再写进去

北国牧马 发表于 2018-3-27 10:28:49

bargagebaobei 发表于 2018-3-27 10:26
貌似不可以 只能弄出来 然后擦除 在和后续数据一起再写进去

嗯,flash擦除次数只有10K,想着尽可能少擦除,不然用不了几次就废了

bargagebaobei 发表于 2018-3-27 10:29:41

10K足够用啦

zhao.zhao 发表于 2018-3-27 10:39:33

先读出这个扇区的所有数据放在数组中,然后在数组中把你要写入的数据写到相应的位置,再次擦除该扇区,再把数组中的内容写入扇区,这样又可保存扇区中原来的内容,同时也写入的自己的数据。

流水源 发表于 2018-3-27 10:39:52

flash不是只能把位1写成0,0要变回1只能擦除嘛。擦除之后flash都是FF,写入时就是把FF中的某个bit位1变成0。

北国牧马 发表于 2018-3-27 10:41:07

流水源 发表于 2018-3-27 10:39
flash不是只能把位1写成0,0要变回1只能擦除嘛。擦除之后flash都是FF,写入时就是把FF中的某个bit位1变成0 ...

可能编译器在线调试时取反了吧

北国牧马 发表于 2018-3-27 10:42:17

zhao.zhao 发表于 2018-3-27 10:39
先读出这个扇区的所有数据放在数组中,然后在数组中把你要写入的数据写到相应的位置,再次擦除该扇区,再把 ...

嗯目前看只有这一种办法了

す疯Ⅱ恒す 发表于 2018-3-27 11:00:09

是对位操作的,如果flash里改位是1,那可以把其改为0,如果是0,那只能擦除了。可以用位做计数用,节约擦除次数。

北国牧马 发表于 2018-3-27 11:25:12

す疯Ⅱ恒す 发表于 2018-3-27 11:00
是对位操作的,如果flash里改位是1,那可以把其改为0,如果是0,那只能擦除了。可以用位做计数用,节约擦除 ...

用位做计数用?如果将flash的写入看作位操作,加入某已经写入的32位数据0x00000003,是不是再次写入0x00000001是可以的,但实际测试是不行的
页: [1] 2
查看完整版本: flash某位置已经写好数据,能否不用擦除继续覆盖写入数据