Flash闪存技术

1 Mask ROM
Cartridges: ROM卡带, Character ROM (CHR ROM) and the Program ROM (PRG ROM). Both of them are Mask ROM.
SRAM or EEPROM: game status saving.
Moto 6502: 6502 -> ST7 -> STM8

2 HDD Low-level formatting
低级格式化历史:HDD一个完整扇区包括头部总计15字节的间隙(Gap)部分、同步(Sync)部分和地址标记(Address Mark)部分,总计512字节的数据(Data)部分,以及最后50字节的ECC部分,这些都是在低级格式化时所确定的。

SCSI指令Format Unit和Mode Select,可以一定程度改变HDD的工作模式,其中包括扇区尺寸。由于能够改变扇区的定义,所以这2个指令可以看着是对HDD的低级格式化操作。

3 NOR Flash
3.1 eFlash
embedded Flash,集成在MCU里的嵌入式NOR闪存,绝大部分MCU内部使用的是QSPI接口的NOR Flash(Winbond和GD),ST使用的是并行接口的NOR Flash。

3.2 QSPI NOR Flash之Top-Boot和Bottom-Boot
每个块的大小:64 KB
每个扇区的大小:4 KB
每个页的大小:256 B

顶部或者底部启动设备的启动代码和定制数据的大小一般比标准块小很多,为了避免浪费宝贵的空间,很多NOR Flash把第一块或最后一块分割为更小的子块,例如8KB。这使你更好的控制这些块的内容。

依赖于启动代码在NOR Flash中的所在位置,这些设备有两种风格:顶部启动和底部启动设备。这取决于CPU在重启动或者加电后从哪里获取指令:存储空间顶部(例如Intel)或者存储空间底部(例如Motorola)。一些NOR Flash可通过外部PIN脚来配置顶部或者底部启动。

总之,Top boot类型的Flash的小块(block)放在高地址位上,而Bottom boot类型的flash的小块(block)起始位置为0x000000。

4 NAND Flash
4.1 NAND Flash三种接口
1)Legacy
2)ONFI
3)Toggle DDR

4.2 NAND命令
read1:命令代码是00h/01h,分别读取上半页(A区)和下半页(B区)
read2:命令代码是50h,读取oob(C区)

第一个命令00h用来设置区域为0-255bytes的指针(A区)
第二个命令01h用来设置区域为256-511bytes的指针(B区)
第三个命令50h用来设置区域为512-527bytes的指针(C区)

NAND Flash一上电就进入read1 00h模式,所用page的528bytes数据会在12us内传输到数据寄存器。

4.3 Bad Block Management
Bad Block Table(BBT)一般放在block 0,因为第一块由厂家保证一定是好的,小页512字节的Nand OOB的第6个字节(大页2K的OOB第1个字节)表示是不是坏块(0xff表示好块,0x00表示坏块);QSPI NOR Flash的第一块或者最后一块一定是好的。

4.4 SLC和MLC使用的文件系统
SLC时代,与其一起成长的软件技术有YAFFS/YAFFS2,它是第一个专门为NAND设计的,并具有WL(Wear Leveling)和POR(Power off Recovery)功能的嵌入式文件系统;以及JFFS/JFFS2,建立可以挂载NAND Driver的MTD设备之上的日志文件系统。

MLC预期使用寿命约为3000次PE cycle(Program Erase),平均只需5到6年就达到了极限,而一般车辆的预期使用寿命要远大于这个年限。

5 eMMC和SD
5.1 电源定义
VCC:C=circuit表示电路,即接入电路的电压
VDD:D=device表示器件,即器件内部的工作电压
VEE:E=Emitter,发射极电源电压
VSS:S=series表示公共连接,通常指电路公共接地端电压

5.2 支持的频率种类(达到最大数据速率的前提是8根DATx)
Legacy SDR:26MHz,max_dtr - 26MB/s
HS SDR:High Speed Single Data Rate 52MHz,max_dtr - 52MB/s
HS DDR:High Speed Double Data Rate 104MHz,max_dtr - 104MB/s
HS200:High Speed 200MHz,max_dtr - 200MB/s
HS400:High Speed 400MHz,需要Data Strobe信号,max_dtr - 400MB/s

5.3 eMMC芯片架构ARC
PS3105-S5:Phison(Phison = “Five-Person”, 由五位Flash 研发经验超过14年专业人士创立),群联,采用ARC的SSD主控;该公司提供eMMC、UFS和SSD全系列控制器
SM2246EN:Silicon Motion, Inc.,慧荣科技,采用ARC的SSD主控;该公司提供eMMC、UFS和SSD全系列控制器
SiliconGo/YEESTOR:硅格半导体;该公司提供eMMC、UFS和SSD全系列控制器

5.4 命令和响应
5.4.1 命令
eMMC命令寄存器bit13-8:表示opcode,CMD0-63、ACMD0-63
eMMC超时寄存器bit3-0:表示DAT0-DAT3,哪个数据线超时
ACMD:Application Command

5.4.2 响应
R1表示响应长度是一个字节,R2表示响应长度是2个字节。
R1b和R1的区别:在DAT0上存在忙信号(busy)的传输,R1的bit7表示响应包中CRC是否有错误,1表示有,否则没有

5.5 eMMC5.1速度调试
5.5.1 速度调试
eMMC5.1支持的速度模式:DDR50、HS200 SDR、HS200 DDR(也叫HS400),代码中的配置如下例所示。
@ drivers/mmc/host/sdhci-pci-core.c
caps:MMC_CAP_1_8V_DDR
caps2:MMC_CAP2_HS400_1_8V | MMC_CAP2_HS200_1_8V_SDR

eMMC DTR低速的工作电压是3.3V,高速1.8V。类似于USB,低速全速DPDM是3.3V,高速DPDM是400mV。

in drivers/mmc/core/mmc.c
mmc_attach_mmc(struct mmc_host *host);  - eMMC异常时需要debug该函数
mmc_select_driver_type(struct mmc_card *card); - 设置驱动能力MMC_SET_DRIVER_TYPE_A{C/D}等类型

5.5.2 eMMC卡调试路径
/sys/class/mmc_host/mmcN/mmcN:00001
/sys/kernel/debug/mmcN

5.5.3 Android eMMC用户分区挂载路径
1)第一次挂载路径
/mnt/media_rw/

2)第二次挂载路径(使用mount的bind方式)
/mnt/runtime/default
/mnt/runtime/read
/mnt/runtime/write

5.6 CSD寄存器
struct mmc_ext_csd {}
card->ext_csd.cmdq_en

kernel parameter:mmc_cmdqueue=off

ps -A | grep mmc

5.7 eMMC分区应用实例
Android手机系统中,各个分区的呈现形式如下:
1)mmcblk0为eMMC的块设备
2)mmcblk0boot0和mmcblk0boot1对应两个Boot Area Partitions
3)mmcblk0rpmb则为RPMB Partition(Replay Protected Memory Block,具有安全特性的分区,指纹数据就是放在这个分区)
4)mmcblk0px为UDA(User Data Area)划分出来的SW Partitions
5)如果存在GPP(General Purpose Partitions),名称则为mmcblk0gp1、mmcblk0gp2、mmcblk0gp3、mmcblk0gp4

5.8 Tools
external/mmc-utils/
read_extcsd 
do_ffu (it is only for kernel version >= 4.4)
e2label

5.9 SPI模式
SPI通信模式共有0~3四种,他们的区别是时钟相位和极性。适用于MMC和SD的模式是mode 0(CPHA=0,CPOL=0),但是mode 3多数情况下也管用。
剪块透明胶带,粘住TF卡第1个脚(DAT2),插入USB读卡器,TF卡进入SPI模式。

5.10 SDIO
SDIO设备扫描从mmc_rescan函数开始,mmc_rescan函数中分别使用400k、300k、200k,100k的速率调用mmc_rescan_try_freq进行扫描,只要扫描到了设备,就会退出扫描。所以如果在400k速率时扫描到了SDIO设备,后面3种速率的扫描就不需要再执行。

CMD5响应格式为R4,返回的OCR(Operating Conditions Register)中包含3 bit的Number of IO functions,读出来的值是最大支持的功能索引。

6 SD卡LVDS接口
6.1 LVDS电流源
LVDS电流源串联在NMOS管的Source中,电流是3.5 mA,所以差分电压摆幅是3.5 mA x (100 // 100) x 2 = 350 mV。

6.2 Pin定义
1)第一排pin7和8在legacy模式下是DAT0和DAT1,UHS-II模式下是LVDS的参考时钟。
Pins 7, 8: RCLK+/-, Reference Clock, 频率范围从26MHz到52MHz
2)第二排4根长pin是VDD和VSS。
3)第二排4根短pin是2个LVDS Lane。
Pins 11, 12: D0+/-, Lane 0 Differential Data
Pins 15, 16: D1+/-, Lane 1 Differential Data

7 UFS
7.1 UFS Provision
[30th-Mar-2022]
UFS standard defines 2 provisioning types. One is full provisioning and the other is thin provisioning.

At the time of shipment of the device, all logical units except for RPMB and REPORT LUNS well known logical units are disabled. Therefore users must set following configurable parameters in Device Descriptor and Unit Descriptor before accessing logical units. Configured parameters are valid after a power cycle. Need do mapping of SCSI LUN id to UPIU LUN id (UFS Protocol Information Unit).

QFIL rawprogramX.xml中的physical_partition_number表示UFS的LUN。

7.2 UFS固件
UFS最大支持的LUN为8个,Linux内核中一般从sda到sdh。
UFS: Linux /dev/disk

UFS固件分成如下的三部分:
- 前端,host接口协议
- 中端,FTL(Flash Transport Layer)算法
- 后端,NFC(Nand Flash Controller)驱动

7.3 showcase
Samsung 8nm EA9 Android images are in UFS LUN0.

8 Abbreviations
MISO:mi s əu
MOSI:m əu si
QUP:高通平台的SPI总线和I2C共用core和引脚,称为QUP(QCOM Universal Peripheral);而UART和QUP又共用引脚,并且称为BLSP
DQS:Data Query Strobe,时钟CLK是被用来指引命令和地址的传输;而数据阀门信号DQS则是用来指引数据应该被传输到哪里去。DQS是一个双向总线,也是由和时钟同样的频率来进行驱动。
MfgTool:Freescale Manufacturing Tool
Nand Flash RBA:Reserve Block Area,预留块区
ONFI:Open NAND Flash Interface,上电时异步模式,下指令切换到同步模式(有CLK信号)
P/E循环:Nand Flash编程/擦除次数
POR:Nand Flash Power off Recovery,掉电恢复
​​​​​​​Qimonda: Qi + monda, monda means world
R/B#:Ready/Busy#
SAM:SCSI Architecture Model
SAS:Serial Attached SCSI
SBC:SCSI Block Commands,特定设备指令集
SPC:SCSI Primary Commands,基础指令集
TA:Trusted Application
VCCQ:VCC Quality,nand flash的供电电压

你可能感兴趣的:(Storage-FS,eFlash,NOR,Flash,SD卡LVDS,UFS)