完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨,我在我的应用程序中使用SST26VF0闪存。我有来自微芯片站点的驱动程序,运行良好。我有应用程序,就像我在使用GPRS模块一样,并且向服务器发送分组。如果没有GPRS连接,系统将把分组存储到SST26VF01。当没有GPRS连接时:写数据分组。包大小最大为200字节。所以我把每个新包写到新页面。当GPRS连接时:从闪存中获取数据并发送给服务器。在实现这一点上我面临以下问题。如何搜索最后页面位置(在系统重置时,我们应该知道写入的最后位置闪光灯是什么,并且对于新的即将到来的数据包从相同的位置开始)2。由于我们不能明智地擦除这个内存页,你能否给我推荐任何算法,以便我能够有效地实现扇区擦除、块擦除功能。
|
|
相关推荐
19个回答
|
|
|
也许你应该看看像23 LCV1024,这是一个SRAM与电池备份?您可以像任何普通FIFO内存一样运行它,并将指针保存在第一页中。只是一个想法。闪光灯磨损速度快,不均匀,使用起来更复杂。
|
|
|
|
|
|
悲伤:设计完成了。硬件和我在一起。我们选择了闪存。
|
|
|
|
|
|
保留一个扇区,用于存储到发送的最后一页的索引。每次存储新包或删除一个包,就将新索引写入索引扇区中的下一个位置。当索引扇区已满时,擦除它并重新开始。在启动或重置时,搜索最后写入的索引(其余为0xFFFFFFFF),然后从那里开始。注意,擦除操作之间进行许多字节写入(对空白位置)不会影响闪存的持久性。
|
|
|
|
|
|
闪光耐力受什么影响?
|
|
|
|
|
|
你多久擦除一个块。
|
|
|
|
|
|
如果你还写页……对吗?
|
|
|
|
|
|
我将为存储地址保留一页。每次写入(地址将被更新)如果我们存储一个数据包。如果我们保存100000个数据包,这个内存区域将被写入100000次。之后它会被损坏,因为它的最大写入周期是100000。
|
|
|
|
|
|
我可以预订一个寻址页面。但是我不能去特定的位置写到它。因为它是页面可编程闪存。每次我需要给._page命令。它有100000擦除/页面程序周期。可惜:
|
|
|
|
|
|
文件系统如何处理?
|
|
|
|
|
|
我总是在产品中这样做。我有一个Flash FIFO.C代码,但不能真的让你拥有它!它允许多个流存储在基于Flash的FIFO中。对于Tip(我的方式):1将内存划分成块。如果足够小,可以使用闪光灯扇区大小。2。在每个块的开始处,您写一个头,该头包括一个块ID计数器和块ID检查,以确保它是有效的。计数器的范围必须至少为2X块的最大数目。每一个新的块都被赋予ID.的下一个值,让ID作为最大值的包,为每个新的块加上+++。也就是说,如果你有32767个块或更少,使用16位ID(0~0xFFFF)。3。在Read中,搜索所有只读取标题的块,然后使用块ID,您可以找到最新的和最老的块索引。对于16位无符号ID的情况,(Heal.Id- NeXeTiD&L.0x800 0U)找到最新的。还有!(Heal.ID-OlDeTiD&L.0x80U)和AMP;Health.NoTr寄)找到最老的。在每一个匹配过程中,你都要保持/更新NeeSeTeD和OLTDISD,并且总是匹配第一个有效块,如NeEthED和OldestID必须在正确的范围内工作。4。如果你使用一个小的块大小,你可以写1个记录每一个块,如果它是大的,你开发了一种方法来确定每个块已经被使用了多少。可能是通过搜索实际数据之后的0xFF字节,只要你的数据不包含0xFF。您不希望在块中写入索引/指针,除非可能是满的。这个系统允许整个或部分闪存被完美地使用。我确实改写头中的位,因为位总是可以从1变为0。这是一个很有用的标志,只能先更改或最后更改。我在EEPROM和Flash中使用过这个系统,它有256字节块和4K扇区块。
|
|
|
|
|
|
编写单个字节是没有问题的。我会为索引保留一个扇区,而不是一个页面,因为您不能擦除一个页面。扇区是可以擦除的最小大小。您可以在4k扇区中存储1k个地址,然后需要擦除它。也就是说,在该扇区耗尽之前有1亿个地址。
|
|
|
|
|
|
因为它是页面可编程存储器,每次我需要对页面进行编程时,我无法得到特定的地址并写入它。
|
|
|
|
|
|
您可以编写单位、字节或页,但只能将1更改为0或写入失败。您擦除以将所有页面再次改回1s。所以您可以将0xfe写到地址0以改变一个位,然后将0xfc写到地址0以改变另一个位,这样就可以了。
|
|
|
|
|
|
我用的是SST26VF032B闪存。因此,它没有对单个字节进行编程的指令。我们有对页进行编程的指令。您可以编写单个位、字节或页,但是只能将1更改为0,否则写入失败。您擦除以将所有页面再次改回1s。所以您可以将0xfe写到地址0以改变一个位,然后将0xfc写到地址0以改变另一个位,这样就可以了。
|
|
|
|
|
|
以前版本的Flash SST25VF0是字节可编程的,但现在已经过时了。
|
|
|
|
|
|
是的,页面程序命令就是您使用的。看看表5-1中的命令。它没有说256字节,而是说1-256字节。您可以对单个字节或任何数字进行编程,最多可达256(我在SST26VF016B上进行编程)
|
|
|
|
|
|
可以给我看代码吗?是的,页面程序命令就是您使用的。看看表5-1中的命令。它没有说256字节,而是说1-256字节。您可以编程一个字节,或者任何最多256字节的数字(我在SST26VF016B上完成)微笑:
|
|
|
|
|
|
这里的要点是,确保内部循环退出从而启动一个新页面的。您不能写出页面的末尾,否则数据将回绕到同一页面的开始。在开始处额外的SPI写入,而在结尾处读取的SPI,都在那里,因此代码被优化以允许SPI读-SPI写入在内部循环中彼此相邻,从而获得最大的吞吐量。您可以计算其他函数和常量,在编写命令和地址之后,FlashWriteCA()使CS保持在低位,而FlashCMD()执行CS=0、Spi Write命令、WaitSpi()、Spi read dummy、CS=1。
|
|
|
|
|
|
我遇到了同样的问题,并且使用了与Chris A类似的方案。我预订了两个闪存扇区,活动扇区和备用扇区。当要闪存的项目时,添加一个包含项目ID(可用于标识项目的唯一编号)、项目大小和状态的头部。状态开始时是“未使用”在写入闪存时被更改为“写入”,然后是“使用”,如果项目不再使用,则被“删除”。状态开始为0xFF(未使用),状态中的位从每个状态从1变为零。上电后,解析闪存,并创建一个基于RAM的表,将所有项目的项目号和闪存地址与“use”状态匹配。现在可以从这个查找表中读取项目。若要擦除项目,只需将状态从“已使用”更改为“已删除”。若要添加项目,请在闪存中的最后一个项目之后写入新项目。在某个时间点,Flash将满。当这种情况发生时,将所有“使用”项从活动闪存扇区移动到备用闪存扇区,并使备用扇区成为活动扇区。此操作将删除的项目留在后面,释放空间。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
5244 浏览 9 评论
2035 浏览 8 评论
1955 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3214 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2261 浏览 5 评论
779浏览 1评论
675浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
601浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
683浏览 0评论
580浏览 0评论
/7
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 00:43 , Processed in 1.738091 second(s), Total 114, Slave 98 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2877