找回密码
 立即注册
搜索
查看: 1445|回复: 16

[硬件] 请教个spi flash的问题

[复制链接]
     
发表于 2021-3-9 22:57 来自手机 | 显示全部楼层 |阅读模式
找不到人问,请教一下程序员论坛
spi flash的擦写寿命的最小单位是啥? bit?byte?还是扇区? 例如我重复擦写一个扇区,但只有第一个字节在擦写后置为0x00,是只有第一个字节的寿命缩短,还是整个扇区都会缩短?
谢谢大伙
回复

使用道具 举报

     
发表于 2021-3-9 23:40 | 显示全部楼层
擦除按块(block)来,但支持spi的flash一般集成了控制器,会做磨损的均衡。
回复

使用道具 举报

     
发表于 2021-3-10 00:16 来自手机 | 显示全部楼层
拯救节操希灵宅 发表于 2021-3-9 23:40
擦除按块(block)来,但支持spi的flash一般集成了控制器,会做磨损的均衡。

spi flash直接操作命令读写byte,连文件系统都不做没法均衡吧. 莫非还像ssd处理冷数据一样?
回复

使用道具 举报

     
发表于 2021-3-10 01:45 | 显示全部楼层
win8 发表于 2021-3-10 00:16
spi flash直接操作命令读写byte,连文件系统都不做没法均衡吧. 莫非还像ssd处理冷数据一样? ...

+1
正解
回复

使用道具 举报

     
 楼主| 发表于 2021-3-10 07:44 来自手机 | 显示全部楼层
我现在就是磨损均衡的问题,一个华邦的spi flash,容量是128MB,最小的擦除单位是128KB,我有一组小的数据也就几十字节,但这样一擦就整个block一起坏的话,按整个block做磨损均衡也太浪费了,是想看看能不能按字节做磨损均衡
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-3-10 08:18 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-3-10 08:37 | 显示全部楼层
我记得SPI基本读写命令是以Byte为单位,但flash芯片也会提供block读写模式。
如果你嫌block读写太大,可以仔细看看芯片的datasheet,应该有最基本的Byte读写的command。

以上并不确定,仅供参考。
回复

使用道具 举报

发表于 2021-3-10 08:55 | 显示全部楼层
擦除单位是一个擦除块,一个点坏了就是整个坏了,数据小不想每次擦那只能看看能不能弄个version号顺序写下去。当然以上只是软件开发(linux mtd/jffs2)的看法,做硬件的可能有其他思路。

  -- 来自 能搜索的 Stage1官方 Android客户端
回复

使用道具 举报

     
 楼主| 发表于 2021-3-10 11:01 | 显示全部楼层
妇女解放 发表于 2021-3-10 08:18
什么使用场景需要经常擦写spi呢?

是业务用的数据,用于数据索引号的掉电存储
回复

使用道具 举报

     
 楼主| 发表于 2021-3-10 11:03 | 显示全部楼层
汤大鸡 发表于 2021-3-10 08:55
擦除单位是一个擦除块,一个点坏了就是整个坏了,数据小不想每次擦那只能看看能不能弄个version号顺序写下 ...

是个方法,做个tag,一直遍历下去,如果到0xFF,就表示上一个tag有效,或者到末尾就认为最后一个tag有效,如果写满了就从头来

谢谢
回复

使用道具 举报

     
发表于 2021-3-10 11:28 | 显示全部楼层
spi flash的spi只是接口名称,具体得分是nor还是nand

32MByte及以下的是nor,不用做磨损均衡,按块擦按byte读写

32MByte以上的基本都是nand了,这个就得上文件系统做坏块管理和磨损均衡了,按块擦按页读写

另外spi nand flash是没有内置控制器的,不想自己搞坏块管理和磨损均衡请上SD卡和emmc
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-3-10 11:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2021-3-10 12:21 | 显示全部楼层
lyzsuper 发表于 2021-03-10 11:03:37
是个方法,做个tag,一直遍历下去,如果到0xFF,就表示上一个tag有效,或者到末尾就认为最后一个tag有效,如果 ...
掉电情况的话,为了防止擦除中掉电最好做两个擦除块的切换。然后每次写的东西也可以加个crc什么的防止数据跳变。

  -- 来自 能看大图的 Stage1官方 Android客户端
回复

使用道具 举报

     
发表于 2021-3-10 16:16 | 显示全部楼层
妇女解放 发表于 2021-3-10 11:47
挺好奇现在的路由器刷机是怎么处理的,如果nand本身就有坏块了,用编程器直接刷是不是直接就写到坏块上了 ...

一般路由器用的都是nor,编程器夹上直接刷就得了,nand的一般都是进bootloader挂上文件系统再写入
回复

使用道具 举报

头像被屏蔽
     
发表于 2021-3-10 17:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2021-3-10 18:01 来自手机 | 显示全部楼层
泥潭做嵌入式的这么多啊?那我侧重问下,有需要核心板的么?
回复

使用道具 举报

     
发表于 2021-3-10 18:48 | 显示全部楼层
妇女解放 发表于 2021-3-10 11:47
挺好奇现在的路由器刷机是怎么处理的,如果nand本身就有坏块了,用编程器直接刷是不是直接就写到坏块上了 ...

对于nand,有一块区域是记录坏块信息的,nandflash的编程器自己也会检查坏块的,然后新的坏块会标记的,然后跳过写到下一块去。bootloader也会跳过坏块的,但是如果bootloader自己的地方坏掉了就gg了,这也是部分soc有多个boot addr的原因,方便做双boot。额外提一点,nand有一种加密的思路是把坏块表用自己的算法映射一下,然后编程器读出来都是坏块。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-24 13:17 , Processed in 0.104291 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表