1、说明
1.0 整体架构
‘ EMMC最简单的可理解为带有控制器的FLASH,具体结构如下:
EMMC: Embedded multiMediaCard EMMC.
EMMC内部: host interface 、 flash controller 、 flash memory
1.1 flash memory 结构
EMMC 中一般都有4个分区:
- Boot Area partitions:支持EMMC 启动系统,该分区在EMMC上电后,可通过简单协议就可读取
- Boot Area partition 1
- Boot Area partition 2
- RPMB partition : replay protected Memory block,用于存放的数据不被非法篡改,如指纹,安全支付密钥等
- General Purpose Partitions: 存储系统或者用户数据,芯片出厂时,通常不存在,需主动配置
- User Data Area:主要用于存储系统和用户数据。通常在此区域分成:boot、system、userdata
1.2 FLash controller
flash 与 emmc 很重要的区别之一就是对于一些特殊功能储在的控制链路的位置:
- flash :仅有存储设备,ECC 和 坏块管理等都在host 侧
- emmc: ECC 和 wear leveling 块管理都在 EMMC的芯片侧, host侧秩序提供emmc Driver接口
几个关键词的实际含义:
- ECC : error checking and correcting,实现数据纠错(奇偶校验只能发现并不能纠错)。
- wer leveling: 跟踪flash存储空间的使用情况,使得每次数据的写入都能写入到不同的位置去,尽量减少内存控制的磨损程度。
- Bad Block management: :坏块管理,对memory中坏块进行标记
1.3 flash interface
如下为host和eMMC之间的接口定义:
- clk:时钟同步信号
- data strobe: 有的接口有,有的接口没有
- CMD: 信号用于host 的 command 和 device 的response
- data0 - 7 : 数据位
2、芯片电路参数
2.0 EMMC的工作模式
2.1 基本接口设计
十分注意:
对于EMMC的接口中,data strobe 可以不管,一般集成在主控或者不涉及。但是其他的线如CMD data 都需要额外挂接上拉电阻,防止总线出现浮空
如下图是JEDEC 中的标准描述,对每一个上拉电阻的设计都给出了推荐:
2.2 电源设计
EMMC 的电源分成了两个部分:
- VCC: 给存储供电
- VCCq: 给控制器供电
”“”“”“”“”“”额外注意: VCCQ的电压不能大于VCC的电压“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“
2.2.2 布线基本原则
- 去耦考虑
- 信号CLK、CMD、DQ和DS均做阻抗50Ω±10%匹配管控。
- 信号CLK、CMD、DQ和DS约束为同组信号,长度差控制在±50mil范围内。
- 所有信号线走线长度约束在2000mil以内,且注意使用IBIS模型进行仿真评估阻抗匹配和反射情况。
- 信号线有完整的参考层。
- 内部走不出来的信号可以从NC PAD走,不能从RFU PAD上走线。
- CLK和RST_N长度差在1000mil以内。
3、特别注意
3.1 NAND 的操作管理方式
单位换算:
1 (Device) = xxxx (Blocks),1 (Block) = xxxx (Pages)
1(Page) =528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes)
除OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC码)。
- OOB 区域,每个page都有,每512个字节有16字节的ODB; 因此,2K的page 就是64字节的Page
3.2 坏块
-
为什么出现坏块
- Nand flash 的工艺,不能保证其在整个生命周期中性能可靠,因此产生坏块 -
-
坏块分类
- 固有坏块:这是生产过程中产生的坏块,一般芯片原厂都会在出厂时都会将每个坏块 第一个page的spare area的第6个byte标记为不等于0xff的值。
- 使用坏块:Nand flash 在使用过程中,Block erase 或者 page program 错误的时候,就可以将其简单标记为坏块。新发现的坏块的第一个page 的spare area 的 第6个 Byte标记为 非0xff
-
坏块管理
- 1、 擦除块之前,需检查是否为坏块(spare 的 第6个字节是否为0xff),如果是0xff,就是好块,可擦除。否则为坏块,其不能擦除。
- 2、 这种操作方法可能会由于电压不稳定导致nand 操作错误(即本来是好块,但还是被标记成了坏块)
- 3、BBT: bad block table : 坏块表管理。
OOB是每个页都有的数据,里面存的有ECC(当然不仅仅);而BBT是一个FLASH才有一个;针对每个BLOCK的坏块识别则是该块第一页spare area的第六个字节。
3.3 坏块纠正
- Nand flash 出错一般不会造成block 或者 page 不能读取
- 如果page(512Bytes)中, 只有一个bit 或者几个bit 出错,ECC 能够纠正单bit错误和检测双bit错误,2bit以上不保证能检测到
3.4 补充
- 由于page program发现的坏块:如果变成时候出错就标记坏块,则需要把块里面的内容首先备份到新的好块里面,然后对此标记的坏块有可能本身是好块,造成”错杀“
- 补救方法如下: 完成备份后,再将此坏块进行擦除,如果block erase 错误,则说明该坏块是一个不折不扣的坏块。
- 每个block(块)的 第一页 的spare area 的第6个字节作为坏块标记” 这个是nand 厂商的默认约定“
- 为什么好块用0xff 来标记: nand flash的擦除实际是将所有的块变为1,写操作也只能将1变成0
4 总结
本文介绍了EMMC的基本结构,接口设计,电路设计,工作模式及特殊功能,包括ECC及坏块管理的基本逻辑