本文档介绍了 Mission Planner 中的固件更新系统,该系统允许用户下载固件并将其刷写到基于 ArduPilot 的自动驾驶仪硬件上。固件更新系统负责处理电路板检测、固件选择、下载以及上传到各种飞行控制器电路板的操作。

有关固件安装后配置参数的信息,请参阅参数编辑器

固件更新系统概述

Mission Planner 提供了两个主要的固件更新界面:

  1. ConfigFirmware - 带有车辆类型图标的传统界面
  2. ConfigFirmwareManifest - 较新的基于清单的接口

两个接口都使用相同的底层系统来检测电路板、下载固件文件以及将固件上传到自动驾驶仪硬件。

固件更新工作流程

固件更新过程遵循以下一般流程:

关键组件

1. 固件类

该类Firmware是固件更新系统的核心组件:

  • 从在线来源检索固件列表
  • 处理固件下载
  • 管理电路板检测和固件上传过程
  • 在更新过程中提供进度更新

主要方法包括:

  • getFWList():从在线来源检索固件列表
  • updateLegacy():固件更新过程的主要方法
  • UploadFlash()UploadPX4()、 和UploadVRBRAIN():特定于主板的上传方法

2. 板材检测系统

BoardDetect类别标识连接到计算机的自动驾驶仪硬件的类型:

检测过程采用:

  • USB设备识别
  • 端口枚举
  • 针对董事会的询问
  • 引导加载程序识别

3.上传系统

该类px4uploader.Uploader在引导加载程序模式下处理与自动驾驶仪硬件的低级通信:

上传者:

  • 实现引导加载程序协议
  • 处理设备识别
  • 管理固件上传过程
  • 对上传的固件进行验证
  • 提供进度和状态更新

固件更新用户界面

Mission Planner 提供两个主要的固件更新界面:

1. 传统的ConfigFirmware接口

此界面以可点击的图标显示不同类型的载具(直升机、飞机、探测车等)。它:

  • 根据车辆类型显示固件选项
  • 显示固件版本信息
  • 处理固件选择和更新过程
  • 使用进度信息更新 UI

关键方法:

  • updateDisplayName():使用固件版本信息更新 UI
  • findfirmware():启动固件更新过程
  • fw_Progress1():处理进度更新

2.基于Manifest的ConfigFirmwareManifest接口

这个较新的接口使用固件清单系统:

  • 检索可用固件的完整列表
  • 将固件与检测到的板类型进行匹配
  • 提供更好的兼容性信息
  • 使用 APFirmware 类解析清单数据

关键方法:

  • LookForPort():扫描兼容主板并处理固件更新
  • GetBoardID():根据设备信息识别电路板类型
  • fw_Progress1():使用进度信息更新 UI

固件下载过程

固件下载过程包括:

  1. 固件源选择

    • 官方 ArduPilot 固件服务器
    • Beta/开发固件
    • 自定义固件文件
    • 历史版本
  2. 固件列表检索

    • 从固件服务器下载清单文件
    • 解析 JSON 固件信息
    • 将固件与主板类型匹配
  3. 固件文件下载

    • 下载固件文件的HTTP请求
    • 下载过程中的进度跟踪
    • 下载文件的临时存储

固件上传过程

固件上传过程包括以下关键阶段:

  1. 董事会准备

    • 检测板类型
    • 将主板设置为引导加载程序模式(如果需要)
    • 验证主板与固件的兼容性
  2. 固件处理

    • 处理固件文件格式(.px4、.apj、.hex)
    • 检查固件板兼容性
    • 准备上传固件二进制文件
  3. 上传执行

    • 擦除目标内存
    • 写入固件数据
    • 验证上传的数据
  4. 验证并重启

    • 计算校验和以验证完整性
    • 使用新固件重新启动主板
    • 向用户报告状态

电路板检测流程

主板检测是固件更新过程的关键部分:

  1. 端口扫描

    • 枚举可用的串行端口
    • 检查具有已知 VID/PID 的 USB 设备
    • 检测引导加载程序模式设备
  2. 板识别

    • 查询设备的板卡类型信息
    • 使用 USB 描述符进行识别
    • 与已知板类型匹配
  3. 特殊情况

    • 处理 ChibiOS 引导加载程序
    • 识别较新的主板类型
    • 后备识别方法

该系统支持多种板类型,包括:

  • Pixhawk系列(PX4v2、PX4v3、PX4v4等)
  • 立方体自动驾驶仪
  • VRBrain/VRCore
  • 基于Arduino的自动驾驶仪(APM)
  • 专用板(Bebop、Disco 等)

基于清单的固件系统

较新的基于清单的固件系统提供:

  1. 结构化固件元数据

    • JSON 格式的完整固件目录
    • 主板识别信息
    • 版本详细信息
  2. 改进的兼容性检查

    • 精准的板型匹配
    • 基于USB ID的识别
    • 引导加载程序字符串匹配
  3. 发布渠道

    • 官方稳定版本
    • Beta 版本
    • 开发构建

自定义固件选项

系统支持加载自定义固件:

  1. 自定义固件文件

    • 加载本地 .px4、.apj、.hex 或 .bin 文件
    • 自定义固件目录选择
    • 不同的文件格式支持
  2. DFU模式支持

    • 设备固件更新协议
    • DFU固件文件的特殊处理
    • 闪存寻址选项
  3. 历史固件

    • 访问以前的固件版本
    • 历史固件浏览器
    • 兼容性检查

错误处理和故障排除

固件更新系统包括强大的错误处理功能:

  1. 连接问题

    • 设备检测的重试机制
    • 通信失败的错误报告
    • 设备重新连接程序
  2. 兼容性问题

    • 固件板不匹配检测
    • 引导加载程序版本兼容性检查
    • 安全板的证书验证
  3. 上传失败

    • CRC 验证失败
    • Flash 损坏检测
    • 恢复程序

常见错误及其解决方案通过 UI 报告给用户,并在更新过程中提供详细的进度和状态更新。

固件认证和安全

一些主板实施了安全机制:

  1. 真品证书

    • 验证董事会真实性
    • 公钥验证
    • 签名检查
  2. 安全引导程序

    • 安全引导加载程序的特殊处理
    • DFU 模式用于安全更新
    • 身份验证协议

概括

Mission Planner 固件更新系统为更新基于 ArduPilot 的自动驾驶仪硬件提供了全面的解决方案。它:

  1. 检测连接的自动驾驶板
  2. 提供兼容固件选项
  3. 下载并处理固件文件
  4. 将固件上传到硬件
  5. 验证安装成功

该系统支持广泛的硬件、各种固件源,并包括强大的错误处理和用户反馈机制。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐