写flash,要不要加个判断?
相关文章
这是我一个知识星球朋友的提问
刚开始我没有认真去思考这个问题,之后我仔细查了下资料,里面的内容还挺多。
先看看EMMC的结构
EMMC 是在nand flash的基础上增加了一个控制器,cpu和emmc交流实际上是和它的控制器进行交流。相当于emmc多了一个管家。
NAND FLASH的特点
1) 初始存储为1
2)写0只要操作一个page
3)写1需要操作整个block,1个block包含多个page
---
假装解释下为什么写 FLASH前,要先判断里面的内容
从读写速度上解释
上面是我从一个EMMC的规格书上截图出来的资料,EMMC的读写速度是不同的,不同的读写速度肯定是存在不同的读写时序,既然读写时序不同,那当然应该让代码越快越好。
所以,从这点上看,先读判断数值是应该的。
EMMC 可以无限次读写吗?
刚开始在微信群里面讨论的时候,得到的信息是,EMMC可以无限次读,但是不能无限次写。
因为写会意味着需要对存储区进行擦擦操作,这个我是可以理解的。
但是实际上是怎样的,我还是一知半解
然后,得到一个小姐姐指导之后,大概的理解是这样的。
EMMC完全写满后擦除算一次,普通的EMMC可以擦除3000次,所以容量*3000 就是EMMC可以写入的内容大小。「计算寿命这点我还是持怀疑态度」
后面查资料了解到,不同的flash颗粒,它的擦除次数和速度是不同的,这就是不能无限写的关键原因。
我们平时使用的EMMC是TLC种类,这样的EMMC一个cell有3个bit位,可以表示 2^3 = 8中电平状态。
状态越少,需要表示的电平就约不精细,计算也就会越快,当然了,价格越贵,体积会越大,这样反而不利于消费电子。
如上图,SLC的速度很快,只需要两个电压级别。
TLC的速度会比较慢,需要8个电压级别来表示。
为什么EMMC的规格书上面都不写上最大擦除或者写入的次数?「也就是emmc的寿命」
到目前我也没有得到特别准确的答案,有了解的同学可以在评论区回答。我猜测是,因为EMMC有控制器,如果你不断的擦除一个位置,即使的超过最大次数,但是因为EMMC的控制器存在,它可以改变实际存储的EMMC地址,让你做不到在同一个区域不断的擦除。再加上容量的不确定,就不好确定EMMC的寿命了。
特斯拉召回是怎么回事?
我猜测,可能这个系统上的EMMC配置很小,可能就真的存在某个程序在不断的写入,导致EMMC擦除次数达到上限。
参考:
https://blog.csdn.net/weixin_42151788/article/details/114577735
https://szlin.me/2017/08/23/kernel_seccomp/