tag 标签: IMX8MM

相关博文
  • 2025-2-26 12:17
    249 次阅读|
    0 个评论
    ARM 处理器平台 eMMC Flash 存储磨损测试示例
    ​ By Toradex秦海 1).简介 目前工业嵌入式ARM平台最常用的存储器件就是eMMC Nand Flash存储,而由于工业设备一般生命周期都比较长,eMMC存储器件的磨损寿命对于整个设备来说至关重要,因此本文就基于NXP i.MX8M Mini ARM处理器平台演示eMMC器件磨损测试的示例流程。 关于eMMC存储器件的基本介绍可以参考如下文章,eMMC存储器件通常包含有eMMC Nand Flash控制器和一定数量的Nand Flash存储颗粒来组成,ARM处理器主机对于eMMC的操作都要通过Nand Flash控制器进行映射,同时Nand Falsh控制器还负责Wear leveling/ECC/Bad Block Management等功能以保证eMMC器件稳定可靠工作。 eMMC (Linux) | Toradex Developer Center eMMC存储器件的磨损寿命主要由其包含的Nand Flash颗粒存储单元的P/E(programming and erasing)次数来决定,不同Nand Flash颗粒种类通常的P/E次数不同,一个大概的参考如下,不同品牌不同工艺的颗粒会有差异。 ./ SLC Nand Flash - 10K - 100K P/E Cycles ./ MLC Nand Flash - 3K - 10K, normally 3K P/E Cycles ./ 2D TLC Nand Flash - normally 1K P/E Cycles ./ 3D TLC Nand Flash - normally 3K P/E Cycles 但是由于Nand控制器操作Nand Flash存储单元programming写入最小单位是Page,而erasing擦除最小单位是Block,因此当写入/擦除数据不是对应最小单元整数倍时候就会产生额外的开销,同时还附加其他Wear leveling/Garbage collection/Bad Block Management等功能产生的开销,就会导致实际写入的全寿命数据量要小于理论上按照单元P/E Cycles计算的数据量(eMMC capacity * P/E cycles),这个差异就是WAF(Write Amplification Factor)写放大因子((eMMC capacity * P/E cycles)/actual full-lifetime data written)。更多相关说明请参考如下文章。 使用 eMMC 闪存设备的磨损估计 因此由于上述Nand Flash控制器地址映射和WAF的存在,磨损测试是无法直接将Host写入数据和实际Nand Flash颗粒的P/E对应的,而WAF在不同写入情况下又是一个动态数值,所以我们依赖Linux Kernel mmc-utils工具或者eMMC提供商的专用软件来读取Extended CSD rev 1.7 (MMC 5.0)包含的Health Status信息,并通过其每10%的线性变化和实际写入数据是否对应线性变化,以及最终写入数据量,可以推算出实际的WAF。 eMMC (Linux) | Toradex Developer Center 关于CSD Register中Health Status和Spare Block Register的定义说明如下 ./Device life time estimation typeA/B: life time estimationbased on blocks P/E cycles, provided in steps of 10%, e.g.: 0x02 means 10%-20% device life time used. ./Pre EOL information: overall status for reserved blocks. Possible values are: 0x00 - Not defined. 0x01 - Normal: consumed less than 80% of the reserved blocks. 0x02 - Warning: consumed 80% of the reserved blocks. 0x03 - Urgent: consumed 90% of the reserved blocks. 本文所示例的平台来自于ToradexVerdini.MX8MM嵌入式平台。 2.准备 a). Verdin i.MX8MM ARM 核心版配合 Dahlia 载板并连接调试串口用于后续测试 b).参考 这里 下载 Toradex Yocto Linux BSP6 Reference Image c).参考 这里 的说明将上述下载的 BSP Image 安装到 Verdin i.MX8MM 核心板。 d).准备一个 SD 卡,参考 这里 的说明使用上述下载的 BSP Image 制作启动 SD 卡。 3). 测试流程 a).将SD插入Dahlia载板后启动,系统自动会优先从外部SD卡(mmc1)启动,可以通过如下调试串口log信息来进一步判定。 ------------------------------- ...... Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc1 is current device Scanning mmc 1:1... Found U-Boot script /boot.scr ...... ------------------------------- b).因为系统会自动mount eMMC对应设备分区,为了后续测试,需要先关闭自动挂载。 ------------------------------- root@verdin-imx8mm-07276322:~# mount |grep /dev/mmcblk0 /dev/mmcblk0p2 on /media/RFS-mmcblk0p2 type ext4 (rw,relatime) /dev/mmcblk0p1 on /media/BOOT-mmcblk0p1 type vfat (rw,relatime,gid=6,fmask=0007,dmask=0007,allo) ------------------------------- 在设备Linux下执行下面脚本关闭自动挂载,执行成功后上述挂载信息就没有了。 ------------------------------- #!/bin/sh -e systemd-umount /dev/mmcblk0p1 systemd-umount /dev/mmcblk0p2 systemctl stop systemd-udevd systemctl stop systemd-remount-fs count=`ls -1 /etc/udev/rules.d/*automount.rules 2/dev/null |wc -l` if then rm /etc/udev/rules.d/*automount.rules fi ------------------------------- c).接下来要通过Linux磁盘操作工具来进行大量写入数据来测试eMMC的磨损,本文测试使用fio工具,当然还有像dd/hdparm等工具也可以根据情况酌情选择。 ./ 首先创建 fio 配置文件,类似如下,具体说明可以参考 fio官方文档 。 ------------------------------- bs=32k direct=0 ioengine=libaio iodepth=4 verify=crc32c filename=/dev/mmcblk0 ; emmc device filename verify_dump=1 verify_fatal=1 randrepeat=0 description=Write once area, used for testing date retention stonewall rw=write verify_pattern=0xaa555aa5 ; fixed data pattern size=256M offset=0 description=Verify write once area, used for testing data retention stonewall rw=read verify_only size=256M offset=0 description=Write r/w stress data area with random data stonewall rw=write do_verify=0 offset=256M description=Verify r/w stress data area stonewall rw=read verify_only offset=256M ------------------------------- //其中需要说明的是bs (block size)的设置需要根据不同的eMMC手册中定义的Optimal Write Size以尽可能减小WAF,比如当前测试eMMC手册中定义如下 实际读取的寄存器数值如下,对应为32KB,因此fio配置文件中bs参数设置为32k或者其整数倍数,可以保证Nand Flash颗粒存储单元写入都是按照Page Size。 ------------------------------- $mmc extcsd read /dev/mmcblk0 | grep write Optimal write size ------------------------------- ./然后可以通过类似如下测试脚本来进行一次写入和验证,测试fio的配置正确和可用以及当前的eMMC Health Status状态 ------------------------------- #!/bin/bash -e EMMC_DEVICE=/dev/mmcblk0 FIO_TEST_NAME=emmc-pe-test.fio echo " eMMC P/E test preparation on ${EMMC_DEVICE}" echo " eMMC EXTCSD Health Status" mmc extcsd read "${EMMC_DEVICE}" | fgrep -A1 DEVICE_LIFE_TIME_EST mmc extcsd read "${EMMC_DEVICE}" | fgrep -A1 PRE_EOL_INFO echo " Write once data" fio --section=write-once "${FIO_TEST_NAME}" echo " Verify write once data" fio --section=verify-write-once "${FIO_TEST_NAME}" ------------------------------- ./最后可以通过如下循环写入脚本持续写入测试来测试eMMC磨损情况。 ------------------------------- #!/bin/bash -e EMMC_DEVICE=/dev/mmcblk0 COUNT=0 FIO_TEST_NAME=emmc-pe-test.fio echo " Starting eMMC P/E test on ${EMMC_DEVICE}" while true do echo " Run $COUNT" echo " eMMC EXTCSD Health Status" mmc extcsd read "${EMMC_DEVICE}" | fgrep -A1 DEVICE_LIFE_TIME_EST mmc extcsd read "${EMMC_DEVICE}" | fgrep -A1 PRE_EOL_INFO echo " Check write once data" fio --section=verify-write-once "${FIO_TEST_NAME}" echo " Wear eMMC" fio --section=write --section=verify "${FIO_TEST_NAME}" COUNT=$(($COUNT + 1)) done ------------------------------- ./磨损测试一次全盘写入和验证的log信息如下,由于实际测试完成时间会非常长,通常根据eMMC容量不同可能需要几天甚至十几天时间,本文就不演示最终完成的数据。最后可以根据寿命达到90%以上时候全部log信息统计出类似如下表格eMMC每磨损10%实际P/E的次数和数据量,得出eMMC的全寿命磨损数据/磨损是否线性以及实际WAF数值。另外,关于LIFE_TIME_EST_A还是LIFE_TIME_EST_B没有标准定义,由各个厂商自行定义,所以实际以厂商定义为准。 ------------------------------- Starting eMMC P/E test on /dev/mmcblk0 Run 0 eMMC EXTCSD Health Status Device life time estimation type B i.e. 0% - 10% device life time used Device life time estimation type A i.e. 0% - 10% device life time used Pre EOL information i.e. Normal Check write once data verify-write-once: (g=0): rw=read, bs=(R) 32.0KiB-32.0KiB, (W) 32.0KiB-32.0KiB, (T) 32.0KiB-32.4 fio-3.30 Starting 1 process Jobs: 1 (f=1) verify-write-once: (groupid=0, jobs=1): err= 0: pid=583: Fri Apr 29 20:04:38 2022 Description : read: IOPS=4908, BW=153MiB/s (161MB/s)(256MiB/1669msec) ... Run status group 0 (all jobs): READ: bw=153MiB/s (161MB/s), 153MiB/s-153MiB/s (161MB/s-161MB/s), io=256MiB (268MB), run=166c Disk stats (read/write): mmcblk0: ios=1009/0, merge=0/0, ticks=2390/0, in_queue=2391, util=94.47% Wear eMMC write: (g=0): rw=write, bs=(R) 32.0KiB-32.0KiB, (W) 32.0KiB-32.0KiB, (T) 32.0KiB-32.0KiB, ioeng4 verify: (g=1): rw=read, bs=(R) 32.0KiB-32.0KiB, (W) 32.0KiB-32.0KiB, (T) 32.0KiB-32.0KiB, ioeng4 fio-3.30 Starting 2 processes Jobs: 1 (f=1): write: (groupid=0, jobs=1): err= 0: pid=590: Fri Apr 29 20:17:15 2022 Description : write: IOPS=732, BW=22.9MiB/s (24.0MB/s)(14.4GiB/642435msec); 0 zone resets ... verify: (groupid=1, jobs=1): err= 0: pid=607: Fri Apr 29 20:17:15 2022 Description : read: IOPS=4812, BW=150MiB/s (158MB/s)(14.4GiB/97725msec) ... Run status group 0 (all jobs): WRITE: bw=22.9MiB/s (24.0MB/s), 22.9MiB/s-22.9MiB/s (24.0MB/s-24.0MB/s), io=14.4GiB (15.4GB),c Run status group 1 (all jobs): READ: bw=150MiB/s (158MB/s), 150MiB/s-150MiB/s (158MB/s-158MB/s), io=14.4GiB (15.4GB), run=9c Disk stats (read/write): mmcblk0: ios=58819/29449, merge=0/3732727, ticks=143387/81519893, in_queue=81663280, util=99.% ... ------------------------------- 4 ).总结 本文基于NXP i.MX8MM ARM处理器平台说明和演示了eMMC寿命磨损测试的流程,同时由于测试是线性写入,得出的结果和实际应用具体情况可能有不同,不过在实际应用中,为了最大程度的增加eMMC存储器件的寿命和可靠性,在写入数据时候最好不要无论大小数据每次都直接写入磁盘,最好使用缓存将要写入的数据累积到一定量之后,根据具体eMMC Optimal Write Size来最终写入磁盘,以尽可能减少WAF,提高磨损寿命。 ​
  • 热度 13
    2020-8-26 14:07
    1022 次阅读|
    0 个评论
    在当今复杂的外科手术过程中麻醉机是现代医院进行手术全身麻醉的重要工具。其主要功能是为患者进行吸入麻醉、代替呼吸、供氧等。因此麻醉机设计由气体供应装置包括: 氧气(O2) 、空气(Ai r) 、氧化亚氮(笑气/ N2O) 、安全装置、报警系统、监测系统; 代替呼吸管理的麻醉呼吸机以及其它操作部件,残气清除系统。 没有一个稳定的、值得信赖的控制系统、采样系统、监视系统,手术的风险必定加大。NXP的i.MX8MM可作为麻醉系统中的中枢系统,4个Cortex-A53内核平台,每核运行频率高达1.8GHz,1个Cortex-M4内核,运行频率高达400MHz,非常精确地监测和控制麻醉药物的输送。建立医疗人员与患者之间的纽带,让医生和护士对患者的状况以及麻醉情况了如指掌。 交互式框图: 主要功能包括: i.MX8M mini列入NXP产品长期供货计划,包含在该计划内的产品在推出后至少保证10年以上的供货周期期,旨在为您的嵌入式设计确保产品的供货稳定性; i.MX8M mini采用多核异构模式,四核Cortex-A53运行频率高达1.8GHz,支持2D、3D以及丰富的网络协议栈,可完成显示与网络处理的功能;Cortex-M4运行频率高达400MHz,可完成实时采集与控制的任务功能; 支持Android9.0、Linux4.14+QT5.10高版本64操作系统。高版本系统将为您带来更安全性的产品以及更酷炫的人机交互体验; 10.1寸高分液晶显示屏幕,全贴合工艺,显示更细腻,触摸更精准; 电磁兼容、及稳定性测试结果将直接影响产品上市速度。FETMX8MM-C核心板采用8层PCB沉金工艺,经过严格的高低温环境试验测试,保证最佳的电气特性。 i.MX8MM核心板稳定运行功耗最低仅200多mA;无风扇、低功耗、低发热的特性,将有效延长CPU的运行寿命,增强板卡的可靠性与稳定性;