通过 sdcard 加载固件

将特定名称的文件放入 SD 卡并运行(飞行)控制器的引导加载程序(例如,将电路板断电),即可更新某些(飞行)控制器上的 ArduPilot 固件。

备注

目前只有少数(飞行)控制器具有此功能。请参阅下面的说明以确定(飞行)控制器是否具有此功能。只有使用 MMC 连接 SD 卡的基于 H7 的(飞行)控制器才具备此功能,而且并非所有具备此功能的(飞行)控制器都已添加此功能。

我为什么要这么做?

使用这种技术有几个原因:

  • 无法方便、可靠地访问载具的 USB 端口

  • 希望通过遥测无线电更新载具固件

  • 载具处于远程状态,本地操作员可能很难通过普通接口更新固件。这样,原始设备制造商就可以在用户的 SD 卡上远程添加更新文件,并在下次启动载具时上传。

启动程序

目前,没有(飞行)控制器的引导加载程序能够从 SD 卡闪存。要支持从 SD 卡闪存,必须更新引导加载程序。请注意,更新(飞行)控制器的引导加载程序会导致电路板无法运行,并且难以恢复。对于没有 "boot0 "引脚的电路板(如 CubeOrange)来说更是如此。请注意这一风险,并准备好在更新引导加载程序时发生意外情况时花费大量时间恢复电路板。

更新引导程序的说明 请注意,必须使用 "最新 "固件才能获得合适的引导加载程序。

固件文件

要加载到 SD 卡上的文件是专门为此目的创建的名为".abin "的特殊文件。这是一个二进制文件,其中包含少量文本,提供一些有关二进制文件的信息。最值得注意的是校验和,引导加载程序将在尝试闪存电路板之前验证该校验和。

如果您正在构建自己的固件,且电路板配置为支持从 SD 卡闪存,那么您的构建产品将自动包含 .abin 文件。例如

     BUILD SUMMARY Build directory: /home/pbarker/rc/ardupilot/build/CubeOrange Target Text (B) Data (B) BSS (B) Total Flash Used (B) Free Flash (B) External Flash Used (B) --------------------------------------------------------------------------------------------------------- bin/arduplane 1868612 3536 258740 1872148 93928 不适用 Build commands will be stored in build/CubeOrange/compile_commands.json 'plane' finished successfully (24. 283s).283s) pbarker@fx:~/rc/ardupilot(master)$ ls -l build/CubeOrange/bin total 18792 -rwxrwxr-x 1 pbarker pbarker 3135448 Sep 29 19:15 arduplane -rw-rw-r-- 1 pbarker pbarker 1872247 Sep 29 19:15 arduplane.abin -rw-rw-r-- 1 pbarker pbarker 1684192 Sep 29 19:15 arduplane.apj -rwxrwxr-x 1 pbarker pbarker 1872152 Sep 29 19:15 arduplane.bin -rw-rw-r-- 1 pbarker pbarker 5148900 Sep 29 19:15 arduplane.hex -rw-rw-r-- 1 pbarker pbarker 5509380 Sep 29 19:15 arduplane_with_bl.hex

支持从闪存卡闪存的电路板还具有 .abin 文件,可从 firmware.ardupilot.org

固件文件名

生成固件时使用的文件名是 将固件放入 SD 卡时要使用的正确名称。当 .abin 生成的文件包含载具名称,例如 "arduplane.abin"。

只有一种正确的文件名可用于从闪存卡闪存,即 ardupilot.abin.将文件放入 SD 卡时,确保文件已重命名为 ardupilot.abin.

将文件传输到 SD 卡

这可以在操作系统中完成,就像您通常与 SD 卡交互一样(如文件浏览器)。

您也可以通过以下方式将文件传输到 SD 卡 MAVFTP.

确保文件大小正确后再继续。

传输完成后,目录列表应如下所示:

RTL>; ftp 提出问题 /首页/pbarker/自动飞行器.雅宾 ardupilot.雅宾
RTL>; 放 置 /首页/pbarker/自动飞行器.雅宾 作为 ardupilot.雅宾
迟到 文件  长度  1847687
RTL>; ftp 清单
RTL>; 上市 /
 D APM
   ardupilot.雅宾       1847687
总计 尺寸 1804.38 千字节

触发闪存更新

给电路板通电,进入引导加载程序,它会自动检查固件更新文件并开始闪存。

验证固件并将其闪存到载具内部闪存中大约需要 1 分钟。

如果进程成功完成,文件将重命名为 ardupilot-flashed.abin.闪存完成后,载具将启动固件。

故障排除

固件闪存可能会出现一些问题,但有些诊断程序可以帮助找出问题所在。

  • 在闪光过程的每一个阶段,都需要 ardupilot.abin 文件重命名,以反映阶段

  • 如果该文件被称为 ardupilot-verify.abin 则进程在尝试对文件进行校验时失败,或者在进行校验时电路板被中断。

  • 如果该文件被称为 ardupilot-verify-failed.abin 那么引导加载程序计算出的校验和与引导加载程序中的 .abin 元数据。

  • 如果该文件被称为 ardupilot-flash.abin 固件写入过程失败,或者写入过程中电路板被中断。如果出现这种情况,电路板不太可能启动到 ArduPilot 固件,因此需要重新刷新。

  • 如果该文件被称为 ardupilot-flashed.abin 由于闪存过程已经成功,您应该不需要这个 "故障排除 "部分!