Zephyr 平台上的 nrf5340bsim 模拟板卡:基于 BabbleSim 的双核 nRF5340 开发与调试指南
Zephyr 平台上的 nrf5340bsim 模拟板卡基于 BabbleSim 的双核 nRF5340 开发与调试指南【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr导读本文围绕 Zephyr RTOS 仓库中 nrf5340bsim 模拟板卡文档 展开系统讲解如何在开发主机上原生仿真 Nordic nRF5340 双核 SoC应用核 cpuapp 与网络核 cpunet。这套方案由 BabbleSim 负责仿真射频行为、由 POSIX 架构与 native simulator 负责在开发机上以原生速度执行应用代码读者学完后将掌握两个模拟板卡的选型与构建方法、如何把双核镜像组装进同一个可执行文件含 sysbuild 方式、以及 TrustZone/TF-M 在仿真环境中的边界与替代方案。一、nrf5340bsim 是什么为了在开发主机上模拟 nRF5340 SoCZephyr 提供了两个目标板板卡目标对应物理核心说明nrf5340bsim/nrf5340/cpuappnRF5340 应用核Application core对应 nrf5340dk 目标的 cpuapp 构建目标nrf5340bsim/nrf5340/cpunetnRF5340 网络核Network core对应 nrf5340dk 目标的 cpunet 构建目标这两个板卡从 board.yml 定义 上看type: native、arch: posix、simulation: native并且要求环境中存在BSIM_OUT_PATH环境变量。它们的工作方式与 nrf52_bsim 一脉相承使用 BabbleSim 仿真射频活动使用 POSIX 架构与 native simulator 在开发系统上原生运行应用。这样做的好处是原生代码执行性能运行速度远快于指令级仿真可以使用 gdb、valgrind 等本机工具直接调试继承 POSIX 架构的固有限制文档中的posix_arch_limitations一节。从 Kconfig.nrf5340bsim 可以看出BOARD_NRF5340BSIM会select SOC_POSIX两个目标共享同一套板级配置。1.1 与 nrf5340dk 的关系与真实 nrf5340dk 目标一致nrf5340bsim/nrf5340/cpuapp对应应用核nrf5340bsim/nrf5340/cpunet对应网络核。区别在于仿真板卡针对已被建模的外设复用了与 nrf5340dk 完全相同的驱动因此应用层代码几乎无需改动即可在两者之间迁移。1.2 已被建模的外设清单nrf5340bsim 板卡包含了以下 nRF5340 SoC 外设的模型AAR加速地址解析器 Accelerated Address ResolverAES CCM 与 AES ECB 加密硬件CLOCK时钟控制DPPI分布式可编程外设互连 Distributed Programmable Peripheral InterconnectEGU事件生成单元 Event Generator UnitFICR工厂信息配置寄存器 Factory Information Configuration RegistersGPIO 与 GPIOTEIPC核间通信 Interprocessor communicationMUTEX互斥外设NVMC非易失存储器控制器 / FlashRADIORNG随机数发生器RTC实时计数器TEMP温度传感器TIMERUARTE带 Easy DMA 的 UARTUICR用户信息配置寄存器 User Information Configuration Registers这些外设使用与 nrf5340dk 目标相同的驱动。至于每个模型被建模到何种细节程度可查阅 BabbleSim 的ext_nRF_hw_models仓库中的HW models implementation status文档见硬件模型实现状态。从 cpuapp 的设备树文件 可以观察到仿真板卡对未建模的外设I2C、SPI、PWM、PDM、I2S、QDEC、USB、NFCT、QSPI、ADC、看门狗、比较器等通过/delete-node/与/delete-property/方式从继承的arm/nordic/nrf5340_cpuapp.dtsi中移除网络核的 设备树 同样删除了 watchdog、I2C/SPI、ACL、VMC 等节点并在 RADIO 节点中删除dfe-supported因为 RADIO 模型暂不支持 DFE 特性。1.3 资源限制的差异与真实 nrf5340 器件不同nrf5340bsim 板卡的 RAM 与 Flash 对代码来说都是不受限制的。例如 cpuapp 设备树把 flash0 定义为 1024 KiB、sram0 定义为 512 KiB但正如文档强调的仿真环境中的这些数值更多是逻辑上的真正的约束来自开发主机资源。二、构建与使用这两个模拟板卡2.1 环境准备如果只开发 SoC 中的某一个核可以按 nrf52_bsim 板卡的构建说明来操作只需把 board/target 换成对应的目标即可。前置条件主机 32 位 C 库POSIX 架构有相应依赖见 POSIX Arch 依赖 的posix_arch_deps一节。系统内编译好 BabbleSim最简单的方式是在本地 west 配置中启用 babblesim 组执行 west update 并编译模拟器west config manifest.group-filter -- babblesim west update cd ${ZEPHYR_BASE}/../tools/bsim make everything -j 8如果需要更多 BabbleSim 组件或更新版本可参考 BabbleSim 官网关于 fetch 与 build 的说明。设置两个环境变量指向 BabbleSim 安装目录export BSIM_OUT_PATH${ZEPHYR_BASE}/../tools/bsim export BSIM_COMPONENTS_PATH${BSIM_OUT_PATH}/components/建议把这两行追加到~/.zephyrrc或 shell 初始化脚本如~/.bashrc避免每个新 shell 都要手动执行。2.2 构建示例以 hello_world 为例构建针对网络核的镜像west build -p auto -b nrf5340bsim/nrf5340/cpunet samples/hello_world运行无射频场景./build/zephyr/zephyr.exe -nosim # 按 CtrlC 退出注意-nosim表示脱离 BabbleSim 仿真运行仅在无射频活动时可用对大多数 Zephyr sample 与测试完全够用。2.3 运行带射频的仿真当需要射频活动时必须同时运行 BabbleSim 的 2G42.4GHz物理层仿真Phy。以 BLE central 连接 peripheral 为例把两个可执行文件复制到 BabbleSim bin 目录后一起运行cd ${BSIM_OUT_PATH}/bin/ ./bs_nrf5340bsim_samples_bluetooth_peripheral_hr -strial_sim -d0 ./bs_nrf5340bsim_samples_bluetooth_central_hr -strial_sim -d1 ./bs_2G4_phy_v1 -strial_sim -D2 -sim_length10e6 命令行参数含义-s唯一标识本次仿真的字符串-D告诉 Phy 本次仿真共有多少设备-d告诉每个设备自己在仿真中的设备编号-sim_length仿真时长微秒。BabbleSim 设备和 Phy 支持大量命令行开关运行它们并加-help可查看完整说明。2.4 自动启动与无镜像行为与真实硬件不同仿真环境下网络核 MCU 默认被设置为启动时自动 boot以便在没有应用核镜像时也能独立开发。可通过以下两种方式控制Kconfig 选项CONFIG_NATIVE_SIMULATOR_AUTOSTART_MCU命令行选项--cpu1_autostart。如果某个 MCU 在没有镜像的情况下被 boot它会自动进入睡眠状态。2.5 串口控制台的使用部分应用需要控制台交互通常启用CONFIG_CONSOLE_SUBSYS与CONFIG_CONSOLE_GETCHAR。BabbleSim 板卡默认关闭 UART 控制台需要附加serial-consolesnippetwest build -S serial-console [...]然后通过伪终端pseudoterminal连接查看输出与交互# 自动附加到终端 ./build/zephyr/zephyr.exe --uartuart_id_pty_attach # 使用自定义命令附加到终端例如 xterm -e screen %s ./build/zephyr/zephyr.exe --uartuart_id_attach_cmdcmd # 手动连接伪终端 ./build/zephyr/zephyr.exe --uartuart_id_pty --uart_pty_wait minicom -D /dev/pts/pts_id--uart_list选项会打印uart_id与外设的映射关系overlay 文件则描述哪个 UART 外设被用作控制台输出。更多细节可查看可执行文件的-help输出。三、把双核镜像组装进单个可执行文件默认情况下针对nrf5340bsim/nrf5340/cpuapp或nrf5340bsim/nrf5340/cpunet的构建会得到zephyr/zephyr.elf对应 MCU 的代码镜像库zephyr/zephyr.exe包含 native simulator runner、SoC 硬件模型、该镜像以及另一个核的空镜像的可执行文件。3.1 使用 CONFIG_NATIVE_SIMULATOR_EXTRA_IMAGE_PATHS如果想在可执行文件中装入之前已构建好的另一核镜像无论由 Zephyr 构建系统还是其他兼容 native simulator 的构建系统生成可以通过 Kconfig 选项CONFIG_NATIVE_SIMULATOR_EXTRA_IMAGE_PATHS把这个镜像提供给第二个镜像的 Zephyr 构建。3.2 使用 sysbuild 构建双核可执行文件更推荐的方式是使用 System buildsysbuild 构建双 MCU 可执行文件。仓库中 nrf53_sync_rtc 示例的 sysbuild.cmake 是理解该流程的最佳参考if(${SB_CONFIG_NET_CORE_BOARD} STREQUAL ) message(FATAL_ERROR Target ${BOARD} not supported for this sample. There is no remote board selected in Kconfig.sysbuild ) endif() set(REMOTE_APP net) ExternalZephyrProject_Add( APPLICATION ${REMOTE_APP} SOURCE_DIR ${APP_DIR}/${REMOTE_APP} BOARD ${SB_CONFIG_NET_CORE_BOARD} ) native_simulator_set_child_images(${DEFAULT_IMAGE} ${REMOTE_APP}) native_simulator_set_final_executable(${DEFAULT_IMAGE})关键点在于通过ExternalZephyrProject_Add把第二个核示例中是net作为独立 Zephyr 工程加入构建native_simulator_set_child_images声明哪个是子镜像native_simulator_set_final_executable让默认镜像生成最终的合并可执行文件。该示例的应用核与网络核代码分别位于 samples/boards/nordic/nrf53_sync_rtc/app 与 samples/boards/nordic/nrf53_sync_rtc/net。重要限制这些库/镜像不是嵌入式镜像。它们不能用于嵌入式设备也不能用嵌入式镜像去组装 native 可执行文件。四、TrustZone、TF-M 与安全注意事项这些板卡没有建模 ARM TrustZone由此带来一系列约束不存在安全态secure与非安全态non-secure执行状态或总线访问的区分所有 RAM、Flash 和外设原则上对所有软件可访问拥有独立互连主端口的外设原则上可以访问任何其他外设或 RAM 区域不存在nrf5340bsim/nrf5340/cpuapp/ns板卡/构建目标也无法混合安全与非安全镜像目前没有 SPUSystem Protection Unit模型因此 Flash、RAM 区域或外设不能被标记为仅限安全或非安全访问TF-M 无法使用。另外ARM Cryptocell-312 外设未被建模。Mbed TLS 库仍然可以使用但使用的是软件加密后端而非 Cryptocell 硬件加速。五、调试、覆盖率、消毒器与时间模型5.1 原生调试工具链与 native_sim 一致构建产物是 Linux 原生应用因此可以用调试或检测本机应用的工具如gdb、valgrind来调试与检测。POSIX 架构的代码覆盖率分析手段coverage_posix在该板卡同样可用native_sim 的地址与未定义行为消毒器ASan/UBSannative_sim_asan也同样适用。BabbleSim 在其一个或多个组件被调试器或检测工具运行的情况下也能正常工作例如在断点处暂停某个设备会暂停整个仿真。5.2 确定性BabbleSim 在设计上是完全确定性的结果不受主机计算速度影响。所有随机性都由随机种子控制这些种子可以作为命令行选项提供。5.3 仿真时间BabbleSim 中的时间是模拟的与真实时间解耦。通常模拟时间比真实时间快几个数量级仅受工作站算力限制。如果需要把仿真速度限制到实时或其实时比例可以连接 BabbleSim 的 handbrake device 到 Phy。六、实战要点小结选板只做单核开发时直接用nrf5340bsim/nrf5340/cpuapp或nrf5340bsim/nrf5340/cpunet需要双核协同验证时走 sysbuild 路线。环境确认主机 32 位 C 库、BabbleSim 编译产物与BSIM_OUT_PATH/BSIM_COMPONENTS_PATH两个环境变量就绪。运行无射频场景用-nosim有射频场景必须启动bs_2G4_phy_v1并正确设置-s、-d、-D、-sim_length。网络核启动网络核默认自动 boot可用CONFIG_NATIVE_SIMULATOR_AUTOSTART_MCU或--cpu1_autostart控制无镜像 boot 会自动睡眠。安全边界TrustZone、SPU、Cryptocell-312 均未建模TF-M 不可用涉及安全态划分的验证应回到真实硬件。控制台需要串口交互时通过-S serial-console启用 snippet再用--uartid_pty_attach等选项连接伪终端。如需进一步深挖可继续阅读 nrf5340bsim 板卡源码目录、nrf52_bsim 板卡文档 以及 nrf53_sync_rtc 示例后者是双核 sysbuild 集成最直接的实践范本。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Vim操作速查:从高频命令到宏录制与缓冲区管理

Vim操作速查:从高频命令到宏录制与缓冲区管理

身边不少同事入坑 Vim 的第一天,就被“怎么保存退出”这种基础操作难住了。我在自己的主力编辑环境里用 Vim 已经快十年,从最开始只会i、Esc、:wq三件套,到后来用宏、寄存器、多缓冲区配合完成各种重复性文本批量处理,中间踩过的坑…

2026/9/19 0:22:46 阅读更多 →
TTS/ASR四层链路:64个音色、¥1/万字符计费与报错排查

TTS/ASR四层链路:64个音色、¥1/万字符计费与报错排查

最近这段时间,帮两个团队收拾语音链路的烂摊子,让我对"四层链路"这个词有了全新的敬畏。一个是做智能硬件伴随设备的,演示前两小时整机突然哑巴,日志里只有一个孤零零的runtime_error;另一个是做内容朗读类应…

2026/9/19 0:22:46 阅读更多 →
.NET 运行时 Cross DAC 深度解析:如何用 Windows 调试工具分析 *nix 转储文件

.NET 运行时 Cross DAC 深度解析:如何用 Windows 调试工具分析 *nix 转储文件

.NET 运行时 Cross DAC 深度解析:如何用 Windows 调试工具分析 *nix 转储文件 【免费下载链接】runtime .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. 项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime 导读…

2026/9/19 0:22:46 阅读更多 →

最新新闻

AI论文写作助手评测:虎贲等考AI如何提升学术效率

AI论文写作助手评测:虎贲等考AI如何提升学术效率

1. 项目背景与核心需求作为一名经历过论文写作煎熬的过来人,我深知从选题到答辩的每个环节都可能成为毕业路上的绊脚石。去年我组织了一个由127名不同专业毕业生参与的实测项目,对市面上主流的12款AI论文辅助工具进行了为期三个月的横向评测。最终虎贲等…

2026/9/19 1:17:14 阅读更多 →
项目驱动学习法:从Vue迷茫到上瘾的实战路径

项目驱动学习法:从Vue迷茫到上瘾的实战路径

说实话,看到标题里“迷茫”和“上瘾”这两个词,我特别有感触。我在技术圈混了十几年,见过太多人学Vue学到一半就放弃了,也见过不少人从一个只会写静态页面的新手,硬生生靠着几个真实项目成了团队里的前端主力。我自己就…

2026/9/19 1:17:14 阅读更多 →
Parcel Scope Hoisting Packager 原理深度解析:从 import 替换到符号解析的完整打包流程

Parcel Scope Hoisting Packager 原理深度解析:从 import 替换到符号解析的完整打包流程

Parcel Scope Hoisting Packager 原理深度解析:从 import 替换到符号解析的完整打包流程 【免费下载链接】parcel The zero configuration build tool for the web. 📦🚀 项目地址: https://gitcode.com/gh_mirrors/pa/parcel 本文以 …

2026/9/19 1:17:14 阅读更多 →
AMOS输出结果解读:从收敛检查到修正指数的完整指南

AMOS输出结果解读:从收敛检查到修正指数的完整指南

简介:《AMOS输出解读和分析》是一份面向结构方程模型学习者与量化研究者的完整讲解PDF,以经典惠顿社会疏离感追踪研究为例,系统演示AMOS图形模式下从数据导入、模型识别、路径设定、计算估计到结果输出的完整流程,并针对变量汇总、…

2026/9/19 1:17:14 阅读更多 →
Python性能优化利器:Numba JIT编译器原理与实践

Python性能优化利器:Numba JIT编译器原理与实践

1. Numba JIT 的本质与核心价值Numba 是一个开源的 Python 即时编译器(Just-In-Time compiler),由 Anaconda 公司主导开发。它通过 LLVM 编译器基础设施将 Python 代码直接编译为机器码,特别适合数值计算密集型任务。与传统解释执…

2026/9/19 1:17:14 阅读更多 →
免费降ai1000字的入口有哪些?亲测5类免费降AI率方法,AIGC检测标红段谁能真把AI率改下来!

免费降ai1000字的入口有哪些?亲测5类免费降AI率方法,AIGC检测标红段谁能真把AI率改下来!

免费降ai1000字的入口有哪些?亲测5类免费降AI率方法,AIGC检测标红段谁能真把AI率改下来! 广告学的学妹发来一张知网报告截图,第二章行业分析整章标红,7700字的毕业论文初检AI率67%,学校要求30%以内&#x…

2026/9/19 1:16:14 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →