tag 标签: nxp

相关博文
  • 2025-3-6 15:17
    184 次阅读|
    0 个评论
    by Toradex Allan Kamimura 边缘计算机视觉 为何选择边缘计算? 嵌入式设备日益智能化,许多机器学习和计算机视觉任务正被推向边缘设备。在此类设备上运行 AI 模型虽具挑战性,却带来诸多优势: 降低延迟: 在设备端处理数据,避免了向云端或中央处理器传输数据的等待时间 增强隐私保护:敏感数据保留在设备内,确保符合严格的隐私法规要求。 节省带宽成本:边缘处理减少了对集中式服务器发送大量数据的需求。 提升可靠性:系统可在无网络连接的情况下独立运作。 为何需要外部 AI 加速器? Toradex 提供多种计算机模块(SoM),其中一些集成了神经网络处理单元(NPU),能够应对不同的 AI 工作负载。例如,Verdin iMX8M Plus, Verdin iMX95和 Aquila AM69 均配备了专为边缘推理加速设计的 NPU,使其适用于众多计算机视觉和机器学习应用。 尽管这些模块提供了强大的 AI 解决方案,但诸如 Hailo-8、EdgeX、MemryX 及 Google Coral 等外部 AI 加速器通过提供模块化、解耦且可扩展的边缘 AI 推理方案来应对挑战。这带来了更高的灵活性和面向未来的 AI 能力。 1. 将 AI 处理与 SoC 供应商软件解耦 在边缘运行机器学习面临的一大挑战是将模型适配到特定硬件或运行库上。无论是 NXP 的 eiQ平台、TI 的 Edge AI Studio 还是 ONNX 导出工具,每种都有其专属的 AI 工具包和优化策略。外部 AI 加速器将 AI 工作负载从其他硬件中分离出来,提供了一个统一的跨多硬件平台的运行环境。 示例: 一个基于 x86 设备并使用 Hailo-8 AI 加速器开发的计算机视觉解决方案,可以无缝迁移至搭载 Hailo-8 的 Aquila AM69 模块上而无需重构整个 AI 堆栈。这种解耦确保了仅需最小调整即可完成迁移,大大缩短了产品上市时间。 2. 模块化与可扩展性 AI 应用具有动态特性,随着工作负载复杂度的增加或新功能的创建,性能需求可能会发生变化。虽然内置的 NPU 能提供坚实的解决方案,但有时它们可能难以适应新的场景。 Hailo简介 Hailo是一家 AI 处理器制造商,其产品旨在边缘端上运行先进的机器学习应用,能够广泛应用于智慧城市、汽车、制造、农业、零售等多个行业和领域。 我们使用 Hailo-8 M.2 模块在多款 Toradex 模块上进行了测试。Hailo-8 M.2 模块是一款具备 26 TOPS 算力及 PCIe Gen-3.0 4通道 M-key 接口的 AI 加速器模块。该 M.2 模块可插入多种 Toradex 载板中,实现实时的深度神经网络推理。 如何 Hailo 充分利用 Toradex 生态系统? 释放预处理和后处理任务 来源:https://hailo.ai/blog/customer-case-study-developing-a-high-performance-application-on-an-embedded-edge-ai-device/ 典型的计算机视觉流程遵循线性模式。从摄像头捕捉源开始,直到应用程序采取行动,图像必须经过每一个处理步骤。这意味着如果任何一个步骤比下一个耗时更长,那就是瓶颈所在。 通常,在比较机器学习模型或硬件时,我们会非常关注推理速度,但这只是问题的一部分。 完整的软件堆栈 Hailo 是一个完整的人工智能解决方案,支持常见机器学习工作流中的大部分步骤。 性能评估 TAPPAS是一个包含应用示例的代码库。 Model Zoo不仅提供了一些模型的基准测试结果,还包括预训练模型。 模型训练 部分预训练模型附带了再训练环境。 编译器和运行库 Hailo Dataflow 编译器 pyHailoRT 和 GStreamer 插件 从 Toradex 方面来看,这一工作流程可以通过使用 Torizon 云平台得到补充。 监控性能 提前识别任何问题,确保系统可靠性。 OTA 更新 轻松更新量产设备。 支持 Toradex 模块硬件 硬件 支持的硬件配置 系列 模块 载板 Hailo Aquila TI AM69 (1+2 x PCIe 3.0) Clover (M.2 key B+M) Hailo-8 Hailo-8L Aquila NXP i.MX 95 (1 x PCIe 3.0) Clover (M.2 key B+M) Hailo-8 Hailo-8L Verdin NXP i.MX 95 (1 x PCIe 3.0) Mallow (M.2 key B) Hailo-8 Hailo-8L Verdin NXP i.MX 8M Plus (1 x PCIe 3.0) Mallow (M.2 key B) Hailo-8 Hailo-8L Verdin NXP i.MX 8M Mini (1 x PCIe 2.0) Mallow (M.2 key B) Hailo-8 Hailo-8L Apalis NXP i.MX8 (2 x PCIe 3.0) Ixora (Mini PCIe) Hailo-8R mPCIe 软件 OS 版本 其他的资源 Torizon OS BSP 7 meta-hailo layer (即将上线) Torizon OS BSP 6 runtime container (即将上线) Torizon OS Minimal BSP 6 meta-hailo kirkstone OpenEmbedded layer for GStreamer 1.0 tdx-reference-multimedia BSP 6 meta-hailo kirkstone YOLOv5 示例 在本例中,我们将运行来自 Tappas 的演示应用程序: 完成此示例后,您应得到类似以下的输出。以 60+ FPS 的速度运行(取决于您的摄像头)。 我们将使用: 摄像头 如果使用 USB 摄像头,由于摄像头的捕捉速度,帧率可能会非常低。 显示器 Verdin i.MX8MP+Mallow Carrier 载板 Verdin iMX8M Plus QuadLite 1GB IT (0065) 不兼容 Framos 摄像头。 Hailo AI Accelerator 步骤: 从源码构建 Torizon OS 构建基础 Torizon OS 添加依赖项 硬件设置 连接Hailo设备 连接摄像头 安装新镜像 检查所有配置 运行示例 从源代码构建 Torizon OS 完整指南 首先,您可能需要检查计算机的 RAM 和磁盘空间 用于 Yocto 项目构建的计算机 构建 Torizon OS 基础镜像 我们将使用 CROPS 容器来构建以下镜像: Torizon OS Disto Machine Torizon OS Image Target 版本 torizon verdin-imx8mp torizon-minimal 6.8.0 创建工作目录 cd ~ mkdir ~/yocto-workdir 运行容器(这将构建基础镜像) 这将占用大量内存,并需要几个小时才能完成。 命令的第二行将主机卷映射到容器的 workdir 目录。请注意,此文件夹 ~/yocto-workdir 是在上一步中创建的。 docker run --rm -it --name=crops \ -v ~/yocto-workdir:/workdir \ --workdir=/workdir \ -e MACHINE="verdin-imx8mp" \ -e IMAGE="torizon-minimal" \ -e DISTRO="torizon" \ -e BRANCH="refs/tags/6.8.0" \ -e MANIFEST="torizoncore/default.xml" \ -e ACCEPT_FSL_EULA="1" \ -e BB_NUMBER_THREADS="2" \ -e PARALLEL_MAKE="-j 2" \ # not sure if I can pass those like this torizon/crops:kirkstone-6.x.y startup-tdx.sh 将依赖项添加到镜像 要添加依赖项,首先进入 ~/yocto-workdir/layers 文件夹。 cd ./layers 我们将添加下面 layers: meta-hailo meta-gstreamer1.0 meta-toradex-framos 更多关于 meta layers 的内容,请参考完整的文档。 在 torizon/crops:kirkstone-6.x.y 容器中, 运行 bitbake add layers 命令。 bitbake-layers add-layer meta-hailo/meta-hailo-accelerator bitbake-layers add-layer meta-hailo/meta-hailo-libhailort bitbake-layers add-layer meta-hailo/meta-hailo-tappas bitbake-layers add-layer meta-hailo/meta-hailo-vpu bitbake-layers add-layer meta-toradex-framos bitbake-layers add-layer meta-gstreamer1.0 在 build-torizon/conf/local.conf 文件中添加 packages。在末尾添加下面内容。 IMAGE_INSTALL:append = " libhailort hailortcli pyhailort libgsthailo hailo-pci hailo-firmware" IMAGE_INSTALL:append = " gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad" IMAGE_INSTALL:append = " v4l-utils" 使用新的 layers 编译镜像。 bitbake torizon-minimal 你可以在下面位置找到兼容 Toradex Easy Installer 的安装镜像 ~/yocto-workdir/build-torizon/deploy/images/verdin-imx8mp/torizon-minimal-verdin-imx8mp-Tezi_6.8.0-devel-date+build.0.tar. 硬件设置 连接Hailo设备 将 Hailo 设备插入 Mallow 载板的 M.2 插槽中。 连接摄像头 将摄像头连接到 Mallow 载板的 MIPI-CSI 接口上。 安装新的 Torizon OS 镜像 使用 Toradex Easy Installer (Tezi) 将新镜像刷入设备。 下载Tezi 将设备置于恢复模式 安装新编译的镜像 检查安装情况 Hailo 设备 sudo su hailocli scan hailocli device-info 这些命令的输出应能检测到设备已正确连接且驱动程序正常工作。 显示屏 gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink 您应该在屏幕上看到一些彩色图案。 Camera 设备 此步骤可能因使用的相机而异。 v4l2-ctl -d2 -D v4l2-ctl --list-formats-ext -d /dev/video2 对于 Framos 相机,输出如下。 root@verdin-imx8mp-15445736:~# v4l2-ctl --list-formats-ext -d /dev/video2 ioctl: VIDIOC_ENUM_FMT Type: Video Capture : 'YUYV' (YUYV 4:2:2) Size: Stepwise 176x144 - 4096x3072 with step 16/8 : 'NV12' (Y/CbCr 4:2:0) Size: Stepwise 176x144 - 4096x3072 with step 16/8 : 'NV16' (Y/CbCr 4:2:2) Size: Stepwise 176x144 - 4096x3072 with step 16/8 : 'RG12' (12-bit Bayer RGRG/GBGB) Size: Stepwise 176x144 - 4096x3072 with step 16/8 在演示中,我们将使用 YUYV 格式。因此请记住其中的数值。 gst-launch-1.0 -v v4l2src device=/dev/video2 ! video/x-raw ! videoconvert ! autovideosink 运行示例 某些摄像头会指定分辨率和帧数,因此需相应调整这些值。这可以通过修改 PIPELINE变量的 framerate 值来实现。 sudo su cd ~/apps/detection/ ./detection.sh
  • 2025-3-6 12:00
    74 次阅读|
    0 个评论
    B y Toradex 秦海 1). 简介 基于 ARM 平台 Yocto Linux BSP 开发嵌入式设备,开发完成后需要生成用于量产的 Yocto Linux BSP 镜像,本文就基于 Toradex Yocto Linux BSP 镜像进行量产定制做流程说明。 2. 准备 a). Toradex Yocto Linux BSP 提供预编译好的基于 Downstream/Mainline Linux Kernel 版本的 Minimal 或者 Multimedia 镜像供客户测试开发,具体可以从下面地址下载。 https://developer.toradex.cn/software/toradex-embedded-software/toradex-download-links-torizon-linux-bsp-wince-and-partner-demos/#toradex-embedded-linux---yocto-project-reference-images b ). Toradex ARM 核心板 产品出厂预装 Toradex Easy Installer 工具软件,便于进行量产安装,因此对应使用的 Yocto Linux BSP 镜像也是适用于通过 Toradex Easy Installer 安装的镜像,具体关于 Toradex Easy Installer 的更详细介绍请见如下。 https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-overview/ c). 如果熟悉 Yocto Project 编译环境,可以参考如下文章通过 Yocto Project 来定制编译用于量产的 BSP 镜像,本文不做赘述。 https://www.toradex.cn/blog/tong-guo-ycoto-project-ding-zhi-qian-ru-shi-ycoto-linux-jing-xiang 3). 定制流程 a). 本文以适用于 Verdin i.MX8M Plus 的 Yocto Linux Mutimedia BSP Reference Image 镜像为例进行示例,其他平台和版本的 BSP 方法思路都一致。 b). 从 这里 下载针对 Verdin i.MX8M Plus 的 Yocto Linux Mutimedia BSP Reference Image V7.x 版本,并解压后包含文件如下。 ------------------------------- $ tar xvf Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3.tar $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/ $ tree -L 1 . ├── image.json ├── imx-boot ├── LA_OPT_NXP_SW.html ├── marketing.tar ├── prepare.sh ├── Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz ├── Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz ├── toradexlinux.png ├── u-boot-initial-env-sd └── wrapup.sh 0 directories, 10 files ------------------------------- c). image.json 是 BSP 镜像配置文件, Toradex Easy Installer 软件就是通过读取这个文件来进行 BSP 镜像更新的 ./ image.json 配置文件详细说明请见如下文章,不同的硬件平台具体的文件会有不同,尤其是底层 bootloader 相关的 binary 文件。本文只将和定制量产镜像相关的参数着重说明。 https://developer.toradex.cn/easy-installer/toradex-easy-installer/toradex-easy-installer-configuration-files ./ “ autoinstall ” 参数定义了是否自动安装 BSP 镜像 ------------------------------- false - 不自动安装 (default) true - 自动安装 ------------------------------- ./ “u_boot_env” 参数定义了 U-Boot 启动动态加载的环境变量参数,可以将自定义的 U-Boot 环境变量参数更新到这个文件,刷写 BSP 镜像后启动即可以生效。 ------------------------------- u-boot-initial-env-sd (default) ------------------------------- ./ “ prepare_script ” 参数定义了 Toradex Easy Installer 工具进行分区和烧写镜像操作前需要进行的操作 ------------------------------- prepare.sh (default) ------------------------------- ./ “wrapup_script” 参数定义了 Toradex Easy Installer 工具完成分区和烧写镜像操作后需要进行的操作 ------------------------------- wrapup.sh (default) ------------------------------- ./ “blockdevs” 参数下面就定义了实际需要烧写的镜像以及分区,当然也可以参考上述配置文件说明定制添加自己需要的分区或者只读文件系统等。 // 通常首先是一个 FAT32 分区,用于烧写包括 Linux Kernel Image/Device-Tree Binary/Device-Tree Overlay Binary 等启动文件, ” filename ” 参数定义了写入的文件压缩包, "uncompressed_size" 定义了要写入文件未压缩前的大小 (MB) 。如果定制镜像过程中修改了压缩包文件的名字和文件大小就需要修改对应修改这两个参数。 ------------------------------- "label": "BOOT", "filesystem_type": "FAT", "mkfs_options": "", " filename ": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz", " uncompressed_size ": 8.671875 ------------------------------- // 然后是一个 EXT4 分区,用于烧写 Linux Rootfs 文件系统文件, ” filename ” 参数定义了写入的文件压缩包, "uncompressed_size" 定义了要写入文件未压缩前的大小 (MB) 。如果定制镜像过程中修改了 Rootfs 文件系统压缩包文件的名字和文件大小就需要修改对应修改这两个参数。 ------------------------------- "label": "RFS", "filesystem_type": "ext4", "mkfs_options": "-E nodiscard", " filename ": "Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz", " uncompressed_size ": 1272.7109375 ------------------------------- // 最后是 Raw 分区,用于烧写包括 Bootloader Binary 等在内的底层引导固件文件,文件可能是一个文件或者多个文件,根据不同的硬件平台不一致。 ” filename ” 参数定义了写入的 Binary 固件文件,比如 Verdin i.MX8MP 平台对应的是 imx-boot 文件就是一个包含 ATF/DDR Firmware/SPL/U-Boot 等的 Boot Container ,而比如 Verdin AM62 平台则每个固件都是分开的单独文件。 ------------------------------- "filesystem_type": "raw", "rawfiles": ------------------------------- d). “ imx-boot ” 如章节 (c) 说明是 Verdin i.MX8MP 平台对应的 Boot Container 文件,如果需要修改底层 Bootloader ,可以参考如下文章修改编译生成新的 “ imx-boot ” 文件后替换 BSP Image 镜像里面的文件。 https://developer.toradex.cn/linux-bsp/os-development/build-u-boot-and-linux-kernel-from-source-code/build-u-boot/ e). “prepare.sh” 如章节 (c) 说明是烧写镜像前需要进行的操作,通常不需要修改。 f). “ wrapup .sh” 如章节 (c) 说明是烧写镜像后进行的操作,如果使能了 “ autoinstall ” 自动安装可以增加如下内容在完成自动安装后自动重启。 ------------------------------- reboot -f exit 0 ------------------------------- g). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz” 压缩包文件如章节 (c) 说明是 FAT32 启动分区文件,请注意不同 Yocto Linux BSP 版本命名方式可能略有不同。 ./ 解压后内容如下 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/ $ mkdir bootfs $ tar Jxf Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz -C bootfs/ $ cd bootfs $ tree -L 1 . ├── boot.scr ├── Image.gz ├── imx8mp-verdin-nonwifi-dahlia.dtb ├── imx8mp-verdin-nonwifi-dev.dtb ├── imx8mp-verdin-nonwifi-ivy.dtb ├── imx8mp-verdin-nonwifi-mallow.dtb ├── imx8mp-verdin-nonwifi-yavia.dtb ├── imx8mp-verdin-wifi-dahlia.dtb ├── imx8mp-verdin-wifi-dev.dtb ├── imx8mp-verdin-wifi-ivy.dtb ├── imx8mp-verdin-wifi-mallow.dtb ├── imx8mp-verdin-wifi-yavia.dtb ├── overlays └── overlays.txt 1 directory, 13 files ------------------------------- ./ “ boot.scr ” 文件是 Linux U-Boot Distroboot 配置文件,如果定制 BSP 镜像涉及 Linux Kernel 启动参数相关配置,可以参考 这里 修改并重新生成这个文件后替换原有文件。 ./ 其他文件都是包含 Linux Kernel Image / Device-Tree Binary / Device-Tree Overlay Binary 等文件,如果定制 BSP 涉及了相关修改可以在这里替换原有文件。 ./ 修改完成所有要修改的文件后,可以通过如下命令重新压缩,如果命名不变则无需修改 image.json 文件,否则就要对应修改。 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/bootfs/ $ tar Jcf ../Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz * $ cd .. $ rm -rf bootfs/ ------------------------------- h). “Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz” 压缩包文件如章节 (c) 说明是 EXT4 Linux Rootfs 文件系统分区文件,请注意不同 Yocto Linux BSP 版本命名方式可能略有不同。 ./ 解压后内容如下 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/ $ mkdir rootfs $ sudo tar Jxf Reference-Multimedia-Image-verdin-imx8mp.rootfs.bootfs.tar.xz -C rootfs/ $ cd rootfs $ tree -L 1 . ├── bin - usr/bin ├── boot ├── dev ├── etc ├── home ├── lib - usr/lib ├── media - run/media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin - usr/sbin ├── srv ├── sys ├── tmp ├── unit_tests ├── usr └── var 18 directories, 1 file ------------------------------- ./ 在这里可以进行 Linux Rootfs 相关的修改适配,比如部署应用程序以及相关运行库,配置应用程序开机自启动等,下面是几个简单示例。 ------------------------------- ### modify below default autorun systemd service file to make customized application autorun ### rootfs/lib/systemd/system/wayland-app-launch.service ... ExecStart=/usr/share/cinematicexperience-1.0/Qt5_CinematicExperience --fullscreen ... ### modify below splash picture to adapt customized splash after enabling plymouth in Yocto project ### rootfs/usr/share/plymouth/themes/spinner/watermark.png ### modify weston configuration file if needed, below for example to hide weston normal shell ### rootfs/ etc/xdg/weston/weston.ini ... shell=kiosk-shell.so ... ------------------------------- ./ 修改完成所有要修改的文件后,可以通过如下命令重新压缩,如果命名和大概文件大小不变则无需修改 image.json 文件,否则就要对应修改。 ------------------------------- $ cd Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.1.0+build.3/rootfs/ $ sudo tar Jcf ../Reference-Multimedia-Image-verdin-imx8mp.rootfs.tar.xz * $ cd .. $ sudo rm -rf rootfs/ ------------------------------- i). “u-boot-initial-env-sd” 如章节 (c) 说明是 U-Boot 环境变量配置文件,可以将定制需要的环境变量修改或者添加在这个文件。比如这里示例添加为了显示 Plymouth Splash 以及关闭 log 输出的环境变量定义。 ------------------------------- tdxargs = quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3’ bootdelay = 0 ------------------------------- j). 定制完成后将完整 BSP image 文件复制到 U 盘或者 SD 卡,通过模块 Toradex Easy Installer 工具安装到模块进行量产即可。 4 ). 总结 本文 基于 Toradex i.MX8MP ARM 处理器平台示例了 Yocto Linux 量产 BSP 镜像定制流程,其他平台定制思路都是基本一致的。
  • 热度 1
    2025-2-26 15:03
    251 次阅读|
    0 个评论
    2022年,飞凌嵌入式全球首发了搭载NXP i.MX 93系列处理器的OK-MX9352-C开发板,这款产品在过去的3年里以其卓越的性能和高度安全性,为众多客户提供了强大的智能化主控支持。 近期,NXP将i.MX 93系列处理器引入了FRDM系列产品线,推出了FRDM i.MX 93开发板,作为首款配备i.MX MPU的FRDM板,它提供了模块化硬件、全面的软件和工具,以及所有FRDM开发板通用的快速入门体验。 飞凌嵌入式第一时间拿到了FRDM i.MX 93开发板,本篇文章,小编就为大家带来这款产品的快速开箱介绍。 开箱初体验——体积小巧,功能全面 打开FRDM i.MX 93开发板小巧的包装,首先映入眼帘的是开发板紧凑而精致的设计,用直尺大致测量一下,开发板的长边也仅有10.5cm左右。尽管体积小巧,但开发板上的每一个元件都经过精心布局,确保了功能的全面性和稳定性。 除此之外,包装内还有附送的快启动指南、配件清单以及2条USB 2.0 Type-A 转 Type-C线。 i.MX 93处理器——性能与功耗的平衡 FRDM i.MX 93的核心当然就是NXP i.MX93处理器了,这款处理器以其卓越的性能和低功耗特性而著称,集成了2个主频1.7GHz的ARM Cortex-A55多任务核和1个Cortex-M33实时核,并创新性地采用了ARM Ethos U-65 microNPU方案,每个周期256个MAC,0.5TOPS算力可在边缘为高效、快速、安全的机器学习赋能。 Energy Flex架构的引入,使得i.MX 93在处理复杂任务时能够保持高效能,同时在待机状态下实现极低的功耗,非常适合物联网和工业应用。 IW612模块——轻松接入多种无线网络 FRDM i.MX 93配备了IW612无线通信模块,支持2.4/5GHz双频Wi-Fi 6、Bluetooth 5.4和IEEE 802.15.4等多种协议。这意味着您的设备可以轻松接入各种无线网络,实现与其他设备的无缝通信,为智能家居、工业物联网、智能设备、网关等应用场景提供强有力的支持。 值得注意的是,IW612模块为Wi-Fi、蓝牙和IEEE 802.15.4子系统分别集成了专用的处理器和存储器,从而实现实时的独立协议处理。 IW612内部结构框图 扩展接口——满足多样化需求 FRDM i.MX 93提供了丰富的扩展接口,包括GPIO、UART、I2C、SPI等,这些接口可以满足您连接各种传感器、执行器和外设的需求。开发板的这种灵活性,使得它能够适应多种应用场景,为您的项目开发提供更多可能性。 FRDM i.MX 93正面接口图 FRDM i.MX 93背面接口图 多媒体性能——HDMI、MIPI接口一应俱全 对于需要高清显示的应用场景,FRDM i.MX 93同样表现出色。开发板上的HDMI接口支持高清视频输出,可以连接到显示器或电视上,呈现出细腻、清晰的画质。这对于工业监控、家庭娱乐等应用场景来说,无疑是一个巨大的加分项。 此外,还配备了4通道MIPI-DSI接口和2通道MIPI CSI-2接口,可轻松实现高分辨率的显示屏连接和高分辨率、高帧率的图像捕获,提供了强大的多媒体处理能力。 软件与工具支持——大大加快开发周期 为了帮助开发者们更快地上手,FRDM i.MX 93开发板还配备了全面的软件和工具链。操作系统环境支持(如Yocto Linux和Debian Linux),还支持面向i.MX应用处理器的GoPoint及丰富的应用程序示例。这些软件和工具将大大加快开发周期,简化从原型到生产的过程。 GoPoint工具界面 不难看出,NXP FRDM i.MX 93开发板拥有紧凑的设计、卓越的性能、低功耗特性、丰富的无线连接能力、多样化的扩展接口以及全面的多媒体能力等诸多优势,能够成为嵌入式工程师手中的得力助手。如果您正在寻找一款高性能、低功耗的开发板来支持您的项目开发,那么FRDM i.MX 93开发板无疑是一个值得考虑的选择。
  • 热度 1
    2025-2-26 12:17
    273 次阅读|
    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,提高磨损寿命。 ​
  • 热度 1
    2025-2-21 09:23
    372 次阅读|
    0 个评论
    近日,恩智浦半导体(NXP Semiconductor)推出了FRDM i.MX 93开发板,这是FRDM系列中第一款基于MPU推出的开发板,以低成本、紧凑的设计为核心,搭载了NXP i.MX 93系列应用处理器,旨在为用户提供一个高效、可靠的解决方案,用于开发现代工业控制和边缘智能应用程序。 FRDM i.MX 93开发板的核心亮点之一是其板载的IW612模块,该模块采用了NXP的Tri-Radio解决方案,集成了Wi-Fi 6、蓝牙5.4和802.15.4三重无线通信技术。这一解决方案不仅提升了无线通信的稳定性和速度,还为开发者提供了更多样化的连接选项,满足不同应用场景的需求。 除了强大的无线通信功能外,FRDM i.MX 93开发板还配备了丰富的硬件资源。其中,HDMI显示接口支持高清视频输出,为开发多媒体应用提供了极大的便利;LPDDR4/LPDDR4X内存和eMMC存储则确保了数据的快速处理和存储,进一步提升了开发效率;配备了电源管理集成电路(PMIC)和兼容树莓派接口定义的EXPIO接口,以满足开发者在不同应用场景下的需求。 FRDM i.MX 93开发板正面接口图 FRDM i.MX 93开发板背面接口图 此外,FRDM i.MX 93开发板还支持GoPoint for i.MX Applications Processors,这一功能通过提供各种用途的全面演示,帮助开发者更快地理解和应用i.MX处理器的强大功能,从而加快产品的上市时间。它不仅可以作为初学者学习和实践嵌入式开发的理想平台,也是专业开发者进行原型设计和产品开发的得力助手。
相关资源