Flash闪存技术_embedded flash-程序员宅基地

技术标签: SD卡LVDS  UFS  Storage-FS  NOR Flash  eFlash  

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 NVMe
Apple acquired Anobit in 2011, Anobit MSP20xx (Memory Signal Processing) is a NAND flash controller.
Apple NVMe controller uses a proprietary RTOS called RTKit.

9 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的供电电压

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zoosenpin/article/details/117444320

智能推荐

matlab 约束条件下三元函数的图像问题_三元函数图像-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏15次。题目:绘制z=x+y,0<x<1,0<y<1,0.5<x+y<1(0.5<z)约束条件下的图像代码:clc;clear;x=0:0.01:1;y=0:0.01:1;[xx,yy]=meshgrid(x,y);[m,n]=size(xx); for i=1:m for j=1:n z(i,j)=x(i)+y..._三元函数图像

linux下恢复误删除oracle的数据文件_oracle 数据文件误删 linux-程序员宅基地

文章浏览阅读480次。场景描述:操作系统级别的删除数据文件(/oracle/oradata/ora10g/system1.dbf),而且数据库没有崩溃,仍然处于open状态。原理:在Linux操作系统中,如果文件从操作系统级别被删除掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得。如果关闭数据库,则句柄就会丢失。恢复步骤如..._oracle 数据文件误删 linux

VScode 自定义代码颜色、背景颜色、方法名、括号颜色-程序员宅基地

文章浏览阅读10w+次,点赞108次,收藏323次。自学前端刚开始的时候使用Hbuilder,Hbuilder界面设计的很小清新,我特别喜欢,代码提示啥方面做的也特别好,很好上手,作为小白我用了很长一段时间。后来浅浅学习微信小程序开发,得写wxml,Hbilder上没有wxml格式的代码提示,代码高亮等。于是我用了一段时间vscode,在网上按推荐安装了很多花里胡哨的插件呢。给我感觉是不好上手。于是后来又接触了sublime,sublime相比..._vscode 自定义代码颜色、背景颜色、方法名、括号颜色

深度学习框架Tensorflow学习与应用 图像数据处理之二_tensorflow深度学习框架实现了对图像亮度的调整-程序员宅基地

文章浏览阅读255次。四:图像色彩调整 和图像翻转类似,调整图像的亮度、对比度、饱和度和色相在很多图像识别应用中都不会影响识别结果。所以在训练神经网络模型时,可以随机的调整训练图像的这些属性,从而使训练得到的模型尽可能地受到无关因素的影响。话不多说,上代码了。注意:路径要用英文,不要有中文(一)调整亮度与调整对比度import matplotlib.pyplot as pltimport tensorf..._tensorflow深度学习框架实现了对图像亮度的调整

《ASP.NET5》无法路由到Web API Controller控制器_.net的web无法访问到控制器-程序员宅基地

文章浏览阅读5.6k次。这个标题不知道恰当不恰当,具体的问题就是我在一个现有的项目上创建了一个Web API Controller Class,但是按F5启动调试后,通过给定的路径如“http://localhost:3753/api/values/5”访问Get(int id)方法时,没有反应,设置了断点也进不去。但这个问题在网上又没有找到解决方法,于是又新建了一个ASP.NET Web Application类型的项_.net的web无法访问到控制器

StackStorm与ChatOps-程序员宅基地

文章浏览阅读249次。2019独角兽企业重金招聘Python工程师标准>>> ..._stackstorm chatops

随便推点

浅谈安全运营中心-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏6次。最近两年安全运营中心这个概念被提到的次数越来越多了,虽然没有一个建设的标准模式,但很多大厂都在提,也号称有了各种落地。那么,到底是怎样呢。_安全运营中心

mysql 序列化缓存到txt文件查找数据与直接查找数据 性能对比,13,601条数据文件缓存平均0.085秒后只需0.025秒 推荐 程序员导航网http://www.je666.com_je666com-程序员宅基地

文章浏览阅读2.8k次。推荐 程序员导航网http://www.je666.comCREATE TABLE IF NOT EXISTS `ylmf_site_search` ( `id` int(11) NOT NULL, `displayorder` int(11) NOT NULL, `pinyin` varchar(255) CHARACTER SET gbk NOT NULL,_je666com

AttributeError: 'module' object has no attribute 'handlers'--Python子模块导入问题_logging.handlers attributeerror: 'module' object h-程序员宅基地

文章浏览阅读3.2w次,点赞4次,收藏5次。想使用python的logging模块记录日志,并使用RotatingFileHandler来处理日志以便于在日志文件超过指定的大小后会重新生成新的日志文件。基本代码如下:import logginglogger = logging.getLogger('mylogger')logger.setLevel(logging.INFO)fh=logging.handlers.Ro_logging.handlers attributeerror: 'module' object has no attribute 'handlers

react 刷新Uncaught SyntaxError: Unexpected token ‘<‘_react项目 引入 @sentry/webpack-plugin报错syntaxerror: un-程序员宅基地

文章浏览阅读3.4k次。react 刷新Uncaught SyntaxError: Unexpected token '<'在二级路由下跳转,页面一刷新就白屏f12下会报令牌错误处理方法:找到public/index.html页面在脚本上src前加上"/"<scriptsrc="index.js"></script>再次刷新页面成功渲染..._react项目 引入 @sentry/webpack-plugin报错syntaxerror: unexpected token '.

Android系统_输入系统_Linux编程知识inotify和epoll_android sys/epoll.h-程序员宅基地

文章浏览阅读329次。Android系统是基于Linux内核的,所以Android的系统输入就离不开Linux的系统设备输入。而输入设备的连接断开以及输入设备所传递的输入事件是如何被Android系统所感知的呢?下面我们就来了解一下Linux关于输入系统的两个重要机制notify和epoll。问题1、键盘即插即用,即我们是怎么监测键盘接入与拔出的呢?答:① hotplug:内核发现键盘接入/拔出,会启动hotplug进程,再发消息告诉输入系统② inotify:输入系统使用inotify监测目录 /dev/input问_android sys/epoll.h

推荐文章

热门文章

相关标签