这个主要是参考的Exynos4412 所用外存 —— eMMC这篇笔记。
?
?
问题引出:
Exynos4412所用外存不是原来的Nand Flash 与 Nor Flash,而是eMMC。eMMC是什么呢?和Nand Flash有什么区别呢?
?
?
eMMC是什么?
开发板学习中,听到这类英文缩写的模块时,如果不去了解就会感觉很复杂的样子,尤其是这种大小写混用的情形。
eMMC的全称是Embeded
MultiMedia
Card,也就是嵌入式多媒体存储卡的意思,相当于PC机的硬盘,只不过它是用于嵌入式Embeded的。
在不用eMMC的开发板上,比如2440、6410的开发板上,我们用的还是NAND Flash芯片来存储数据(NAND Flash和NOR Flash具体作用和区别还不是太清楚,大概就是这么个意思),NAND Flash作为一个硬件模块,必然会涉及驱动程序,我从mini2440开发板上截了个图:
?
?
?
?
左边原理图,右边是示意图。可以看到NAND FLASH硬件模块涉及到许多管脚线,比如:
?
?
?
?
其实从这么多的控制类管脚也可以看出,NAND FLASH电路模块是比较原始的,因为需要人为地完成许多控制命令的配置,事实也确实如此。大概要手工操作的管理有:
- ECC出错机制 Error Correcting Code
- 区块管理 Block Management
- 平均抹写存储区块技术 WearLeveling
- 低功耗管理掉电保护
- 错误探测和纠正
- 等等
?
?
我们发现这些功能其实都属于硬件本身的维护性质的管理,并不是核心功能,NAND FLASH的核心功能是当然是存储数据,也就是读数据和写数据。
以下是我自己想的,因为还没写过完整的NAND FLASH驱动:在NAND FLASH时代写驱动的人为了完成读写功能,还要完成许多额外的配置才行,而这些配置又严重依赖硬件,比如不同厂家的接口技术、不同工艺制程、各种兼容问题(具体的是什么我也不知道)。
这种情形就很不利于行业发展了,所以就出了一个标准,听到标准我们往往觉得太死板了,其实不然,没有标准你才会抓狂。标准的本质其实就是一种封装一种接口,把具体实现和应用分开了。
那么,如何对一个硬件模块制定标准呢?比如NAND FLASH,方法就是外加一个控制芯片,其实这不奇怪,比如我们的I2C不就有个控制器吗,UART也有个控制器,如果没有这些控制器,否则我们还得自己去控制时序。
?
?
好的,来看看eMMC的原理图(虽然有很多引脚,不过用到的不多)和示意图:
?
?
eMMC的设计概念,就是为了简化手机内存储器的使用,将NAND Flash芯片和控制芯片设计成1颗MCP芯片,手机客户只需要采购eMMC芯片,不需要处理其它繁琐的NAND Flash兼容性和管理问题。eMMC最大的优点,就是生产厂商可节省许多管理NAND Flash芯片的时间,不必关心NAND Flash芯片的制程技术演变和产品更新换代,也不必考虑到底是采用哪家的NAND Flash闪存芯片,如此,eMMC可以加速产品上市的时间,保证产品的稳定性和一致性。
eMMC说白了,其实就是在原有内置存储器的基础上,又额外加了一个控制芯片,最后再以统一的方式封装,并预留一个标准接口,以便手机客户拿来直接使用。这有点类似于联发科的MTK,或者是高通的Snapdragon解决方案,手机终端厂商买的不只是一颗CPU,而是一整套方案。如此一来,操作简化了不少,还避免了不同厂牌硬件之间的兼容性问题。
闪存Flash的制程和技术变化很快,特别是TLC技术和制程下降到20nm阶段后,对Flash的管理是个巨大挑战,使用eMMC产品,主芯片厂商和客户就无需关注Flash内部的制成和产品变化,只要通过eMMC的标准接口来管理闪存就可以了。这样可以大大的降低产品开发的难度和加快产品上市时间。
?
?
eMMC的结构与规格
MMC是一个行业标准接口,而内部实现则由具体的厂家自己实现。
eMMC ( Embedded Multi Media Card) 采用统一的MMC标准接口, 把高密度NAND Flash以及MMC Controlle封装在一颗BGA芯片中。
?
?
总而言之,言而总是,eMMC的优点有:
- 开发商不需处理其它繁复的NAND Flash兼容性和管理问题;
- 从而缩短新产品的上市周期和研发成本,加速产品退成出现的速度;
- eMMC单颗芯片为主板内部节省更多的空间;
- 标准的制定,无论对于芯片制造者还是使用者都是有积极意义的;
- 而所有这些又推动了技术的发展和进步。