LibreVNA 固件与 PC 应用完整构建指南:MCU 固件、FPGA 比特流与 combined.vnafw 组合更新

发布时间:2026/10/14 16:49:48
LibreVNA 固件与 PC 应用完整构建指南:MCU 固件、FPGA 比特流与 combined.vnafw 组合更新 硬件开发嵌入式科研【免费下载链接】LibreVNA100kHz to 6GHz 2 port USB based VNA项目地址https://gitcode.com/gh_mirrors/li/LibreVNA点击查看免费下载LibreVNA 由 PC 端 C/Qt 应用和嵌入式端固件STM32 MCU 固件 Spartan 6 FPGA 比特流三部分组成三者必须协同构建、打包为统一的combined.vnafw镜像后才能完成设备升级。本文基于官方构建文档 BuildAndFlash.md 逐环节展开并结合仓库中的打包脚本、MCU 固件校验代码与 GUI 升级对话框源码讲清每个产物的生成位置、镜像格式与 USB 升级流程的底层机制读完即可独立完成从源码编译到新板卡上电点亮的全过程。1. 构建产物全景为什么要分三步构建LibreVNA 的固件体系可以概括为三个独立产物产物代码位置构建工具输出文件PC 应用Software/PC_Application/LibreVNA-GUI/Qt qmake libusb-1.0librevna可执行文件MCU 固件Software/VNA_embedded/STM32CubeIDE或 arm-none-eabi MakefileVNA_embedded.binFPGA 比特流FPGA/VNA/Xilinx ISESpartan 6 支持top.bin其中 MCU 固件在 B 版硬件上只作为“引导程序”使用它启动后通过板载 SPI Flash 读取 FPGA 比特流并配置 FPGA同时可以接收 USB 侧发来的新固件将其写入外部 Flash再自擦除、自复制内部 Flash 后重启。这正是“新硬件只需烧写一次 MCU 固件之后均可通过 USB 升级”这一设计的关键。2. 构建环境准备按官方文档给出的工具清单构建 PC 应用Qt Creator文档要求至少 Qt 5.9当前代码已按 Qt6 组织安装命令使用 Qt6 包libusb-1.0 开发库构建 MCU 固件STM32CubeIDESTM32 微控制器的代码生成器与 IDE生成 FPGA 比特流Xilinx ISE需包含 Spartan 6 支持PC 端依赖可以直接用 apt 安装文档原文命令sudo apt-get install libusb-1.0-0-dev qt6-tools-dev qt6-base-dev3. 构建 PC 应用3.1 命令行构建cd Software/PC_Application/LibreVNA-GUI qmake6 make3.2 使用 Qt Creator 构建另一种方式是直接用 Qt Creator 打开 LibreVNA-GUI.pro 工程文件并 Build文档推荐此方式用于交互式开发。从工程文件可以确认构建所需的全部依赖QT widgets network svg LIBS -lusb-1.0 CONFIG c17 DEFINES FW_MAJOR1 FW_MINOR6 FW_PATCH5 FW_SUFFIXwidgets network svg对应界面、TCP/SCPI 服务与矢量图标-lusb-1.0是设备通信的基础Linux 下配合仓库自带的 51-vna.rules udev 规则可免 root 访问设备macOS 下工程额外通过pkg-config链接 libusb工程文件内已内置相应规则FW_MAJOR/FW_MINOR/FW_PATCH宏是 GUI 侧定义的固件版本常量用于固件更新等场景的版本判断。值得注意的是该工程还把 MCU 端通信协议的源文件Protocol.cpp、Protocol.hpp、PacketConstants.h直接编入了 PC 应用保证两端协议解析逻辑同源一致。4. 构建 MCU 固件4.1 STM32CubeIDE 流程官方文档步骤导入工程仅需一次以Software/作为工作区打开 STM32CubeIDE然后 File Import... General Exisiting Projects into Workspace在 Root directory此时应已指向Software/中选择 “VNA_embedded” 工程Finish。构建Project Build Project。烧录/调试新硬件或调试时各一次若没有运行配置Run Run configurations 新建 “STM32 Cortex-M C/C Application”在 Main 标签页选择编译出的.elf文件用 ST-Link 连接 PCB 上的 SWD 焊盘需要先拆下铝合金外壳Run Run 烧录或 Run Debug 进入调试。4.2 仓库中的 Makefile 交叉编译路线从源码结构看Software/VNA_embedded/下还附带了一份可直接使用的 GNU Make 构建脚本 Makefile它完整对应 STM32G431CBU 目标工具链arm-none-eabi-前缀的 gcc/g/objcopyPREFIX arm-none-eabi-CPU 参数Cortex-M4、Thumb、FPUfpv4-sp-d16、硬浮点-mfloat-abihard关键宏-DHW_REVISIONB、-DSTM32G431xx、-DUSE_HAL_DRIVER等定义了当前针对 B 版硬件构建链接脚本为 STM32G431CBUX_FLASH.ld启动文件为 startup_stm32g431cbux.s默认目标all会同时产出build/VNA_embedded.elf、.hex和.bin其中.bin正是后续固件打包需要的二进制。即在安装了arm-none-eabi工具链的机器上进入该目录执行make即可得到与 CubeIDE 等价的VNA_embedded.bin输出到build/子目录。两种构建方式产出的文件名一致后续打包步骤完全相同。5. 生成 FPGA 比特流文档给出的 Xilinx ISE 操作只有三步但对 FPGA 部分必不可少用 Xilinx ISE 打开 FPGA/VNA/VNA.xise在 Design 标签页选择 implementation view然后选中 “top - Behavioral”在 Processes 标签页双击 “Generate Programming File”等待数分钟完成。成功后会在FPGA/VNA/目录生成top.bin仓库中已包含一份示例比特流 top.bin。MCU 固件在启动时会从外部 Flash 中把这份比特流以 256 字节为单位经 SPI 流式写入 FPGA 的配置引脚该过程由 FPGA.cpp 中的FPGA::Configure()实现并在配置完成后检查INIT_B/DONE信号以判断是否发生 CRC 错误或配置失败。6. 组装 combined.vnafw 组合固件只有全新硬件上的空白 MCU 需要直接烧录一次 MCU 固件之后的更新都可以走 USB。而 USB 升级要求使用同时包含FPGA 比特流 MCU 固件 头部数据的组合镜像。6.1 前置检查与执行确认 MCU 固件已编译在Software/VNA_embedded/的Debug/或Release/目录下应有VNA_embedded.binMakefile 方式则在build/目录确认 FPGA 比特流已生成FPGA/VNA/目录下应有top.bin在仓库根目录执行打包脚本python3 AssembleFirmware.py脚本 AssembleFirmware.py 会输出实际使用的 MCU 固件路径、两部分尺寸、CRC32 值以及最终镜像大小Using Software/VNA_embedded/Debug/VNA_embedded.bin as MCU firmware Got FPGA bitstream of size 341712 Got MCU firmware of size 130240 Calculating CRC...:0x9e6b1c2a Created combined firmware file of size 4748806.2 镜像格式解析源码级印证脚本生成的combined.vnafw布局为4 字节魔术字 20 字节头部 比特流 MCU 固件 256 字节对齐填充。头部结构小端序HEADER_SIZE 24字节整体偏移字段含义取值来源0magic[4]魔术字VNA!固定4FPGA_start比特流起始地址24HEADER_SIZE8FPGA_size比特流大小top.bin文件长度12CPU_startMCU 固件起始地址24 FPGA_size16CPU_sizeMCU 固件大小VNA_embedded.bin文件长度20crc全镜像 CRC32以0xFFFFFFFF为初值对比特流、再对 MCU 固件链式计算这个格式与 MCU 端 Firmware.cpp 中的校验逻辑严格对应GetFlashContentInfo()读取外部 Flash 前 24 字节逐字段检查 magic 是否为VNA!、FPGA_size是否超过FPGA_MAXSIZE512000 字节、CPU_size是否超过CPU_MAXSIZE131072 字节即 128 KiB并按同样的链式 CRC32 重新计算比对若 CRC 或 magic 不通过即判定 Flash 无效。这也解释了打包脚本末尾为何要把总长度填充到 256 的整数倍——与协议常量FW_CHUNK_SIZE 256见 PacketConstants.h一致使镜像可以按固定块通过 USB 传输。此外脚本会在Debug/、Release/、build/三个候选路径中自动选择修改时间最新的VNA_embedded.bin三者都不存在时报错退出头部长度若与假设的 24 字节不符也会自检失败退出避免产出不合法镜像。7. 通过 PC 应用执行固件更新combined.vnafw生成后升级通过 PC 应用完成。GUI 侧实现位于 firmwareupdatedialog.cpp其状态机与状态日志逐行对应上文截图校验文件要求文件总长度为 256 的整数倍Invalid file size并读取 24 字节头部与设备期望的魔术字比对魔术字不符且设备协议版本不匹配时会弹出确认框由用户决定是否继续ClearFlash向设备发送擦除命令MCU 侧对Firmware::maxSize范围执行整片擦除等待 20 秒超时保护FirmwarePacket分块传输按 256 字节/包逐块写入外部 Flash每包携带目标地址GUI 更新进度条PerformFirmwareUpdate全部传完后触发设备更新。MCU 端 App.cpp 收到该包后再次执行Firmware::GetFlashContentInfo()校验然后Firmware::PerformUpdate()在 RAM 中运行copy_flash()先擦除内部 MCU Flash再从外部 Flash 经 SPI 读回新固件逐字写入内部 Flash最后触发软复位——由于返回地址可能落在新固件任意位置该函数刻意不返回等待重新枚举GUI 断开连接后轮询设备列表待设备以相同序列号重新出现等待 3 秒后重新连接标记更新成功。若 MCU 在擦除阶段返回 Nack对话框会提示 “device does not support firmware update”说明当前运行的固件/硬件不支持 USB 升级路径例如旧硬件无外部 Flash。8. Booting LED 错误码速查新板卡上电后Booting LED 的闪烁次数用于指示错误码具体语义可直接从 App.cpp 的启动序列得到印证LED 闪烁逻辑见 Led.cpp 的LED::Error(code)以“闪烁 N 次”显示代码 N代码日志源码原文含义1Failed to detect onboard FLASH未检测到板载 SPI Flash 芯片2Invalid bitstream/firmware, not configuring FPGA外部 Flash 内容为空或校验失败新板卡首次上电即为该状态属正常3FPGA configuration failed比特流已加载但 FPGA 配置失败4Initialization failed, unable to start硬件初始化失败官方文档特别强调错误码 2 指的是板载外部 Flash内容为空而非 MCU 内部 Flash——因此新板卡刷入 MCU 固件后看到两次闪烁完全正常下一步就是走 USB 固件更新。9. 新板卡上线四步法Getting a new board running将文档流程与上文的源码证据对齐新硬件的完整上线路径为直接烧录 MCU 固件用 ST-Link 连接板卡 SWD 焊盘通过 OpenOCD、STM32 ST-Link Utility 等工具烧录编译好的 MCU 固件这一步之后永远不再需要拆机确认状态Booting LED 显示错误码 2外部 Flash 空——这是预期的通过 PC 应用执行固件更新打开编译好的 PC 应用若未连接设备Device Update Device List再 Device Connect to 选择你的设备序列号执行更新Device Firmware Update选择combined.vnafw点击 Start过程如第 7 节所述擦除 → 传输 → 触发 → 重启重连确认成功板卡重启后不再报告错误仅 Ready 和 Power LED 点亮。10. 产物核对清单完成全部构建与打包后按路径核对关键文件即可判断流程是否走通检查项预期路径PC 应用可执行文件Software/PC_Application/LibreVNA-GUI/构建输出MCU 固件二进制Software/VNA_embedded/Debug/或Release/、build/下的VNA_embedded.binFPGA 比特流FPGA/VNA/top.bin组合固件镜像仓库根目录下生成的combined.vnafw24 字节头 比特流 MCU 固件 256 对齐填充需要提醒的限制Xilinx ISE 仅对 Spartan 6 提供相应支持FPGA 部分无法用 Vivado 替代PC 端安装命令基于 Debian/Ubuntu 系包管理apt其他发行版或 Windows/macOS 需按文档说明安装 Qt 与 libusb-1.0 的对应包USB 升级依赖 B 版硬件的 MCU 可控外部 Flash 设计源码中以HAS_FLASH条件编译标识更早的硬件版本不具备该更新路径。赞分享硬件开发嵌入式科研【免费下载链接】LibreVNA100kHz to 6GHz 2 port USB based VNA项目地址https://gitcode.com/gh_mirrors/li/LibreVNA点击查看免费下载相关推荐LibreVNA设备固件更新失败后的恢复方法LibreVNA设备固件更新失败后的恢复方法 问题背景 在使用LibreVNA矢量网络分析仪时用户可能会遇到固件更新失败导致设备无法正常启动的情况。典型表现为硬件开发嵌入式科研PX4 Autopilot 固件加载完全指南使用 QGroundControl 安装、升级固件与更新 BootloaderPX4 Autopilot 固件加载完全指南使用 QGroundControl 安装、升级固件与更新 Bootloader 本文以 PX4 Autopilot嵌入式物联网机器人自动驾驶智能硬件Embassy STM32WL Bootloader 固件更新示例指南DFU 双分区架构与完整刷写流程Embassy STM32WL Bootloader 固件更新示例指南DFU 双分区架构与完整刷写流程 本文以 Embassy 仓库中 examples/bo嵌入式物联网异步编程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询