emmc和nand傻傻分不清

“逛丢一只鞋” “逛丢一只鞋”     2022-12-27     673

关键词:

1.背景

今天偶然在一个群里看到有人聊EMMC和Nand,相信很多嵌入式er都用过或者至少听说过这2种板载存储芯片,但是很多人不清楚这2种的差异,也不明白什么时候应该用EMMC什么时候用Nand,如何选择?今天我们就来聊聊这个问题。

2.Nand是这样的

Nand是一种flash,所以又叫NandFlash。大家知道Flash叫闪存(flash这个英语单词就有闪烁的意思),闪存这种存储设备是用电信号来做擦除和读写的。也就是说你可以把Flash看成是一个二进制数据仓库,你可以用电信号擦除它(清除掉仓库里的存货),也可以用电信号读取它(将仓库内存储的物品取出),也可以用电信号写入它(将物品放入仓库储存)。

好,问题来了,怎么去擦除、读写呢?这东西又听不懂人话,所以必须按照它的时序规则用电平信号和他交互。

上图中左侧是一个NandFlash实物图,大家可以看到有很多引脚。右侧是NandFlash和STM32单片机的连接接线图。

这些芯片上的引脚就是Nand和外界进行数据交流的通道。其中IO0-IO15是数据通道,通信时的地址和数据就是从这些引脚传输的。而CLE、ALE等剩余引脚就是时序控制线,用来做通信控制和同步。当然Nand工作时还需要供电的,图中并没有画出电源引脚但是实际是有的。

这就是NandFlash,通过很多个引脚(图中可见至少二三十个)和外界通信,很大的一个薄片状芯片。能存储数据。

常见Nand的容量一般几十Mb到几个Gb(注意存储设备的容量都是b而不是B),应该说容量不算大。

Nand内部的存储单元有两大类,MLC和SLC。具体的细节暂不去管,大家只需要知道SLC Nand容量小价格高,但是质量好不容易坏。而MLC Nand容量大价格便宜,但是质量不好容易出现坏块。其实不能说是质量好坏,而是工艺本身特性决定的,咱们反正是科普,就简单粗暴给他归个类吧。

3.Nand的优势和劣势

Nand的优势都是相对于它的前代产品来说的。在Nand之前,人类使用的大容量存储主要是磁性存储(软盘、硬盘)和光存储(DVD光盘),这些东西都不太完美。譬如光盘不能反复擦写而且读盘设备和盘片都经常坏(大家你想想家里老式光碟机是不是经常读不出盘),硬盘虽然今天也还在大量用,但是速度有极限并且体积太大,所以今天的高端笔记本电脑都不用机械硬盘改用SSD了(SSD其实也是Flash)。

我们主要讲讲Nand的劣势。

Nand的第1大劣势就是接口和时序不标准。大家可能没意识到,NandFlash其实是一个品类而不是一个固定产品,你去看全世界有多家公司都在生产Nand,但是他们的产品并不能直接通用,也就是说你不能把一款Nand直接替换另一款而不需改动软硬件。这就头痛了,麻烦的要死。

Nand的第2大劣势就是引脚太多,体积大。所以Nand芯片不能用在对体积要求很高的小型产品上,这极大限制了Nand的直接使用。

Nand的第3大劣势就是容量不能灵活控制。就算你用同一家厂商的Nand芯片,但是不同容量的芯片引脚接口和封装等也可能不同,这样你如果做产品时有不同容量版本的产品,还得分开设计,分开生产,很麻烦。

Nand的第4大劣势就是坏块的管理。存储设备其实就相当于有很多小房间的一个大仓库,而这个仓库的每个小房间都是独立的。因为技术原因有时候一些小房间就会坏掉,没法使用,那我们不可能因为一个小房间坏掉了就把整个仓库都丢掉吧?

于是乎人们就发明了坏块管理技术。也就是说我们去标记上每个房间是好的还是坏的,如果发现某个房间坏了那就标记成坏块,就不再使用这个房间了,而其他的好块还是可以继续用的。这种坏块管理技术可以很大程度延长Nand的整体寿命。

和坏块相似的还有个ECC(错误校验)问题。正常情况下Nand中每个好块中存储的数据都会一直保持正确,即使过了几年时间你去读他还是原来的数据。但是事实往往没有这么理想,有时候一些块中的某些特定位就是会在隔了一段时间去读取时发生了翻转,这里原来存进去是1结果读出来是0了。

这就难受了啊,最痛苦的是你也不知道原来存进去到底是1还是0,也不确定读出来的还是不是原来的数,所以搞得你没法相信任何一个数据,因为任何一个数据都有可能会翻转啊,那岂不是整个数据都不可信了。

解决办法就是ECC,我们写入时先用算法计算得到数据的ECC值,把ECC值和块内数据一起存入Nand中。待读出时也是把块内数据和ECC一起读出,然后再用相同的算法计算块内数据的ECC,和读出的ECC进行比较,如果相同就认为数据未发生任何反转,如果不同就认为数据已经发生变质,没法相信了。

本来有坏块标记和ECC技术,Nand已经挺好用了,也确实可以用了。但是麻烦的是Nand的ECC和坏块标记都需要主控CPU来做,Nand自己是不管的。所以使用Nand很麻烦,你得编程解决很多细节问题(时序、ECC、坏块管理)。

所以Nand最大的问题,其实就是不够好用。那怎么办呢?进化。

4.EMMC其实是从Nand进化而来

EMMC其实就是Nand包了一层后形成的。

EMMC内部真正用来存储的仓库就是Nand,而且EMMC基本都是MLC Nand,因为便宜啊。那EMMC解决了Nand的什么问题呢?

首先,EMMC是封装和引脚都是标准的。什么标准?就叫EMMC标准。所以EMMC这个词其实本来就是个接口标准名,符合EMMC接口的存储芯片就叫EMMC芯片。

这个标准体现在至少三个方面:物理封装、硬件电平和脚位、软件时序。所以所有的EMMC芯片,不管是哪家厂家的,不管是多大容量的,都可以直接替换使用。因为人家设计EMMC标准的时候就已经考虑到这种兼容和替换了(当然了,实际上EMMC也有好几种封装,但是一般硬件工程师做封装时都会考虑几种兼容的)。

所以EMMC解决了Nand的一个大问题,就是不同厂家和容量的存储芯片之间的替换问题,这个非常厉害。因为兼容可以方便备货,方便采购,方便替换,所以极大降低了产品设计和备货上的难度,极大降低了成本。

举个栗子,大家买手机都会发现现在的手机发布都有不同容量版本选择,什么256G、128G、64G版。你想想厂商和经销商要备货这么多种,多难受?但是如果用EMMC呢?所有的手机主板其实都是完全一样的,只是实际生产时贴上了不同容量的EMMC芯片而已。而且最重要的是软件上不用做任何改动,软件可以自适应不同容量的EMMC芯片。这样手机厂商就不用给不同容量的手机适配不同的操作系统镜像了啊,多省心。所以你明白为什么手机都用EMMC而不用Nand了吧

EMMC的引脚比Nand也更少,体积也更小。当然了EMMC体积小也有很重要原因是因为他采用了更先进的BGA封装方式。所以体积的优势也不算根本优势,如果Nand也用BGA封装也可以做的小,只是说Nand没这个必要性了。

最后,EMMC也解决了Nand的时序、坏块和ECC问题。本质上因为EMMC内部也是用Nand存储颗粒(而且是MLC Nand更容易坏)的所以也逃不过Nand的这些麻烦。但是EMMC芯片在内部内置了一个控制器(你可以理解为内部有个CPU且跑了一段固件代码),这个控制器解决了这几个问题,尤其是坏块管理和ECC的问题。

所以你做产品用Nand就麻烦,得自己操这些心。而你做产品用EMMC就省心了,自己不用管这些破事,EMMC全部帮你搞定了,何乐而不为呢?从这个角度讲EMMC好像自动挡汽车,而Nand好像手动挡汽车。(我发现我好喜欢用自动挡和手动挡的对比·····)

5.EMMC和Nand的性价比

有人说不对呀,看你说的EMMC明显比Nand好啊,为什么我发现EMMC好像还比Nand便宜呢?

EMMC从技术上确实比Nand好,但是也确实比Nand便宜。主要原因是成本并不只是由硬性成本决定的,还和市场、规模等因素有关。

EMMC便宜的一大原因就是因为标准化。标准就可以大规模生产,大规模流通,大规模压货,大规模使用。而用的多了产量大了,自然成本就低了。所以EMMC的大规模性就决定了他的成本很有优势。

EMMC便宜的另一大原因是内部使用MLC而不是SLC。实际上SLC的成本要远高于MLC的,但是市场上流通的Nand很多还是SLC,为什么?因为MLC“质量”太差了,太容量出现坏块和翻转等,所以广泛使用的Nand还都是SLC的。你如果直接用MLC Nand,那你的管理成本又很高,太麻烦了。而EMMC解决了这个问题,他内置的控制器很好的管理了MLC Nand,因此可以做到容量很大、使用简单,还便宜。

所以说,能干脏活就是生产力啊。

6.如何选择用哪个

实际项目中我们是用EMMC还是Nand呢?

实际上如果你的产品需要大容量(譬如超过8Gb也就是1GB或更大),那一定是EMMC更合适。性价比更高,且软件上更简单。

那什么时候用Nand呢?需要容量在几十MB(譬如64MB)到几百个MB(譬如512MB)之间的存储,且不在意体积,且对稳定性要求高的情况下,可以用SLC Nand。

那工业级和抗干扰方面呢?我并没有专业研究过,但是简单分析也知道,Nand在这方面肯定比EMMC好一些。毕竟EMMC是串行的要保证高速肯定总线速度高,而Nand是并行的总线速度肯定低。所以Nand应该要比EMMC皮实一些吧?

但是EMMC也是有工业级和消费级之分的,你做的产品真的是工业环境使用完全是可以用EMMC的,所以也不要鼓吹什么消费电子用EMMC,军工用Nand这种说法。

7.最后

实际上存储市场除了Nand和EMMC之外还有很多其他角色也都很厉害。

譬如Norflash、譬如近年来很火的spiflash(常见的是spinor,但是现在也有大容量的spinand了),譬如这两年创新设计的SDnand(相当于是贴片芯片样式的SD卡)。

技术其实一直都在创新。

最后,本文完全是从我的经验和积累来写,并没有严格查阅资料。限于水平和专业性,里面如果有错漏或者表达不当的地方,希望大家指正,共同进步。

javaspi和api,傻傻分不清?

最近新写了一个中间件「运行时动态日志等级开关」,其中使用JavaSPI机制实现了自定义配置中心,保证良好的扩展性。项目地址,走过路过可以点个star:)https://github.com/saigu/LogLevelSwitch在使用过程中,突然发现SPI其实和日常写A... 查看详情

cookiesession,token,还在傻傻分不清?

...样而已。本文分享自华为云社区《​​Session/Cookie/Token还傻傻分不清?​​》,作者:龙哥手记。相信项目中用JWTToken的应该不在少数,但是发现网上很多文章对token的介绍有误,所以对cookie,session,token作了一下对比(文中token指... 查看详情

erp系统和mes系统,不要傻傻分不清

...真的不太懂,刚接触erp跟mes的时候,对于两者的概念总是傻傻分不清楚,总是觉得既然都是为企业的信息化做贡献,那区别又是在哪儿呢?  然后经过一系列的搜索,现在终于有了一些概念了。  好吧,细细说来,ERP系统以... 查看详情

sessiontokenjwtoauth2傻傻分不清

...会涉及到权限、认证等类似的概念。但是很多小伙伴还是傻傻的分不清这些的概念和区别,今天我们就来好好的捋一捋,将其区别 查看详情

鉴权和授权,傻傻分不清

参考技术A面试时,有被问过什么印象深刻的问题吗?就是哪种好像答案在嘴边呼之欲出,但脑子刚好短路没答上来的问题。我提供一个,大家补充。WhatisthedifferencebetweenAuthenticationwithAuthorization?Authentication鉴权和 Authorization授... 查看详情

测试方案和测试计划,傻傻分不清?(代码片段)

1)测试计划与测试方案的区别:计划:属于组织管理层面的文档,从组织管理的角度对测试活动进行规划;方案:属于技术层面的文档,从技术的角度对测试活动进行规划。测试计划:对测试全过程的组织、资源、原则等进行... 查看详情

countdownlatch和cyclicbarrier傻傻的分不清?超长精美图文又来了

|好看请赞,养成习惯你有一个思想,我有一个思想,我们交换后,一个人就有两个思想IfyoucanNOTexplainitsimply,youdoNOTunderstanditwellenough现陆续将Demo代码和技术文章整理在一起Github实践精选,方便大家阅读查看,本文同样收录在此,... 查看详情

bionioaio,还傻傻分不清?(代码片段)

作者:rickiyang出处:www.cnblogs.com/rickiyang/p/11074238.html我们知道java的I/O模型一共有四种,分别是:传统的BIO,伪异步I/O,NIO和AIO。为了澄清概念和分清区别,我们还是先简单的介绍一下他们的概念,然后再去比较优劣。1.概念澄清1... 查看详情

http301302303307308傻傻分不清

http的重定向我们经常是张口就来,“小明,在nginx上做一个重定向就行了”。整个流程非常简单,服务端HTTP返回码是30x,头里面的Location字段代表新的URL。如下图所示:但重定向也还是有需要深入探讨地方ÿ... 查看详情

python接口自动化13-data和json参数傻傻分不清

前言在发post请求的时候,有时候body部分要传data参数,有时候body部分又要传json参数,那么问题来了:到底什么时候该传json,什么时候该传data? 一、识别json参数1.在前面1.8章节讲过,post请求的body通常有四种类型,最常见的... 查看详情

jwt和jjwt,别再傻傻分不清了!

点击关注公众号,Java干货及时送达jwt是什么?JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(... 查看详情

cookiesession,token,还在傻傻分不清?(代码片段)

...不一样而已。本文分享自华为云社区《Session/Cookie/Token还傻傻分不清?》,作者:龙哥手记。相信项目中用JWTToken的应该不在少数,但是发现网上很多文章对token的介绍有误 查看详情

cookiesession,token,还在傻傻分不清?(代码片段)

...不一样而已。本文分享自华为云社区《Session/Cookie/Token还傻傻分不清?》,作者:龙哥手记。相信项目中用JWTToken的应该不在少数,但是发现网上很多文章对token的介绍有误 查看详情

session/cookie/token还傻傻分不清?(代码片段)

Cookie、Session、Token傻傻分不清 Session/Cookie/Token还傻傻分不清?相信项目中用JWTToken的应该不在少数,但是发现网上很多文章对token的介绍有误,所以对cookie,session,token作了一下对比(文中token指jwttoken)相... 查看详情

python接口自动化13-data和json参数傻傻分不清转载

转至博客:上海-悠悠前言在发post请求的时候,有时候body部分要传data参数,有时候body部分又要传json参数,那么问题来了:到底什么时候该传json,什么时候该传data? 一、识别json参数1.在前面1.8章节讲过,post请求的body通常有... 查看详情

okr与影响地图,别再傻傻分不清

摘要:OKR和影响地图虽然都是为了一个目标去进行规划的方法,但是两者侧重的内容却不一致。本文分享自华为云社区《一分钟读懂OKR与影响地图》,作者:敏捷的小智。什么是OKR及影响地图OKR:ObjectivesandKeyR... 查看详情

均值与期望:傻傻分不清?

作者:一人文章大纲众多原因造成平均值与期望的混淆学习与应用过程当中对于二者“不加区分”二者联系十分紧密语言文化的影响区分平均值和期望明确平均值的研究范畴-数理统计明确期望的研究范畴-概率论大数定理的... 查看详情

npminstall-save和-save-dev傻傻分不清

本文原文地址:https://www.limitcode.com/detail/59a15b1a69e95702e0780249.html回顾npminstall命令最近在写Node程序的时候,突然对npminstall的-save和-save-dev这两个参数的使用比较混乱。其实博主在这之前对这两个参数的理解也是模糊的,各种查资... 查看详情