两种flash的主要差别:
从上图的比较可以看出,nand可以做更大的容量,同时擦写速度高于nor,随着nand的可靠性增加,越来越大的容量,后面的flash存储都是以nand为主。Nor-flash由于可以像内存一样读,可以将相关地址映射到CPU的地址空间进行XIP,由于物理特性Nor-flash存储程序比nand-flash更可靠,所以早期的嵌入式设备大部分使用Nor-flash作为程序存储和执行开启点。
从外部引脚看,主要差异emmc使用并行接口,ufs使用高效的串行接口,并且可以同时支持读和写。
从两者的读写速度看,ufs更快。
由于nand flash的特点,块擦写,page读,有循环回收算法,因此早期的nand flash驱动上面有MTD层,向上提供的是raw flash不带flash管理的,因此在上面挂在的文件系统需要进行坏块管理以及循环使用算法等,比较常见的有yaffs2 jffs2 ubifs等。
FTL原名“Flash Translation Layer”,工作在nand-flash和文件系统中间,模拟nand-flash为普通的块设备,文件系统挂在同硬盘一样,无需担心底层是什么硬件介质。因此,对于FTL一般集成了坏块管理,动态均衡算法,线性地址映射等算法。FTL一般作为software运行在cpu侧,随着mmc emmc ufs SD等标准的出现,硬件存储设备集成FTL算法,因此 *** 作系统可以直接挂在ext4 ext3 FAT32等PC的文件系统。
像ext3 ext4 fat32等是给硬盘设计的文件系统,对flash的特性没有考虑。f2fs就是基于给nand-flash特性设计的,减少ftl的负担,对于nand-falsh来说优先选择。
没有配备。Nandflash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。在Nandflash中没有配备ext2,Nandflash是不能够使用ext2的。EXT2第二代扩展文件系统secondextendedfilesystem,是LINUX内核所用的文件系统。系统源码和编译方法,[参见连接] ( https://community.nxp.com/docs/DOC-334274 )其中dtb文件针对LCD或HDMI修改的内容对iSpeaker无影响,不用去修改。我们会使用另外的dtb文件。烧写SD方式也不采用这个文档中的方法,直接在linux命令行下如下 *** 作:
Nandflash使用zImage,dtb文件和SD卡中使用的完全一致。Uboot文件SD中使用的不能用于Nandflash,源码另见。
烧写Nandflash需要用SD卡系统盘启动,SD卡系统中需要已安装mtd-utils工具。系统启动后能正常看到mtd0~mtd4分区。按照下面步骤 *** 作:
$ flash_erase /dev/mtd0 0 0
$ flash_erase /dev/mtd1 0 0
$ flash_erase /dev/mtd2 0 0
$ kobs-ng init -x u-boot.imx --search_exponent=1 -v
$ flash_erase /dev/mtd3 0 0
$ nandwrite -p /dev/mtd3 zImage
$ nandwrite -p /dev/mtd3 -s 0x7e0000 imx.dtb
$ ubiformat /dev/mtd4 -f ubi.img
其中使用ubi.img文件,在linux主机下制作方法如下:
使用的根文件系统和SD卡中的根文件系统一样,假设SD卡已插入linux主机usb接口,并将第二个分区挂载与/mnt下,首先在linux主机工作目录下建立文本文件ubifs.cfg,内容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
然后执行如下命令:
$ mkfs.ubifs -x zlib -m 2048 -e 124KiB -c 3965 -r /mnt ubifs.img
$ ubinize -o ubi.img -m 2048 -p 128KiB -s 2048 -O 2048 ubifs.cfg
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)