搜索
bottom↓
回复: 13

STM32驱动nand出现异常,帮忙分析下

[复制链接]

出0入0汤圆

发表于 2022-8-9 09:29:03 | 显示全部楼层 |阅读模式
在项目中使用STM32H7驱动MXIC的一款nand flash(不带ECC)。
MCU支持OTA功能,以及Bootloader也支持对应用固件的升级,升级过程中bin保存在nand中,最近在小批量生产(几百片)中出现一些升级之后固件运行异常(卡死)的现象。为此将OTA之后的MCU执行位置的固件读出,与原始bin进行比较,发现有几个bit发生了翻转,因在使用nand过程中没有增加ECC以及坏块记录,是有这种可能的。
为了验证是nand坏块导致的做了以下几个测试,测试结果不一致,想问下是什么原因导致的:
测试一:
    剔除OTA的数据传输部分,直接在代码中将固件复制一份烧写到nand中,烧写完毕后再读出,并与固件进行对比,发现bit错误。具体步骤如下:
        1. 擦除nand中对应的块,擦除完毕后全部读出,确认都是0xFF
        2. 从MCU内部Flash读取固件,并将内容按页写到nand中,写过程中没有报错
        3. 从nand中读取刚刚写入的固件,并于MCU内部Flash中的固件进行对比,发现有bit翻转,多次测试每次翻转的位置不完全相同,但都集中在那几个位置。
测试二:
    因上面的位翻转出现的位置不统一,想通过写入特殊值,找到所有的会产生翻转的bit。具体步骤如下:
        1. 擦除nand中对应的块,擦除完毕后全部读出,确认都是0xFF
        2. 写入0x00到nand中对应的block,写过程中没有报错
        3. 将刚刚写入的block的数据读出,与0x00进行对比,发现所有bit没有错误
        4. 重复上述1-3的测试,但是将测试数据分别换成0xA5、0x5A、0xFF,测试都正常。

问题:上面2个测试中出现的这种不一致,测试一看起来应该是有bit翻转,但是位置不完全相同,测试二写入特殊值的并读出,却没有发生错误,这是什么原因?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入442汤圆

发表于 2022-8-9 09:39:35 | 显示全部楼层
本帖最后由 wye11083 于 2022-8-9 09:40 编辑

NAND不保证可靠性,只保证LBA0不是坏块。SLC NAND至少要纠>=1bit/512B错误(新的1ynm SLC也需要>=10bit/4KB纠错能力),MLC要>=20bit/4KB(新的甚至>=40bit/4KB),TLC就不用说了吧,现在的SSD主控LDPC纠错能力普遍>=160bit/4KB。

你要存固件的话,没有纠错必须使用NOR Flash。NOR通常要求在P/E<=10000次时保证至少10年可靠性。

出0入0汤圆

 楼主| 发表于 2022-8-9 09:52:03 | 显示全部楼层
wye11083 发表于 2022-8-9 09:39
NAND不保证可靠性,只保证LBA0不是坏块。SLC NAND至少要纠>=1bit/512B错误(新的1ynm SLC也需要>=10bit/4KB ...
(引用自2楼)

感谢回答,目前已经准备把OTA时候的固件放到MCU内部了,2MB,实际固件才300多KB。
这是第一次在项目中使用nand,目前的nandbit翻转的现象与我所了解到的现象不太一样。我认为某个bit坏了,那应该每次写入,或者写入任意值,这里都是不对的。但是从测试来看却不是这样,还是说我对nand坏块表现想象的太简单了。
下面这个是我做了4次测试,出现bit翻转的地址:
第一次:A2B6、194BD、2F2D3、3E652
第二次:A2B6、194BD、3E652
第三次:A2B6、194BD
第四次:A2B6、3E652、4C0CB
在第一次测试出现bit翻转的位置,有些在第二次、第三次没有出现,第四次又出现新的bit翻转的位置。

出0入59汤圆

发表于 2022-8-9 10:35:47 | 显示全部楼层
wzd5230 发表于 2022-8-9 09:52
感谢回答,目前已经准备把OTA时候的固件放到MCU内部了,2MB,实际固件才300多KB。
这是第一次在项目中使 ...
(引用自3楼)

你不是把NAND 当NOR FALSH 用吧? NAND FLASH  得配套 YAFFS2这个带坏块管理和平衡读写文件系统的才行;

总之,用NAND 就是麻烦

出0入0汤圆

发表于 2022-8-9 10:49:49 | 显示全部楼层
使用  nor flash 的 spi 接口的 flash 是非常好的选择,当然也可以选择 qspi 接口的,速度比 nand 快很多很多倍

出0入0汤圆

 楼主| 发表于 2022-8-9 11:00:06 | 显示全部楼层
polarbear 发表于 2022-8-9 10:35
你不是把NAND 当NOR FALSH 用吧? NAND FLASH  得配套 YAFFS2这个带坏块管理和平衡读写文件系统的才行;
...
(引用自4楼)

现在没有用yaffs和ECC,因为有部分存在里面的数据不允许出错,现在准备放到MCU内部的nor中存储了。
就是对nand坏块中bit翻转的表现优点不理解,竟然会时对时错。刚和MXIC的FAE沟通,说是bit翻转就会这样,时对时错。

出0入0汤圆

 楼主| 发表于 2022-8-9 11:00:40 | 显示全部楼层
hpdell 发表于 2022-8-9 10:49
使用  nor flash 的 spi 接口的 flash 是非常好的选择,当然也可以选择 qspi 接口的,速度比 nand 快很多很 ...
(引用自5楼)

nor比较贵了,我们应用中的数据需要128MB的存储,这么大容量的nor得要五六十了。

出0入115汤圆

发表于 2022-8-9 11:02:04 | 显示全部楼层
怎么不用sd nand 这个自带ecc 磨损均衡

出0入115汤圆

发表于 2022-8-9 11:03:46 | 显示全部楼层
频繁写的话不建议用nand flash。还是emmc或者上面所说sd nand

出0入59汤圆

发表于 2022-8-9 11:15:19 | 显示全部楼层
hpdell 发表于 2022-8-9 10:49
使用  nor flash 的 spi 接口的 flash 是非常好的选择,当然也可以选择 qspi 接口的,速度比 nand 快很多很 ...
(引用自5楼)

NOR FLASH SPI 接口的就是类似W25QXX  这类器件很慢的啊,擦除一个块得上100ms;

而NAND FLASH 一般都在1ms内

NOR FLASH 就是龟速

出0入0汤圆

发表于 2022-8-9 11:52:10 | 显示全部楼层
可以考虑使用带控制器的spi nand 或者SD nand。由控制器负责纠错和坏块管理。

出0入0汤圆

 楼主| 发表于 2022-8-9 16:37:47 | 显示全部楼层
xinyou 发表于 2022-8-9 11:52
可以考虑使用带控制器的spi nand 或者SD nand。由控制器负责纠错和坏块管理。
(引用自11楼)

是个好办法。
有pin-2-pin自带ECC的,但是bit错误超过ECC纠正范围时,就无法纠正了。坏块管理才是王道。

出0入0汤圆

发表于 2022-8-9 22:00:05 | 显示全部楼层
可以直接用rl-flashfs,专门针对nandflash的坏块管理,平衡擦除算法

出100入312汤圆

发表于 2022-8-10 06:26:52 来自手机 | 显示全部楼层
学习,收藏
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 18:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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