非常感谢飞凌嵌入式与NXP给我这次机会,可以测试OK-MX9596-C开发板,他是基于NXP最新的i.MX 95系列 高性能嵌入式CPU(同门师兄还有i.MX 91、i.MX 93 )
首先温习下i.MX 95的基本配置
发布时间:2023年1月9日
功能框图:

跟同门师弟比一比

下面是DeepSeek所作的i.MX 95特性总结:
| 类别 |
配置与特性 |
|---|
| 处理器核心 |
-应用处理:最多 6x Arm® Cortex-A55 -实时处理:1x Arm Cortex-M7 -安全域:1x ArmCortex-M33 |
| AI 加速 |
恩智浦专有eIQ® Neutron NPU,峰值算力达 2 TOPS 。 |
| 图形处理 |
-3D GPU: Arm Mali GPU,支持 OpenGL® ES 3.2, Vulkan® 1.2, OpenCL™ 3.0-2D GPU |
| 显示接口 |
-MIPI-DSI: 最高支持 4Kp30 或 3840x1440p60-LVDS Tx: 最高支持 1080p60 |
| 摄像头接口 |
-MIPI-CSI&ISP:支持多达 2个4Kp30、4个1080p60 或 8个1080p30摄像头 |
| 内存支持 |
-外部存储:LPDDR5/LPDDR4x (带ECC),最高 6.4GT/s-存储接口:3x SD/SDIO/eMMC, 1x 八通道 SPI |
| 高速连接 |
-网络:1x10GbE+ 2x GbE (支持TSN)-USB: 1x USB 3.0 Type-C + 1x USB 2.0 Type-C-PCIe: 2x PCIe Gen 3-车载网络:5x CAN-FD |
| 功能安全 |
通过恩智浦SafeAssure®平台认证,符合ISO 26262 ASIL-B(汽车) 和IEC 61508 SIL-2(工业) 标准。 |
| 安全特性 |
集成EdgeLock® 安全区域,提供安全启动、密码学加速和防篡改等功能。 |
| 封装 |
19x19 mm (0.7mm间距) 或 15x15 mm (0.5mm间距) |
| 工艺制程 |
16nm FinFET |
? 关键特性解读
除了硬件参数,i.MX 95 的以下几个特点尤其值得关注:
- ? 强大的AI与专用NPU :i.MX 95 集成了恩智浦自研的 Neutron NPU ,这不同于前几代使用的第三方IP,旨在更高效地处理CNN、RNN和Transformer等神经网络,为边缘设备的视觉、语音AI应用提供强劲动力。
- ?️ 内置功能安全与信息安全 :该处理器专为需要功能安全的场景设计。其实时安全域(Cortex-M33) 可以与主应用域隔离运行,确保关键任务(如音频警报、警告显示)的可靠性和确定性响应,满足汽车和工业领域的安全标准。同时,EdgeLock®安全区域提供了从芯片启动开始的层层安全保护。
- ? 异构多核与实时处理 :i.MX 95 的非对称多处理(AMP) 架构允许开发者将不同的任务分配给最适合的核心。例如,你可以将Linux系统运行在Cortex-A55集群上处理复杂应用,同时让Cortex-M7实时内核运行Zephyr这样的RTOS来处理实时性要求极高的任务,并通过OpenAMP框架实现核间通信。这种设计带来了极大的灵活性和性能优化空间。
- ?️ 丰富的开发资源 :恩智浦为i.MX 95提供了较为全面的软件和工具支持:
- 操作系统 :支持 Linux、Android 和 FreeRTOS。
- 开发工具 :i.MX 配置工具 可以帮助你进行引脚多路复用、时钟和DDR配置,并生成初始化代码。
- AI开发 :eIQ® 机器学习软件开发环境 提供模型训练、部署和优化工具,甚至还包含模型水印等高级功能。
- 早期软件 :官方提供了Alpha/Beta版本的BSP,供早期开发评估。
?️ 主要应用场景
基于其高性能和安全性,i.MX 95系列非常适合以下领域:
- 汽车电子 :数字互联仪表盘、高级驾驶舱(eCockpit)、驾驶员监测系统(DMS)、车载信息服务域控制器。
- 工业与物联网 :工业机器人、机器视觉系统、高端人机界面(HMI)、智能网关。
- 两轮车与特种车辆 :新一代高级数字互联仪表盘,集成多摄像头安全辅助、语音控制和跌倒检测等功能。
总之,这配置太顶了:6个A55核心(2.0GHz),1个M7核心(800MHz),1个M33核心(333MHz);还有1个NPU(eIQ Neutron NPU),试问当今宇宙,还有比这更强的存在吗?
回到飞凌嵌入式OK-MX9596-C开发板。
除了i.MX 95 CPU,还集成了丰富的资源和外设,将CPU的功能发挥到极致!
8GB RAM+64GB Flash 功能拉满!

板载资源一览:

下面是期待已久的开箱图赏环节!
正面:

反面:

核心板:8G RAM+64G Flash

配件:大功率电源(12V 5A)、WIFI天线、Type-C数据线

可以看出飞凌嵌入式的开发板保持了一如既往的高品质!!!
简直像艺术品。

按上图连接方式,再打开DC12V旁边的电源开关,就可以点亮开发板,愉快地开始开发工作了。
电脑设备管理器识别出4个串口。

阅读飞凌嵌入式的官方文档:
https://forlinx-book.yuque.com/okypkp/okmx9596
生成的四个串口,Ch A是Linux端调试串口,Ch b是M33核调试串口,Ch C是M7核调试串口,Ch D未使用。
使用串口调试助手分别监听前3个串口:

这里我碰到了第一个问题:
Linux端调试串口(也就是上图的COM7)
在启动完成后,正常情况下,按下Enter回车键,就是输入用户名、密码,然后达到Linux的Shell。
但我本次无论怎么按Enter,都没有得到预期结果,无法进入Shell。
后面尝试更新驱动(USB UART XR21V1414 V2.6.0.0 Drivers),更新驱动后,电脑识别ChA、ChB、ChC、ChD。解决了上述问题。
*附件:USB UART XR21V1414 V2.6.0.0 Drivers.zip


输入用户名root无需输入密码
使用** ip a**指令,查看开发板的网口及ip
root@MiWiFi-CR8806-srv:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 8a:91:1a:b8:46:71 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 8a:91:1a:b8:74:72 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.245/24 brd 192.168.31.255 scope global eth1
valid_lft forever preferred_lft forever
inet 192.168.31.246/24 metric 1024 brd 192.168.31.255 scope global secondary dynamic eth1
valid_lft 37134sec preferred_lft 37134sec
inet6 fd00:6868:6868::a14/128 scope global dynamic noprefixroute
valid_lft 37138sec preferred_lft 37138sec
inet6 fd00:6868:6868:0:8891:1aff:feb8:7472/64 scope global mngtmpaddr noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::8891:1aff:feb8:7472/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 8a:91:1a:b8:07:87 brd ff:ff:ff:ff:ff:ff
inet 169.254.206.98/16 brd 169.254.255.255 scope global eth2
valid_lft forever preferred_lft forever
inet6 fe80::8891:1aff:feb8:787/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
5: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
6: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
7: can2: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
8: can3: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
9: can4: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10
link/can
10: mlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 28:d0:43:15:2a:4f brd ff:ff:ff:ff:ff:ff
11: uap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 2a:d0:43:15:2b:4f brd ff:ff:ff:ff:ff:ff
12: wfd0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 2a:d0:43:15:2a:4f brd ff:ff:ff:ff:ff:ff
可以看到我的eth1网口,也就是插了网线到路由器的端口,自动获取了内网ip:192.168.31.245
我们用电脑ping一下开发板上述ip发现可以ping通

我们再在串口助手中ping一下www.baidu.com
发现可以ping通,也就是可以连上互联网了!!!

另外补充说明下,我们通过ip a查询到的网口
10: mlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 28:d0:43:15:2a:4f brd ff:ff:ff:ff:ff:ff
这项是开发板的wifi网口,可以通过设置连接wifi,进而与电脑互联
iwconfig
sudo iwconfig mlan0 channel 6
wpa_passphrase WIFI名称 wifi密码 > xxx.conf
wpa_supplicant -B -i mlan0 -Dwext -c ./xxx.conf
ifconfig mlan0 192.168.31.158 netmask 255.255.255.0
需要说明上述192.168.31.158要根据自己电脑的ip来拟定一个,让开发板ip跟wifi路由器及电脑ip在同一个网段
通过上述设置,开发板就可以通过wifi来进行通讯和开发了。
后续的所有开发工作,我们都基于SSH而非串口助手来进行,主要因为SSH(基于以太网ip,速度更快,上传下载文件更方便)。
SSH (Secure Shell)是一种网络协议,用于加密方式远程登录到服务器。它提供了比传统的非加密登录协议(如telnet)更安全的网络服务。SSH 不仅加密数据,还提供了两种级别的验证方法,以增强安全性。
我们使用的客户端是 MobaXterm
输入开发板的ip地址和用户名root就可以了。

如图,最下方的状态栏,还可以显示CPU Loading,RAM占用情况,上传下载速度,存储使用情况等,太直观了。
左边的边栏,可以显示开发板的文件系统,可以像Windows电脑一样可视化浏览和操作文件夹和文件,太方便了,根本不用任何指令。
下面我们进入跑分环节。
首先下载Geekbench-5 ARM版
下载地址:
https://cdn.geekbench.com/Geekbench-5.4.0-LinuxARMPreview.tar.gz
可以用浏览器下载后上传到/home/用户名 目录,也可以用wget指令直接下载
wget https://cdn.geekbench.com/Geekbench-5.4.0-LinuxARMPreview.tar.gz
tar xf Geekbench-5.4.0-LinuxARMPreview.tar.gz
cd Geekbench-5.4.0-LinuxARMPreview
./geekbench_aarch64
运行结果如图:
运行完成后,生成了2个网页链接,展示本次跑分结果:
单核:173分
多核:809分




最后的部分,我们来简单玩个大模型yolo v11,进行物体识别。
什么是 YOLO?YOLO(You Only Look Once) 是一种流行的单阶段目标检测算法系列,通过一次前向传播即可完成图像中多个目标的定位和分类,具有实时性强、速度快的特点。自2016年YOLOv1发布以来,该系列不断迭代进化,逐步提升了检测精度和实用性。
YOLOv11 是YOLO系列的最新里程碑,通过架构优化和训练策略升级,在精度、速度和多功能性 上全面超越前代版本(如YOLOv8)。它适用于需要高精度实时检测的场景(如自动驾驶、视频监控),同时也为边缘设备部署提供了更高效的选择
ultralytics 是一个专注于计算机视觉任务的 Python 库,尤其以 YOLO(You Only Look Once) 系列模型为核心,提供了简单易用的接口,支持目标检测、实例分割、姿态估计等任务。本文将详细介绍 ultralytics 库的功能、安装方法、核心模块以及使用示例。
首先确认python版本(指令:python3)及python路径(指令:which python3)

可以看到系统默认安装了python3.11.5
我一开始输入python指令,系统提示没有此命令。
但输入python3指令,就可以正常显示。
说明需要建立python3与python的关联(软链接)
ln -s /usr/bin/python3 /usr/bin/python
在此基础上我们需要安装pip3
pip3 是Python 3的包管理工具,它是 pip 的一个特定版本,专门用于Python 3。pip 本身是Python的包安装程序,是Python标准库中的一个包,但它用于管理Python标准库中的其他包。pip3 允许用户查找、下载、安装、升级和卸载Python包。这些包通常从Python包索引(PyPI)获取,这是一个包含Python编程语言软件的存储库。
sudo apt install python3-pip
同样使用ln指令建立pip3与pip指令之间的软链接
ln -s /usr/bin/pip3 /usr/bin/pip
接下来安装大名鼎鼎的ultralytics,也就是yolo大模型。
pip install ultralytics
在安装ultralytics以及后续的调试yolo程序过程中我遇到了一个问题
就是安装了ultralytics,他会把numpy组件自动更新为最新版本numpy 2.2.4,但在调试yolo程序时会报错,提示numpy 不兼容,最后我只好先卸载numpy 2.2.4,再安装了一个更低的版本 numpy 1.23.0,此问题得以解决
sudo pip uninstall numpy
pip install numpy==1.23.0
查询下Python软件库清单:
root@MiWiFi-CR8806-srv:~# pip list
Package Version
------------------ --------------
bcrypt 4.0.1
btrfsutil 6.5.1
certifi 2023.7.22
cffi 1.15.1
chardet 5.2.0
charset-normalizer 3.4.3
coloredlogs 15.0.1
contourpy 1.3.3
cryptography 41.0.4
cycler 0.11.0
filelock 3.19.1
flatbuffers 20240329233443
fonttools 4.60.1
future 0.18.3
humanfriendly 10.0
idna 3.4
Jinja2 3.1.6
kiwisolver 1.4.5
MarkupSafe 3.0.3
matplotlib 3.7.2
mpmath 1.3.0
ndg-httpsclient 0.5.1
networkx 3.5
numpy 1.23.0
onnxruntime 1.16.1
opencv-python 4.12.0.88
packaging 23.1
paramiko 3.2.0
Pillow 10.0.1
pip 23.2.1
ply 3.11
polars 1.34.0
polars-runtime-32 1.34.0
protobuf 4.24.4
psutil 7.1.0
pyasn1 0.5.0
pyasn1-modules 0.3.0
pybind11 3.0.1
pycairo 1.24.0
pycparser 2.21
PyGObject 3.46.0
pyjailhouse 0.12
PyNaCl 1.5.0
pyOpenSSL 23.2.0
pyparsing 3.0.9
PySocks 1.7.1
python-dateutil 2.8.2
pytz 2023.3
PyYAML 6.0.1
requests 2.31.0
scipy 1.16.2
setuptools 68.2.2
six 1.16.0
sympy 1.12
tflite-runtime 2.14.0
torch 2.0.0
torchvision 0.15.1
tpm2-pkcs11-tools 1.33.7
tpm2-pytss 2.1.0
typing_extensions 4.8.0
ultralytics 8.3.205
ultralytics-thop 2.0.17
urllib3 2.0.7
第一个yolo程序:yolo1.py
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
for r in results:
print(r.boxes)
使用 python yolo1.py指令运行
程序首先会下载yolo11n.pt文件
然后下载bus.jpg这是识别对象,是官网素材,会自动下载到/home/用户名 目录


YOLO11n.pt 是 YOLO11 模型的一个预训练权重文件,专门用于目标检测任务。YOLO11 是 Ultralytics 推出的最新一代 YOLO 系列模型,继承了 YOLOv8 的架构,并在精度、速度和效率上进行了显著优化。YOLO11n.pt 代表 YOLO11 的“nano”版本,适合资源受限的设备部署。
YOLO11 的主要特点
YOLO11 在多个方面进行了改进,包括增强的特征提取能力、优化的训练管道以及更高的计算效率。它支持多种计算机视觉任务,如目标检测、实例分割、图像分类、姿态估计和定向边界框检测(OBB)。相比前代版本,YOLO11n 模型参数更少,但在 COCO 数据集上的平均精度(mAP)表现更优。
运行结果如下

识别出了4个人,1辆公交车,花费时间5147.9ms,但不够直观。
image 1/1 /home/root/bus.jpg: 640x480 4 persons, 1 bus, 5147.9ms
第二个yolo程序:yolo2.py
这个例程会下载2张图片到home/用户名 目录,并进行物体识别
from PIL import Image
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"])
for i, r in enumerate(results):
im_bgr = r.plot()
im_rgb = Image.fromarray(im_bgr[..., ::-1])
r.show()
r.save(filename=f"results{i}.jpg")
运行结果如下:
在左侧root文件夹,下载了bus.jpg,不知道zidane.jpg为何没下载下来。

以及识别结果 result0.jpg,result0.jpg


0: 640x640 4 persons, 1 bus, 4097.1ms
1: 640x640 2 persons, 1 tie, 4097.1ms
Speed: 16.3ms preprocess, 4097.1ms inference, 7.8ms postprocess per image at shape (1, 3, 640, 640)
运行结果显示
图片1 识别出4个人,1辆车
图片2 识别出2个人,1条领带
花费时间都是4097.1ms

第三个yolo程序:yolo3.py
前两个程序都是使用ultralytics官网的素材图片,本程序,我们使用自己上传的图片
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
results = model(["pic.jpg"])
for result in results:
boxes = result.boxes
masks = result.masks
keypoints = result.keypoints
probs = result.probs
obb = result.obb
result.show()
result.save(filename="result.jpg")
其中pic.jpg是自己准备的图片,需要提前上传到/home/用户名 目录,程序运行后自动生成 result.jpg图片,如下

0: 384x640 7 persons, 5 chairs, 4102.0ms
Speed: 16.7ms preprocess, 4102.0ms inference, 13.1ms postprocess per image at shape (1, 3, 384, 640)
仅仅识别出7个人,5把椅子,看起来这个大模型智能识别全身照片?
我们再换一个水果识别

识别结果 4个苹果 9个橙子 1个餐桌,花费6181.0ms
0: 576x640 4 apples, 9 oranges, 1 dining table, 6181.0ms
Speed: 17.6ms preprocess, 6181.0ms inference, 15.0ms postprocess per image at shape (1, 3, 576, 640)
似乎别刚才的情况好一些了哈。

需要说明,以上yolo识别纯纯地基于CPU运算,没有涉及imx95搭载的NPU,因此识别结果仅做验证,后续将程序与NPU结合,相信会带来质的飞跃。
本次分享就到这里。