如何提高嵌入式系统数据的可靠性③:软件设计 #数据存储
嵌入式系统数据的可靠性。前两期视频分别介绍了嵌入式系统数据可靠性的元器件选型和硬件设计。本期视频将着重探讨软件设计,因为即使硬件设计得再好,如果软件没有设计好,也无法实现预期的可靠性。只有软硬件相结合,才能妥善解决数据可靠性问题。
软件设计包括系统驱动和应用两个方面。
在系统方面,需要做好NAND的底层驱动程序,特别是ECC校验一定要做好,以确保驱动程序能够纠错修正。同时,文件系统必须实现写平衡,以确保整片NAND所有的存储单元劳损情况相同,从而延长NAND的使用寿命,提高数据的可靠性。
在应用方面,需要减少写存储器的次数和频率。
第一期视频已经提到,NAND的擦写次数有限。NAND的擦写操作以块为单位,一旦某一块擦写次数达到限制,整块数据就会丢失,这会导致不可预知的故障。
如果这一块坏区域恰好是NAND分区用于存放文件索引,整个物理分区的文件就会出现奇怪的错误,如文件名乱码、文件丢失、文件不全等异常。到目前为止,我们介绍了嵌入式系统数据存储可靠性的四个方面,包括元器件选型、电路设计、系统驱动和应用设计。
ZLG致远电子设计的核心板或工控板产品,前三个方面都有相应的设计或方案提供。如果您选择了我们的产品,只要在应用编程方面多加注意,数据可靠性就不会出现大问题。
关于如何庆祝数据可靠性,您有什么建议和想法,欢迎在评论区留言讨论。ZLG致远电子核心板/工控板。
基于AM335X开发板 ARM Cortex-A8——NAND FLASH版本核心板使用说明
前 言:
NAND FLASH版本和eMMC版本核心板使用方法基本一致。本文主要描述U-Boot编译、基础设备树文件编译、固化Linux系统NAND FLASH分区说明和NAND FLASH启动系统、固化Linux系统、AND FLASH读写测试等,NAND FLASH版本与eMMC版本核心板在使用方面的不同之处,相同之处将不重复描述。
创龙科技TL335x-EVM-S是一款基于TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8高性能低功耗处理器设计的评估板。
评估板接口资源丰富,引出双路千兆网口、LCD、HDMI、GPMC、CAN等接口,方便用户快速进行产品方案评估与技术预研,应用在通讯管理、数据采集、人机交互、运动控制、智能电力等典型领域。
U-Boot编译
进行U-Boot编译选项配置时,请执行如下命令。
Host# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_s_nandboot_defconfig
图 1
我司提供经过验证的U-Boot镜像文件位于产品资料“4-软件资料\Linux\U-Boot\image\u-boot-2017.01-[Git系列号]-[版本号]\”目录下,分别为MLO-nand、u-boot.img-nand。系统启动卡制作完成后,请将MLO-nand和u-boot.img-nand文件复制到系统启动卡BOOT分区下,备份原有的eMMC版本MLO、u-boot.img文件,并将MLO-nand和u-boot.img-nand文件重命名为MLO、u-boot.img。
图 2
Host# sudo cp MLO-nand MLO
Host# sudo cp u-boot.img-nand u-boot.img
图 3
基础设备树文件编译
基础设备树源文件为内核源码“arch/arm/boot/dts/”目录下的tl335x-evm-s-nandflash.dts和tl335x-evm-s-nandflash-hdmi.dts,重新编译基础设备树时请使用此文件。我司提供经过验证的基础设备树文件为产品资料“4-软件资料\Linux\Kernel\image\linux-rt-4.9.65-[Git系列号]-[版本号]\”目录下的tl335x-evm-s-nandflash.dtb和tl335x-evm-s-nandflash-hdmi.dtb,请将其分别复制到系统启动卡rootfs分区以及rootfs-backup分区的boot目录下。
图 4
请执行如下命令将tl335x-evm.dtb软链到tl335x-evm-s-nandflash.dtb文件。tl335x-evm-s-nandflash.dtb支持LCD显示,如需使用HDMI显示,则将tl335x-evm.dtb软链到tl335x-evm-nandflash-hdmi.dtb文件即可。
Host# sudo rm tl335x-evm.dtb
Host# sudo ln -s tl335x-evm-s-nandflash.dtb tl335x-evm.dtb
Host# ls -l
图 5
使用替换了U-Boot和基础设备树文件的Linux系统启动卡启动评估板,进入文件系统执行如下命令可查看到NAND FLASH分区信息,即说明文件替换成功。
Target# cat /proc/mtd
图 6
固化Linux系统
本章节介绍Linux系统固化过程,包括固化U-Boot、内核、设备树和文件系统至NAND FLASH。
NAND FLASH分区说明
进入评估板系统后执行如下命令,查看NAND FLASH分区信息。
Target# cat /proc/mtd
图 7
表 1
NAND FLASH
MTD0
nand.spl:存放U-Boot第一阶段启动文件MLO
MTD1
nand.u-boot:存放U-Boot第二阶段启动文件u-boot.img
MTD2
nand.env:存放环境变量
MTD3
nand.devicetree:存放设备树文件
MTD4
nand.kernel:存放内核镜像
MTD5
nand.logo:存放LOGO文件
MTD6
nand.mini-fs:备用分区,一般存放小型文件系统(暂未使用)
MTD7
nand.rootfs:存放文件系统
固化Linux系统
Linux系统启动卡制作时,已将系统固化的脚本文件mknandboot.sh复制到了Linux系统启动卡文件系统的“/opt/tools/”目录下。
图 8
执行如下命令进行一键固化。
Target# /opt/tools/mknandboot.sh
图 9
脚本会进行如下操作:
擦除NAND FLASH。将Linux系统启动卡BOOT分区中的U-Boot、LOGO固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统boot目录下的内核镜像和基础设备树文件固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统固化至NAND FLASH对应分区。用时约5~10min,Linux系统固化成功,同时串口调试终端打印提示信息。
从NAND FLASH启动系统
评估板断电,将Linux系统启动卡从评估板Micro SD卡槽中取出,根据评估底板丝印将拨码开关拨为10110(1~5),此档位为NAND FLASH启动模式。评估板上电,串口调试终端将会打印如下类似启动信息。
图 10
图 11
NAND FLASH读写测试
本章节对NAND FLASH的MTD6分区进行读写速度测试。MTD6是NAND FLASH的备用分区,一般存放小型文件系统,大小为32MByte。读写测试会将该分区内容擦除,请做好数据备份。
执行如下命令查询NAND FLASH分区,确认MTD6分区大小(读写请勿超出分区大小),将该分区内容擦除。
Target# cat /proc/mtd
Target# flash_erase /dev/mtd6 0 0
图 12
NAND FLASH写速度测试
进入评估板文件系统,执行如下命令对NAND FLASH进行写速度测试。
Target# time dd if=/dev/zero of=/dev/mtd6 bs=1024k count=30
图 13
此处一共写30MByte测试数据到NAND FLASH的MTD6分区下,可看到本次测试的NAND FLASH写速度约为:30MByte/7.79s=3.85MB/s。
NAND FLASH读速度测试
重启评估板,进入评估板文件系统,执行如下命令对NAND FLASH进行读速度测试。
Target# time dd if=/dev/mtd6 of=/dev/null bs=1024k count=30
图 14
此处从NAND FLASH的MTD6分区读取30MByte数据,可看到本次测试的NAND FLASH读速度约为:30MByte/4.44s=6.75MB/s。
相关问答
苹果4s刷机卡在,正在 nand分区 了,怎么办?手机上的进度条一直是0?苹果4s刷机卡在正在nand分区,其原因是在刷机过程中造成了参数错误。1、首先将iPhone手机关机。2、同时按住HOME键和关机键。3、持续上一步骤10秒钟左右便可...
如何让U-boot实现 Nand /Nor双启动?这时候,Uboot通过另外的代码,实际是Nandsubsystem部分,把kernel从Nand读到内存上,再通过指令,然后CPU跳到Kernel入口地址执行。一旦Kernel跑起来,Kerne...
手机rom存储空间怎么 分区 ?-ZOL问答以4G的TF卡做比方,将4G的卡分成3个分区,FAT32作为正常存储音乐,图片的普通存储范围,SWAP分区是作为系统缓存,越大对系统运行缓慢的影响愈好,但一般不会超过96M...
固态硬盘 文件 系统类型有哪几种?1、磁盘的文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NANDFlash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。...
efi系统 分区 能删除吗?答可以efi系统分区可以删除。EFI系统不提供复杂的存储器保护功能,只具备简单的存储器管理机制。指运行在x86处理器的段保护模式下,以最大寻址能力为限把存储...
东芝如何布局5-Bit-per-Cell Flash SSD?由于Optane存储过于昂贵,而三星Z-NAND仅限于自己的专有产品,因此这是摆在东芝面前的新机会。它为公司的客户设计了一个更具成本效益,更低延迟的存储解决方案,...
刚买过来的乐心手环插上usb怎么屏幕不亮?激活不了?乐心手环怎么用:记录了当前的nandflash有几个分区,每个分区的名字,大小,偏移量是多少。系统就是依靠这些分区表找到各个文件系统的。这些分区表nand中的文件...
手机自身存储空间如何 分区 ?-ZOL问答APP2SD的工作原理:以4G的TF卡做比方,将4G的卡分成3个分区,FAT32作为你正常存储音乐,图片的普通存储范围,SWAP分区是作为系统缓存,越大对系统运行缓慢的影响愈好...
odin三星刷机工具?为了方便大家对三星Odin刷机工具功能更快的了解,就按照序号来一一介绍其功能和作用。1、这里显示的是【ID:COM】上面会显示刷机的进度,下面会显示软件是...
ufs3.0是什么意思?UFS,全称是通用闪存存储“UniversalFlashStorage”,是一种内嵌式存储器的标准规格,整合有主控芯片的闪存。经历过UFS1.0、UFS2.0、UFS2.1、和2018年1月...