请教个spi flash的问题
找不到人问,请教一下程序员论坛spi flash的擦写寿命的最小单位是啥? bit?byte?还是扇区? 例如我重复擦写一个扇区,但只有第一个字节在擦写后置为0x00,是只有第一个字节的寿命缩短,还是整个扇区都会缩短?
谢谢大伙 擦除按块(block)来,但支持spi的flash一般集成了控制器,会做磨损的均衡。 拯救节操希灵宅 发表于 2021-3-9 23:40
擦除按块(block)来,但支持spi的flash一般集成了控制器,会做磨损的均衡。
spi flash直接操作命令读写byte,连文件系统都不做没法均衡吧. 莫非还像ssd处理冷数据一样? win8 发表于 2021-3-10 00:16
spi flash直接操作命令读写byte,连文件系统都不做没法均衡吧. 莫非还像ssd处理冷数据一样? ...
+1
正解 我现在就是磨损均衡的问题,一个华邦的spi flash,容量是128MB,最小的擦除单位是128KB,我有一组小的数据也就几十字节,但这样一擦就整个block一起坏的话,按整个block做磨损均衡也太浪费了,是想看看能不能按字节做磨损均衡 我记得SPI基本读写命令是以Byte为单位,但flash芯片也会提供block读写模式。
如果你嫌block读写太大,可以仔细看看芯片的datasheet,应该有最基本的Byte读写的command。
以上并不确定,仅供参考。 擦除单位是一个擦除块,一个点坏了就是整个坏了,数据小不想每次擦那只能看看能不能弄个version号顺序写下去。当然以上只是软件开发(linux mtd/jffs2)的看法,做硬件的可能有其他思路。
-- 来自 能搜索的 Stage1官方 Android客户端 妇女解放 发表于 2021-3-10 08:18
什么使用场景需要经常擦写spi呢?
是业务用的数据,用于数据索引号的掉电存储 汤大鸡 发表于 2021-3-10 08:55
擦除单位是一个擦除块,一个点坏了就是整个坏了,数据小不想每次擦那只能看看能不能弄个version号顺序写下 ...
是个方法,做个tag,一直遍历下去,如果到0xFF,就表示上一个tag有效,或者到末尾就认为最后一个tag有效,如果写满了就从头来
谢谢 spi flash的spi只是接口名称,具体得分是nor还是nand
32MByte及以下的是nor,不用做磨损均衡,按块擦按byte读写
32MByte以上的基本都是nand了,这个就得上文件系统做坏块管理和磨损均衡了,按块擦按页读写
另外spi nand flash是没有内置控制器的,不想自己搞坏块管理和磨损均衡请上SD卡和emmc lyzsuper 发表于 2021-03-10 11:03:37
是个方法,做个tag,一直遍历下去,如果到0xFF,就表示上一个tag有效,或者到末尾就认为最后一个tag有效,如果 ...掉电情况的话,为了防止擦除中掉电最好做两个擦除块的切换。然后每次写的东西也可以加个crc什么的防止数据跳变。
-- 来自 能看大图的 Stage1官方 Android客户端 妇女解放 发表于 2021-3-10 11:47
挺好奇现在的路由器刷机是怎么处理的,如果nand本身就有坏块了,用编程器直接刷是不是直接就写到坏块上了 ...
一般路由器用的都是nor,编程器夹上直接刷就得了,nand的一般都是进bootloader挂上文件系统再写入 泥潭做嵌入式的这么多啊?那我侧重问下,有需要核心板的么? 妇女解放 发表于 2021-3-10 11:47
挺好奇现在的路由器刷机是怎么处理的,如果nand本身就有坏块了,用编程器直接刷是不是直接就写到坏块上了 ...
对于nand,有一块区域是记录坏块信息的,nandflash的编程器自己也会检查坏块的,然后新的坏块会标记的,然后跳过写到下一块去。bootloader也会跳过坏块的,但是如果bootloader自己的地方坏掉了就gg了,这也是部分soc有多个boot addr的原因,方便做双boot。额外提一点,nand有一种加密的思路是把坏块表用自己的算法映射一下,然后编程器读出来都是坏块。
页:
[1]