50031185 发表于 2018-10-16 18:00:02

关于 W25X16 的用法

W25X16   片外Flash

W25X16是华邦公司推出的继W25X10/20/40/80(从1Mb~8Mb)后容量更大的FLASH 产品,W25X16 的容量为 16Mb,还有容量更大的W25X32/64,ALIENTEK 所选择的 W25X16 容量为 16Mb,也就是2M 字节,同AT45DB161 是一样大小的。 W25X16 将 2M 的容量分为 32 个块(Block),每个块大小为64K 字节,每个块又分为 16个扇区(Sector),每个扇区16页 4K个字节。W25X16的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25X16 开辟一个至少 4K 的缓存区,这样对 SRAM 要求比较高


对于Ram 小的系统 开辟4K空间过于紧张,分配更小的Ram空间 如何使用这个芯片存取 一些数据呢?
主要是存一些配置信息,数据量大概几个扇区,但是每次修改只有几十个字节

有没有什么好的方法?




芯片手册上说 具备页编程指令
但是试了下不具备页擦除









stm1024 发表于 2018-10-17 09:58:41

本帖最后由 stm1024 于 2018-10-17 10:00 编辑

50031185 发表于 2018-10-16 18:15
需要能够读取或修改部分数据
我想我知道你的问题本质了。你的想法是,已经把数据写入到了W25,然后发现需要修正1个字节。但是这个时候W25已经被写入了数据,如果你想写入新数据,就要先擦除原来的数据,一擦除就是一个sector,所以必须想办法保存原来的数据,你的想法是在RAM中开辟一个缓冲区,然后先读数据,然后在RAM中修改,然后擦除W25,最后再写入。
如果我没理解错的话,给你的建议是这样的:
1.你没必要把缓冲区完全放在宝贵的RAM中,可以把W25作为一个二级缓冲区,例如W25的最后一个Sector,这个位置可以固定,然后一般的数据也不要往这里面写入。在RAM中只保留一个很小的一级缓冲区,例如一个页面,16Byte,这个大小对应该RAM来说应该毫无压力了吧?
2.现在有一级缓冲区,也有二级缓冲器了,如何使用呢?先按sector删除二级缓冲区,这样二级缓冲区就变成可用状态了。对于你需要读取并修改的数据,先按页读取到一级缓冲区中,如果不需要修改,则直接写入二级缓冲区的对应位置,如果发现需要修改,则修改后写入二级缓冲区的对应位置;循环执行页读取,直到操作完成整个sector。
3.执行完第二步以后,原Sector数据没变,新数据被写入到了二级缓冲区里面了,最后一步就是把最后一个sector的数据copy到原需要修改的sector中,这个可以采用2类似的操作。
这种方法不是太高效,有点像是用时间换空间的感觉,但本质上空间并没有省去,相反时间也增加了{:3_55:}。只是把RAM的空间换到外部的ROM中了,唯一的优点可能是选择芯片的时候对内部flash要求每那么大了。

stm1024 发表于 2018-10-16 18:11:13

如果只是写入,你没必要去开辟一个这么大的缓冲区。
我测试过,只写一个字节的数据都是可以的。
甚至可以跨页写都行(需要注意分页)。
只是擦除的时候最小单位是扇区而已。

50031185 发表于 2018-10-16 18:15:22

stm1024 发表于 2018-10-16 18:11
如果只是写入,你没必要去开辟一个这么大的缓冲区。
我测试过,只写一个字节的数据都是可以的。
甚至可以跨 ...

需要能够读取或修改部分数据

化雨眠 发表于 2018-10-17 07:59:33

本帖最后由 化雨眠 于 2018-10-17 08:44 编辑

50031185 发表于 2018-10-16 18:15
需要能够读取或修改部分数据
如果重复的往一个地址读写,你直接写就行,不需要擦除该地址里的数据,不过这个得是eeprom

发表于 2018-10-17 08:26:15

我用的时候,使用的macoll申请一个临时空间使用。每个地址是只能写入一次,下次写入时必须要擦除才能写。

stm1024 发表于 2018-10-17 09:43:42

化雨眠 发表于 2018-10-17 07:59
如果重复的往一个地址读写,你直接写就行,不需要擦除该地址里的数据,不过这个得是eeprom

...

这个好像真不行。W25X16好像是你要写数据之前都要先擦除变为FF后才能写入。直接写入会失败。

tanic 发表于 2018-10-17 09:52:55

写入flash的数据不一定要地址连续,比如能开一个256字节的ram,那么一个扇区你就存256个字节数据,多的数据存到下个扇区,依此类推

50031185 发表于 2018-10-29 23:51:53

stm1024 发表于 2018-10-17 09:58
我想我知道你的问题本质了。你的想法是,已经把数据写入到了W25,然后发现需要修正1个字节。但是这个时候W ...

你说的办法很好, 确实是这样, 需要用时间换空间,目前来看, 大部分的单片机内存已经具备开辟4K缓存的条件

stm1024 发表于 2018-10-30 08:02:36

50031185 发表于 2018-10-29 23:51
你说的办法很好, 确实是这样, 需要用时间换空间,目前来看, 大部分的单片机内存已经具备开辟4K缓存的 ...
玩单片机,很多时候就是螺蛳壳里做道场,闪转腾挪
页: [1] 2
查看完整版本: 关于 W25X16 的用法