xionggehao 发表于 2024-3-21 18:25:34

请教,SLC NAND Flash,如果只是读数据,会产生错误吗?

型号: 旺宏 MX30LF1G28AD,1G bit SLC NAND Flash。

芯片手册上要求的是 ECC 8bit/512B,我的使用场景是 出厂就把文件写入,写入完成后就把WP脚(write protect)拉低,使芯片写保护,在客户那里只是读文件。
请问这种使用场景,NAND会产生坏块或者位翻转吗,咨询代理,得到的答复是只要不写就没事。
我使用的 MCU NAND驱动程序只有lib,咨询MCU原厂,答复也是同样的,只读不会有问题。MCU NAND程序带有16 bit ECC校验。
实际的情况是,还是有少量产品在客户那里出现数据错误。
我的理解是这样的,NAND Flash只读的情况下,也会随机产生位翻转,MCU必须做ECC校验,把纠正后的数据重新写入NAND ,但是NAND 写保护了,写入数据失败,这样导致bit翻转积累越来越多,超过MCU ECC校验能力。
请教各位大神,不知我的理解对不对。

如果我的理解是正确的,用 ECC-FREE 的NAND能否解决问题。

akey3000 发表于 2024-3-21 18:25:35

本帖最后由 akey3000 于 2024-3-22 07:27 编辑

Nand Flash的位反转现象,主要是由以下一些原因/效应所导致: 1. 漂移效应(Drifting Effects) 漂移效应指的是,Nand Flash中cell的电压值,慢慢地变了,变的和原始值不一样了。 2.编程干扰所产生的错误(Program-Disturb Errors) 此现象有时候也叫做,过度编程效应(over-program effect)。 对于某个页面的编程操作,即写操作,引起非相关的其他的页面的某个位跳变了。 3.读操作干扰产生的错误(Read-Disturb Errors) 此效应是,对一个页进行数据读取操作,却使得对应的某个位的数据,产生了永久性的变化,即Nand Flash上的该位的值变了。

网上百度了下,对于slc nand,Read-Disturb Errors,这个错误发生,平均是要读到百万次。所以原厂或代理商的技术才会宣称只读不会出错。理论上,只读也会出错。

honami520 发表于 2024-3-21 18:30:08

没听说过读NAND会出错的,都是写入的时候出错。
1、你第一次写入的时候是不是就已经出错了(这个好测)
2、使用的过程中,是不是有干扰,导致破坏了nand中的内容(这个不好确定)

xionggehao 发表于 2024-3-21 18:33:20

honami520 发表于 2024-3-21 18:30
没听说过读NAND会出错的,都是写入的时候出错。
1、你第一次写入的时候是不是就已经出错了(这个好测)
2、 ...
(引用自2楼)

感谢!

1,基本可以排除,有的客户是用了几年才出问题,最近收到的不良品是用了大半年的。
2,这个难说,大致有哪些因素。

akey3000 发表于 2024-3-21 18:53:48

不操作都会出错,只读也会出错,但一般可以通过ecc纠正过来了

wye11083 发表于 2024-3-21 19:07:53

出错之后重新读一遍呢?不排除时序、温度、电压等造成的读错误。如果多次反复读取都是错的,则flash异常,只能加大ecc。

此外,标称8bit/512byte,一般是8bit的ecc纠错能力,这个是bch编码。理论上阈值应设高一些。如果检测到错误,则应在错误达到阈值之前就重新覆写一遍,避免变砖。

flash本身是会漏电的,放个几年是有可能掉数据,即使slc。曾经intel出过mlc的nor闪存,不知道是怎样保证存储寿命的。高温会造成数据丢失加速,所以大半年就掉数据的可以看看工作温度是不是好几十度。jedec规定工业级nand只需要保证25度下3个月即可,85度下的真实保持时间可能不到1周(以出现bit error为准)。

lhj200304 发表于 2024-3-21 19:15:14

xionggehao 发表于 2024-3-21 18:33
感谢!

1,基本可以排除,有的客户是用了几年才出问题,最近收到的不良品是用了大半年的。
(引用自3楼)

宇宙射线也会导致位反转。阿莫出品的盖格计数器不是一直在滴滴响吗?

cne53102 发表于 2024-3-21 19:18:14

会出问题,至少MLC会出问题。
还记得以前的黑白屏手机吧,有的用三四年会出问题,如果flash不会丢数据,就不会有烧字库的说法了。
还有那个时代的MP4播放器,应该是MLC,用了几年后死机概率增加,开始出现乱码,越来越严重,最终是必乱码退役。

焊接前烧写的数据不可靠,要焊接完成后再写数据。

ztg328 发表于 2024-3-21 21:33:47

nand,还是加上ubi文件系统吧

dz20062008 发表于 2024-3-22 06:55:13

本帖最后由 dz20062008 于 2024-3-22 07:03 编辑

如果没记错,flash是擦除后储存数据的电容失去电子,数据都为1。所以数据挥发是从flash擦除时刻开始倒计时的,随着时间流逝最终所有数据都变1。

slc nand 宣传的数据可以存储十年不丢失,实际不得而知。目前一部旧三星与一部诺基亚都是太久断电没开机所以系统关键数据挥发损坏,开机定logo,手机确认是放坏的不是用坏的,网上也找不到系统刷机修复了直接报废了。

flash让半导体存储变得廉价快速小巧,同样flash储存属于长时间不可靠存储也是事实,用flash就决定设备寿命平均十年一道坎。

akey3000 发表于 2024-3-22 07:31:51

我的理解是这样的,NAND Flash只读的情况下,也会随机产生位翻转,MCU必须做ECC校验,把纠正后的数据重新写入NAND ,但是NAND 写保护了,写入数据失败,这样导致bit翻转积累越来越多,超过MCU ECC校验能力。

如果MCU NAND程序带有16 bit ECC校验的话,逻辑上你应该观察不到“少量产品在客户那里出现数据错误”。出现bit翻转,可以通过ecc纠正过来,就不算出错。出错的概率的很小,就可以认为不会出错。能观察到“少量产品在客户那里出现数据错误”,概率一般就不低了。

xionggehao 发表于 2024-3-22 07:53:16

最佳答案给到10楼的朋友 akey3000 (提交最佳答案后,楼层变了)

感谢楼上所有朋友的帮助,截止当前所有其他楼层的朋友各打赏100汤圆,请大家喝杯咖啡{:handshake:}

iamseer 发表于 2024-3-22 08:56:29

本帖最后由 iamseer 于 2024-3-22 09:05 编辑

用 read-disturbance 做关键字查到了这篇文章
https://us.transcend-info.com/embedded/technology/read-disturbance



大概意思是说,当读取数据的时候,比如说读取浅绿那一行,读取的时候要往不读取的行(深绿)上加高压。但这一过程,会导致深绿上单元加一点电荷。重复次数多的话就会导致位从1变成0.

解决办法就是如果位错误足够多,就把它读出来写到别的块上去。

另外一篇nasa的文章: https://nepp.nasa.gov/files/13582/07-100%20Sheldon_JPL%20Distrub%20Testing%20in%20Flash%20Mem.pdf

有这么一段:
Read disturb can be reduced by minimizing excessive reads. The rule of thumb is no more than 1 million READ cycles (per block) for SLC, and a maximum of 100,000 READ cycles for MLC. If possible, the data should be read equally from pages within the block. If it is necessary to exceed the “rule-of-thumb” cycle count, then the data should be moved to another block and the original block should be erased. Each erase resets the read disturb cycle count.

读取干扰可通过尽量减少过量读取来降低。经验法则是,SLC 的读取周期(每个块)不超过 100 万次,MLC 的读取周期最多不超过 10 万次。如果可能,应从块内各页平均读取数据。如果需要超过 "经验法则 "规定的周期数,则应将数据移至另一区块,并擦除原始区块。每次擦除都会重置读取干扰周期计数。

另外我看了看ECC free的资料,似乎只是把ECC的负担转移给了NAND控制器。原理应该没变。

akey3000 发表于 2024-3-22 09:24:27

xionggehao 发表于 2024-3-22 07:53
最佳答案给到10楼的朋友 akey3000 (提交最佳答案后,楼层变了)

感谢楼上所有朋友的帮助,截止当前所有其 ...
(引用自12楼)

感谢选成最佳答案,但我有问国内最大FLASH原厂的FAE,回复说理论上只读不会位翻转,连位翻转都不会。但一个block区不读不写,过一段时间,是有概率出现位翻转的,这个原厂FAE是认同的。

xionggehao 发表于 2024-3-22 09:45:25

继续问:

MCU来处理BCH 校验,写入数据到主区的同时将BCH校验码写入到 spare区,读数据时,从主区读出的数据计算校验码跟spare区的校验码比对,来判断数据是否正确,如果发现校验错误且错误bit数没有超过BCH阈值,可以通过校验码纠正数据重新写入。

那么问题来了,如果是spare区的校验码出了问题呢,毕竟每次读主区都要同时读一下spare区,读的次数是一样的。

xionggehao 发表于 2024-3-25 09:14:32

iamseer 发表于 2024-3-22 08:56
用 read-disturbance 做关键字查到了这篇文章
https://us.transcend-info.com/embedded/technology/read-di ...
(引用自13楼)

朋友,你的答案也值得一个最佳,咖啡奉上,感谢

iamseer 发表于 2024-3-25 11:07:46

xionggehao 发表于 2024-3-25 09:14
朋友,你的答案也值得一个最佳,咖啡奉上,感谢
(引用自16楼)

我其实也从来没考虑过这种问题,但是查查这些信息也挺有意思。

我顺便查了一下NOR flash是不是也有这种问题。一般大家认为NOR flash是随便读的,毕竟单片机都用NOR flash做存储,读取次数都那么大,而且出问题那都是无可挽回。

但是,2008年英特尔有一篇论文Drain Read Disturb Assessment of NOR Flash Memory,虽然排版乱七八糟,但是提到,NOR flash也是有Drain Read Disturb这个问题的。尤其是MLC的NOR flash。论文里提到单元经过10K擦写后,再100K读取以后,单元电压变了80mV。这可靠性还是比NAND高不少。

xionggehao 发表于 2024-4-3 12:00:55

本帖最后由 xionggehao 于 2024-4-3 16:41 编辑

给大家汇报一下测试的效果,
型号:型号: 旺宏 MX30LF1G28AD
测试方法,随机找一个正常block,格式化,Page0 全部写 0x00(包括spare区,下同),Page1 全部写0x55,Page2 无写入(数据为0xFF),即然后开始读 1000万次。
结果:
Page0和Page2没有任何错误
Page1分别在分别在 280万次、580万次、870万次、875万次 各发生了一个bit错误,发生错误的位置不同,全部都是在主区,错误的bit是1变成了0。
发生错误的bit,每次重新上电开始读,最开始是正确数据,但是读几次以后(5~15次不等),就变成0。

型号:兆易 GD5F1GQ5UE,开启内部ECC,同样方法读16亿次,无错误。

新增测试:
型号:兆易 GD5F1GQ5UE,关闭内部ECC,同样方法读6亿次,无错误。

ztg328 发表于 2024-4-3 12:46:47

xionggehao 发表于 2024-4-3 12:00
给大家汇报一下测试的效果,
型号:型号: 旺宏 MX30LF1G28AD
测试方法,随机找一个正常block,格式化,Pag ...
(引用自18楼)

这就是我说的读也会出错,如果加入写,那么会更快,看来旺宏的不行啊,上次说是用了新工艺,导致容易出错

三年模拟 发表于 2024-4-3 12:52:23

xionggehao 发表于 2024-4-3 12:00
给大家汇报一下测试的效果,
型号:型号: 旺宏 MX30LF1G28AD
测试方法,随机找一个正常block,格式化,Pag ...
(引用自18楼)

苹果visionpro用的也是兆易芯

xionggehao 发表于 2024-4-3 14:48:07

三年模拟 发表于 2024-4-3 12:52
苹果visionpro用的也是兆易芯
(引用自20楼)

苹果上用的是兆易的norflash,可靠性要高很多

fcm32 发表于 2024-4-3 16:14:06

xionggehao 发表于 2024-4-3 12:00
给大家汇报一下测试的效果,
型号:型号: 旺宏 MX30LF1G28AD
测试方法,随机找一个正常block,格式化,Pag ...
(引用自18楼)

应该关掉ECC来测

xionggehao 发表于 2024-4-3 16:39:21

fcm32 发表于 2024-4-3 16:14
应该关掉ECC来测
(引用自22楼)

后面关ECC测试了,读了6亿多次没出错,就没继续测试了。
我把这句补充到原帖后面。

iamseer 发表于 2024-4-3 23:49:12

ztg328 发表于 2024-4-3 12:46
这就是我说的读也会出错,如果加入写,那么会更快,看来旺宏的不行啊,上次说是用了新工艺,导致容易出错 ...
(引用自19楼)

加入写的话应该反而会变好吧?如果是搬到新区块当然更好。即使在原位置重写,虽然会导致扣除寿命,但是所有单元里的电荷都会被复原?
页: [1]
查看完整版本: 请教,SLC NAND Flash,如果只是读数据,会产生错误吗?