智能座舱之存储篇终篇---EMMC在车载上的趋势
作者 / 阿宝
编辑 / 阿宝
出品 / 阿宝1990(微信ID woabao1990)
前面机哥有详细的讲解过NAND FLASH的相关原理,有需要的同学,可以根据下面的链接进去琢磨琢磨,本期我们将讲解NAND FLASH的升级篇,EMMC。
EMMC其实就是Nand包了一层后形成的。Nand内部的存储单元有两大类,MLC和SLC;EMMC内部真正用来存储的仓库就是Nand,而且EMMC基本都是MLC Nand。Nand的接口和时序不标准,不同公司的Nand不能直接通用,甚至同一厂家不同容量的Nand的封装和引脚接口都不同,这对于产品开发比较麻烦;EMMC是封装和引脚都是标准的,可被兼容和替换。
Nand的引脚太多,体积大,不适合对体积要求很高的小型产品上;EMMC采用了BGA封装方式,相比于Nand小了那么一点。Nand的ECC和坏块标记都需要主控CPU来做;EMMC芯片在内部内置了一个控制器,这个控制器可以解决了坏块管理和ECC的问题。
EMMC 的发展历程
NAND Flash的存储单元从最初的SLC( Single Layer Cell), 到2003年开始兴起MLC (Multi-Layer Cell), 发展至今,SLC已经淡出主流市场,主流存储单元正在从MLC向TLC(Triple Layer Cell)迈进。纳米制程工艺和存储单元的发展,使得同样大小的芯片有更高密度和更多的存储单元,Flash得以在容量迅速增加的同时,还大幅降低了单位存储容量的成本。
但其弊端也轻易显现,从原来的1bit/cell发展到后来3bit/cell, 计算更为复杂,出错率不免更高,读写次数和寿命也会更短。在这种情况下现有MLC 和 TLC Flash 都需要搭配一颗高性能的控制芯片来提供EDC和ECC、平均擦写等Flash管理。
吃瓜群众:机哥,那我有一点不明白,EMMC也是最近几年才出现的,那么在出现之前都使用什么呢?
机哥:这个嘛,听我慢慢说来。
确实在智能机兴起之前,基本上就是诺基亚的功能机的天下,比如我们看看2009年诺基亚的神机5230,存储容量就是256MB,这个容量没有办法存储一部现在的高清视频,当时还是塞班系统,基本上没有应用APP的功能,就一些简单的听歌、打电话、简单游戏等功能,想想现在谁买一个新手机还不得64G容量以上,现在机哥32G的iPhone7 每天删图片和缓存都累死了,随便一个APP应用就几百MB了,微信聊天记录就占用10个G存储。
最开始功能机要想扩展存储一些视频或者照片怎么办,就是需要一个MicroSD卡,这个卡容量就是16G或者更大以上,当然也要当时的CPU主控芯片支持,诺基亚5230最大支持的扩展SD卡就是16G容量,不过这次扩展的卡的随着时间越来越久,擦写次数越多,寿命越短,读写速度变慢,而且如果振动情况下会存在接触不良的情况,所以不太适合用来存储一些软件和应用程序,只适合用来存储文件。
在功能机转智能机遇到的第一个问题,就是怎么把ROM的存储容量提高,NAND Flash单颗的容量已经提升到极限,也许你想说硬盘容量不是很大么,而且通讯速率也快,PCIE的接口,通讯速率杠杠的,用这个来做手机的存储,老铁没毛病。
但是你想想,大家使用过移动硬盘,一个500G的硬盘是有多大,如果放到手机里面,想想是不是又得回到大哥大的时代,哪怕是固体硬盘的体积也不小,会导致手机非常大。
iphone,iPAD带动了智能手机和平板电脑行业的迅猛发展,引发了电子产品更新换代,对存储硬件提出了更高的要求。多媒体播放、高清摄像,GPS,各色各样的应用以及外观轻薄小巧的发展趋势,要求存储硬件拥有高容量、高稳定性和高读写速度的同时,需要存储芯片在主板中占有更小的空间。然而NAND Flash 随着纳米制程和存储技术的主流趋势发展,性能却在不断下降。可擦写寿命短,出错概率高,读写速度慢,稳定性差。嵌入式存储芯片eMMC就可以弥补这个市场需求和NAND Flash发展的缺口。
两者的存储介质是一样的,都是Nand flash。
emmc=Nand Flash+控制器+标准封装。
emmc设备上有一个控制器,和嵌入设备的host控制使用emmc协议交互。对于host设备来说,只需了解emmc协议就能驱动emmc进行读写。emmc上的控制器负责具体的对memrory的管理。对于嵌入式设备厂商来说轻松很多。因为不需要了解各个nand产品的不同了。
eMMC采用统一的MMC标准接口, 把高密度NAND Flash以及MMC Controller封装在一颗BGA芯片中。针对Flash的特性,产品内部已经包含了Flash管理技术,包括错误探测和纠正,flash平均擦写,坏块管理,掉电保护等技术。用户无需担心产品内部flash晶圆制程和工艺的变化。同时eMMC单颗芯片为主板内部节省更多的空间。
可以看到EMMC的协议就是在MMC基础上发展过来,在2008年开始在JEDEC标准上出现了eMMC 4.3,到现在的主流产品eMMC 5.0。这些协议有什么区别呢,具体见下图。
主要是一些电压范围,通信速率上的明显的变化,比如V4.51的协议最大速度只能到200MB/s,而V5.01的协议是可以达到400MB/s。
车载电子常见eMMC的应用需求
1、eMMC常见分区
首先咱们来看看eMMC 的分区一般是怎么分的,就类似于咱们的电脑硬盘,一般分为CDEF几个盘,C盘大家都知道是放的Windows 系统文件,咱们一起来看看eMMC的分区有什么特点。
1.BOOT Area Partition 1 & 2
此分区主要是为了支持从eMMC启动系统而设计的。
该分区的数据,在eMMC上电后,可以通过很简单的协议就可以读取出来。同时,大部分的SOC都可以通过GPIO或者FUSE的配置,让ROM代码在上电后,将eMMC BOOT分区的内容加载到SOC内部的SRAM中执行。
2.RPMB Partition
RPMB是Replay Protected Memory Block的简称,它通过HMAC SHA-256和Write Counter来保证保存在RPMB内部的数据不被非法篡改。在实际应用中,RPMB分区通常用来保存安全相关的数据,例如指纹数据、安全支付相关的密钥等。
3.General Purpose Partition 1~4
此区域则主要用于存储系统或者用户数据。General Purpose Partition在芯片出厂时,通常是不存在的,需要主动进行配置后,才会存在。
4.User Data Area
此区域则主要用于存储系统和用户数据。User Data Area通常会进行再分区,例如,Android系统中,通常在此区域分出boot、system、userdata等分区。
其实对于咱们消费者来说,最关心的是有多少可以使用的空间,最关心的就是还有多少可用容量,这个容量就是User Data Area 区域,这个数据容量越大对于用户来说越友好。
2、车载电子对于eMMC容量的大小需求
我们先来看看常见液晶仪表对于eMMC容量的要求的诉求,下图是使用一个i.MX6DL平台的12.3寸全液晶仪表的项目,此时可以看到这个项目对于eMMC的容量诉求比较小,只需要533MB,最大的资源就是UI图片资源,因为好多汽车都需要有多套UI界面的需求,比如在汽车切换为运动模式的时候,此时的UI界面就比较炫丽,而切换到经济模式,此时就比较平和的UI,这样更能给用户更好的体验,所以仪表的存储大小主要是图片UI资源占用比较大。
上图可以看到eMMC容量需求是533MB,实际4G eMMC都绰绰有余了,为什么很多主机厂都选用8G 的eMMC,主要是现在小容量4G的eMMC基本上快淘汰了,只剩下镁光和闪迪有车规级的芯片,而且价格也同8G eMMC相同,交期还没有8G eMMC好,有93%的设计余量,容量浪费就浪费呗,反正价格和交期在那里。
我们在来看看中控导航主机对于eMMC的容量需求,在比较传统的不带在线地图的导航主机,可以使用8G eMMC就够了,主要是离线地图占用的最大空间。
从数据来看最大的部分是离线地图,如果是高清地图数据这部分接近10个G,如果安装一些应用,比如喜马拉雅、蜻蜓FM等等,这部分还需要预留给客户下载数据的空间,否则用户按照了这个应用也无法本地下载缓存,只能在线收听,这个是很不好的体验,所以正常情况下的中控导航主机的eMMC的容量普遍是32G。
从目前来看车载网关这部分的预留数据需要蛮大的,需要预留为后续的升级数据进行预留,而且还有可能下载高清地图的需求,所以至少16G EMMC容量才能满足。
而ADAS这部分处理雷达、图像等数据部分的控制器,主要是图像数据比较大,至少需要8-16GEMMC,仪表部分无论怎么样,其实处理的数据蛮少的,所以这部分的容量8G其实是已经绰绰有余的,不会把容量往上上升。
目前变数最大的就是中控导航这部分了,如果车联网的应用都集中在这部分,这个时候相当于手机要安装很多不同的APP,而且还有高清导航地图等数据,此时至少要128G以上的存储才能满足应用需求,甚至高达512G。
3、车载电子EMMC 的发展趋势
我们先来看看导航主机的eMMC的发展趋势,无论是技术还是容量,车载导航基本上都是复制着手机的发展趋势,最开始车载导航的地图都是使用外接的SD存储卡进行存储,要更新地图的时候,直接把SD卡取出来去4S店进行更新最新地图就行,而且每年都要付费。
现在手机的接口都从eMMC到UFS接口了,后续车载电子也会从eMMC接口变更到UFS接口了,我们再来看看为什么有这样的趋势。
上图就是UFS接口和eMMC接口的区别,内核都是NAND flash,在控制接口不同协议,通讯的速度eMMC 最大速度是400MB/s,而UFS 接口通讯最大速度是1160MB/s。
速度越快的优势也就越大,想想液晶仪表需要在开机的时候最快能够输出界面给用户,目前赛普拉斯的平台可以做到开机时间为0.7S,中控导航在用户点火倒车后需要在1.5S之内给用户输出倒车的图像,这个时候除了软件策略优化外,最最重要的就是软件的读取速度要快。
可以看到,UF2.1在850MB/s通讯速度下,比QSPI NOR FLASH的速度54MB/s要快10倍以上,此时启动64MB 的boot区域的数据只需要115ms,也就是0.1S,而使用NOR FLASH 需要1185ms,需要1.1S的时间,这个体验是极致的提升,这个仅仅是在开机速度,而且在文件或者音视频存储的时候也能更用户非常好的体验,比如你录制的一个比较大的视频,如果半天转圈不能存储下来,这个是非常影响用户体验的。
上图就是目前的eMMC的接口的协议发展历程,目前主要是UF2.0为主,而后续如果到了自动驾驶这一款,此时就需要PCIE 4.0接口的速度,这个时候很多图像原始数据都是存储在SSD的存储里面(类似于电脑的固态硬盘),每个模块都可以去访问这个接口,图像数据需要快速的能够读取出来给处理器进行数据处理。
4、自动驾驶对于EMMC的需求
目前的域控制或者后续的自动驾驶,基本上都需要使用到Hypervisor的技术,不同的操作系统共享同一个存储,通过虚拟化的内存隔离,防止存储越界。
上图是镁光对于自动驾驶中的eMMC的趋势的预测,目前主要是UFS接口的eMMC,而且不同域控制使用自己的eMMC,无法把不同域的进行共享。
中期发展阶段是使用中央处理器,此时都是共享一个硬件存储,接口需要为PCIE的SSD存储,速度才能达到自动驾驶的需求。
行车记录仪(DVR)中的TF卡后续会被eMMC替代
大家都有汽车的朋友,基本上都有行车记录仪(英文名简称DVR),当然这个行业的发展还得感谢专业碰瓷的朋友,没有他们的恶意碰瓷,行车记录仪发展也不会那么快。最近这些年,行车记录仪会作为一个车厂标配产品进行出货,但是比较有意思的是,车厂基本上不会配TF卡给客户,这个是为什么呢?
原因就是不同质量的TF卡的擦写速度不同,而且经常振动,导致这个接触不良,就会存在卡损坏,擦写久了以后,写卡的速度会下降的非常厉害,经常是半年左右就要更换一张卡,否则就损坏了。上图可以看到1200次擦除后的数据同最开始做对比,擦写寿命降低了30%,错误率增加了50倍,写卡速度也降低了90%,基本上就是处于报废边缘了。
而且还有一个重要原因,车厂如果要配卡,基本上都是符合车规基本的TF卡,此时这个价格就会比京东淘宝上的普通TF卡贵2-3倍,会让整个成本上升不少。
综合上述条件,成本上升不少,而且非常容易遭受用户投诉,这个得力不讨好的方式基本上就让车厂放弃了出厂配卡这个想法。
大家都知道,如果开车行车记录仪中存储的内容基本上是一周左右,因为那个存储卡的刷写都是覆盖方式,比如一个16G的TF卡,视频存储满了16G后才逐渐把前面的内容进行覆盖,所以如果哪天心血来潮要看一个月的视频数据,对不起,这个已经覆盖掉了。
为了改善用户自己配卡,经常接触不良,一年左右就要更换TF卡的尴尬体验,很多车厂都在评估使用内置的eMMC来改善这个问题。大概在1年前有一个车厂的项目评估把DVR的TF卡修改到eMMC的需求。
在从TF卡修改到eMMC,客户当时有三个要求,具体如下
1、满足75分钟的高清视频不删除后才运行覆盖擦除;
2、寿命要求满足行驶里程满足30W公里;
3、每天平均行驶4小时,需要满足10年行驶时间寿命;
咱们根据这个需求,来评估一下,看看多大的内存的eMMC能够满足客户要求。
75分钟高清视频的存储容量大小
1、1080P60视频1秒钟的数据量大小 = 2200 X 1125 X 60 = 148.5M,视频的格式是RGB888的传输格式,摄像头过来的信号基本上是YUV4:2:2,此时1S的数据量为100M。
2、客户要求至少满足75分钟的高清视频不删除后才运行覆盖擦除,那么75分钟的未压缩的最小容量计算为=100*60*75=450000M;也就是450G的容量;
3、H.264的最高压缩比为100:1,此时可以存储压缩后的数据,存储数据量为4.5G(当时选用的CPU平台的视频编码最大支持H.264,不支持H.265);
根据这个要求计算,eMMC的容量最小要求是4.5G即可。
寿命要求满足行驶里程满足30W公里;
要解决这个主要问题就是要满足eMMC的擦写寿命即可,我们要计算30W公里的时间,是否能在eMMC的擦写寿命周期以内。
首先还是确定一个概念,EMMC是NAND FLASH构成的,所以NAND FLASH的SLC、MLC、TLC在EMMC中同样存在,也会存在擦写寿命的困扰,正常SLC可以擦写的寿命是60000次,缺点是存储容量低,大容量的非常贵。
以8G MLC 的EMMC为例子,一般可以达到3000-5000次的擦写寿命,此时单次擦写循环可以录制2.2小时,5000次寿命的话,可以录制11000小时视频。
此时假如车子在城市里面行驶,按照大城市每天汽车最低平均速度,每小时车子行驶30公里计算,此时能保证车子行驶33万公里路程;
根据这个要求计算,eMMC的容量最小要求是8G即可。
每天平均行驶4小时,需要满足10年行驶时间寿命;
此时按照1分钟100M的数量量计算(这个数据是H.264压缩后的数据量),一天开车4小时的数据量就是23.4375GB,10年的数据量就是83.54TB。
可以通过上图闪迪的擦写寿命,此时闪迪的数据看到32G的寿命是96TB。
根据这个要求计算,eMMC的容量最小要求是32G即可。
根据客户的三个要求计算完后,此时的eMMC容量最少是32G eMMC,如果此时选用这个32G eMMC就可以满足客户需求,但是这个容量越高价格越贵,在eMMC4.5.1以上,有这么一个功能,可以把MLC存储格式修改为SLC,容量减少为一半,但是SLC的擦写寿命可以提高20倍,综合下来就是提高了10倍。
这里的方案就是可以选择16G MLC eMMC,可以把前面2个G依旧配置为MLC 格式的eMMC,主要用来启动程序部分,后面14G对半折旧为SLC格式,此时的擦写寿命提高了20倍,满足寿命要求。这样既能满足擦写寿命要求,又不需要很大成本去选择大容量的EMMC,比较好的解决这个问题。
eMMC 的关键性能及生产注意事项
吃瓜群众:EMMC的容量这么大,那我每次保存的电影都放置在这个区域里面,下次删除了,再保存新的电影,还是在这个区域不呢?
机哥:这个问题问的比较有水平,这个其实就是考验EMMC厂家的控制器的时候到了,怎么样均衡的处理存储区域,这是一个学问,其实类似于皇帝的翻牌,不能每次都翻同一个人,这样妃子受不了,皇帝也受不了,所以需要皇后来掌管这个翻牌的均衡性,雨露均沾。
由于闪存的可擦写次数是有限的,当某些数据被频繁修改时容易导致对应的块很快被耗尽使用寿命,从而导致整块盘无法使用,所以需要有一种技术来将这些块的擦写均摊一下,延长使用寿命。
首先看几个相关的基本概念:
因为闪存不能覆盖写,如果要修改已有的数据需要将原有的数据擦除再写入新的数据。被频繁修改的数据很烫,叫做热数据
而写入以后就很少修改的数据无人问津就像打入了冷宫一样,叫做冷数据。
已擦写次数较少的block,还很年轻,生命力强,所以叫做Young block。相对的 Old block就是已擦写次数较多的block,剩下的次数不多了。
闪存又贵还擦写次数那么有限的,这还怎么玩?于是有了Wear Leveling这样的技术通过磨损均衡来延长闪存的寿命。
在没有wear leveling的情况下,某些block很可能会被频繁的反复擦写,最终报废,降低了闪存的寿命。Wear Leveling技术就是将擦写操作均摊到各个block,以防止某些block被提前耗尽使用寿命。
Wear Leveling技术按算法分为动态和静态,按作为域分为本地和全局:
在车载领域重点使用的是Dynamic Wear Leveling 动态磨损均衡
当需要覆盖写的时候,新的数据写到free的page上,而旧的数据被标记为invalid,等待垃圾回收擦除。
从上图中可以看出2nd WRITE去改写LBA#6的数据,被写到了新分配的page并不是直接在原page上做修改。3rd WRITE也是同理,到Nth WRITE,数据已经被改写了N次,但是垃圾回收还没有发生,所以有很多的Invalid page。
对比上图垃圾回收的左右两个图,可以看到垃圾回收把Invalid的page都擦除了,而且数据LBA#6也被搬移到了新的block。这是因为就像开头说的,闪存擦除的最小单位是block,所以当block中有用户数据的时候是需要迁移的。
弊端:动态磨损均衡有一个明显的弊端是,当一个数据是冷数据,放在那里N久都没被修改的情况下,他所占用的block擦写次数很少,但是又不能拿来做磨损均衡。
通过上图可以看到,红色部分是系统区域的数据,这里需要注意的一点,系统OS区域的数据是不用来做磨损均衡的,只有用户使用的区域数据才能用来做动态磨损均衡。
吃瓜群众:机哥、机哥我再问一个技术问题,大家都说EMMC提前烧录了软件后,过了SMT会导致概率性的掉软件的情况存在,这个是真的不呢,是不是谣言哦,这个怎么可能掉呢?
机哥:这个嘛,还真不是谣言,你看看很多使用EMMC的厂家,这个烧录也是非常痛苦的一个过程,有的是前面通过烧录器提前烧录好后,过完SMT后,在DIP组装工序发现部分不开机,这个时候就非常痛苦,需要排查半天的问题。
最终定位到软件丢失,此时又需要重新烧录软件(如果是内置高清地图10G),经常是通过USB来升级,此时一台的烧录时间至少为15分钟以上。
这个十分影响产线的生产效率,如果不提前烧录,直接在后端进行烧录,此时就无法通过SMT后进行对应的功能检查,同时也需要大量的烧录工装,也是否影响整个生产节拍。为什么会发生掉软件的问题呢?
前面已经知道,TLC、MLC和SLC的差异,TLC制程的,比如在0-3.3V中要分离出8个等级,此时过SMT 245℃的回流焊接的时候,此时电平在里面极容易进行轻微放电,此时就可能把L5的电压修改到L4或者其他等级。
而SLC,只有高低电平的区别,此时这个反而没有那么容易放电跌落进去,范围分界线比较远,所以看到掉程序的都是MLC 制程以上的eMMC,而是数据都是放电导致,因为机器本身没有上电,不存在充电的情况,所以数据位的翻转都是由1修改为0的错误。
我们再来看看镁光推荐的解决方案,前面boot区域进行提前烧录,而且把数据格式由MLC修改为SLC格式,这样数据更稳定,占用的空间也不大,过完SMT后在进行,就可以选用比较灵活的选择烧录方式,比如U盘,比如网口等等。
还有的公司就是过SMT炉子之前不进行任何的烧录,过完SMT后再进行烧录,此时需要有对应的串口或者Jlink口,因为没有任何的boot是不能直接从U盘里面进行烧录的。
好的,到这里,咱们最小系统中的CPU、DDR、FLASH、eMMC的内容在车载领域的应用,设计以及发展趋势都讲解了一遍,下期咱们继续智能座舱中的其他内容。