eMMC vs Nand eMMC 和 Nand 是嵌入式系统中比较常见的两种存储介质。 区别它们有什么异同呢?通过下面这张图可以做一个简单的概括: 这里面的的 Host Processor 指的是我们嵌入式主板上的 MCU 或者 CPU,比如 S3C2440、i.MX6ULL,RK3399 这些嵌入式处理器。 可以看到 eMMC 其实是在 Nand flash 的基础上封装了一个 Flash Controller,然后和 Host Processor 连接,而 NAND flash 是直接和 Host Processor 连接。 如果找一块 Nand 或者 eMMC 的电路板,还是比较容易区分它们的: eMMC 一般是 BGA 封装,pin 脚在芯片底部,Nand Flash 一般是 TSOP 封装,芯片 pin 脚在芯片左右两边,所以从一般从芯片 pin 脚上就可以区分它们。 由于 Nand Flash 自身的特性,比较容易有坏块,而且有读写寿命限制,根据构造的不同(SLC、 MLC、 TLC),它的写寿命从 100000 次到 4000 次不等,所以我们在使用 Nand flash 的时候,并不是直接把数据写进去读出来这么简单,而是要通过一套叫做 FTL(全称 Flash translation layer) 的软件,对 Nand 进行管理,做坏块检测、ECC 校验,甚至读写速度优化。 FTL 软件的设计难度比较大,因此各大 SOC 芯片厂家一般都会投入人力去做专门优化,因而这部分软件一般也是不开源的。 所以如果我们在产品设计上想直接使用 Nand Flash,那就一定要在软件上实现 FTL,如果这方面经验丰富,可以自己设计,如果短时间做不出来,也有带有 FTL 功能的开源文件系统可以使用、比如UBIFS、JFFS2、YAFFS 等文件系统。可以看到,直接使用 Nand flash 的工作量还是比较大的。 为了解决这种问题,eMMC 出现了——一些具有强大 FTL 研发能力的厂家,比如三星、Sandisk,它们把 Nand flash 颗粒和 一个 MCU 作为 Flash Controller 封装到一起,在这个 MCU 上实现前面说的坏块检测、磨损平衡、读写加速等 FTL 功能,然后再通过一个标准的接口和 Host Processor 对接,Host Processor 只需要发送简单的读写命令,就可以实现数据的快速读写。一般情况下,一个 Flash Controller 可以和多个 Nand flash 颗粒封装到一起,而且 MCU 上面带有缓存,Host Processer 写过来一笔数据,Flash controller 可以把这笔数据并行分发到不同的 Flash 颗粒上,所以一般我们看到 eMMC 颗粒的读写速度要比单纯的 Nand Flash 快很多。 支持 eMMC 5.x 协议的 eMMC 顺序读速度可以达到 400MB 以上。 而单纯的 Nand,读写速度就慢了很多,只有几十 MB 甚至几 MB。 如何选型上面这两幅图分别来自东芝和三星官网,它们是比较专业的 Nand 和 eMMC 生产商。 这个表格里面有两个重要的参数,一个是容量,一个是工作温度。 单纯的 Nand Flash 一般容量都比较小,大部分 1GB ~ 16GB,而 eMMC 的容量就大了很多,能到 256GB。 温度和具体型号有关,有的最低温度可以到零下 40 度,有的只能工作在零度以上。 所以,如果你的产品需要考虑温度、容量,这就是两个很重要的选型依据,当然,价格上eMMC 一般会比 Nand 贵。 另外一个选型依据就是软件复杂度,eMMC 由于不需要 FTL,软件会简单很多,开源的 U-Boot、Linux Kernel ,只要有对应的 MMC 控制器驱动,拿来就能直接用,而 Nand 除了控制器驱动外,还要考虑 FTL,这个用起来会有很大的限制。 如果你的产品比较在意启动速度,数据读写速度,那一般你都需要选择性能更好的 eMMC。 如果是买开发板的话,我肯定选 eMMC —— 性能好,软件通用啊! 更多原创文章请扫码关注微信公众号:HackforFun
|