固件编译&刷写
-
本章介绍如何编译&刷写FMT固件至飞控硬件中。更多的信息,可以参考FMT用户手册 。
提示:
FMT的下载需要用到硬件中的bootloader并且不会破坏已有的bootloader,所以在刷写了FMT固件后,可以轻松刷回PX4或者APM固件。
下载工具链
-
如果是第一次编译FMT,在编译前需要做些准备工作,比如下载编译器、构建工具以及配置环境变量等。总的来说,FMT的编译环境配置还是非常简单的。
提示:
FMT支持在Linux,Windows或者Mac OS下编译,这里仅以Linux为例,其它系统类似。首先下载如下编译工具链:
-
编译器: arm-none-eabi- toolchain: 版本:
7-2018-q2-update
. -
构建工具: Scons: 可以使用
pip3 install SCons
来安装 scons. 然后将scons的路径加入到系统Path环境变量中. -
STM USB Driver: STM32 USB Driver: 仅针对Windows平台需要下载。
下载安装完工具链后,需要配置环境变量将编译器和构建工具的路径加入到系统路径中,比如:
export RTT_EXEC_PATH=/usr/local/bin/gcc-arm-none-eabi-7-2018-q2-update/bin export PATH=/usr/bin/scons:$PATH
笔记:
可以将环境变量配置的指令加入到系统启动脚本中,如~/.bashrc,这样便不用每次开机都需要配置一遍。
编译固件
-
针对Pixhawk以及其衍生的硬件,包含两颗MCU,主处理器FMU以及协处理器IO。所以FMT针对两颗MCU有分别的固件,fmt_fmu和fmt_io,需要分别编译和下载。
fmt_io通过fmt_fmu来间接下载,所以我们需要先下载了fmt_fmu固件后,再来下载fmt_io。
首先编译fmu固件,我们进入到目标板对应的target目录,然后输入如下指令:
cd FMT-Firmware/target/cuav/v5_plus/ scons -j4
编译完成后如下所示,将在build目录下生成我们需要的固件。
arm-none-eabi-objcopy -O binary build/fmt_cuav-v5.elf build/fmt_cuav-v5.bin arm-none-eabi-size build/fmt_cuav-v5.elf text data bss dec hex filename 656704 27496 121600 805800 c4ba8 build/fmt_cuav-v5.elf scons: done building targets.
下面我们编译io固件,类似的,进入到io的目录,然后输入如下指令:
cd FMT-Firmware/target/pixhawk/fmt-io/project scons -j4
编译完成后如下所示,将在build目录下生成io的固件。
arm-none-eabi-objcopy -O binary fmt_io.axf build/fmt_io.bin arm-none-eabi-size fmt_io.axf text data bss dec hex filename 16680 160 4952 21792 5520 fmt_io.axf scons: done building targets.
刷写固件
- 当前支持3种方式来刷写FMT固件,按复杂程度从易到难分别为:
-
使用python脚本下载
首先执行对应目标硬件平台目录下的uploader.py,然后通过USB将飞控连接到电脑上。在检测到飞控连接后,将自动开始下载,如下所示:
~/FMT-Firmware/target/cuav/v5_plus$ python3 uploader.py waiting for the bootloader... Auto-detected serial ports are: Not found fmt_fmu,please connect fmt_fmu! Not found fmt_fmu,please connect fmt_fmu! Not found fmt_fmu,please connect fmt_fmu! Found board id: 50,0 bootloader version: 5 on /dev/serial/by-id/usb-3D_Robotics_PX4_BL_FMU_v5.x_0-if00 sn: 0021001c3438510636363539 chip: 10016451 family: b'STM32F7[6|7]x' revision: b'Z' flash: 2064384 bytes Windowed mode: False Erase : [====================] 100.0% Program: [====================] 100.0% Verify : [====================] 100.0% Rebooting. Elapsed Time 6.803
-
使用QGC地面站下载
打开QGC地面站,选择Firmware Setup界面,通过USB连接飞控,将弹出下载界面。如下所示,选择Advanced Settings->Custom firmware file, 然后选择编译好的固件
build/fmt_cuav-v5.bin
进行下载。 -
使用JLink下载
前两种方式需要用到硬件上的bootloader,而通过JLink下载则不需要,必要时,也可以通过JLink来更新硬件上的bootloader(有风险,需谨慎)。JLink的具体方式请参考FMT的用户手册。
在下载完fmu的固件后,用USB连接飞控,正常的话应该能看到飞控的呼吸灯开始闪烁。打开QGC地面站将自动连接上飞控。如下所示:
下面需要将fmt_io的固件上传到飞控的SD卡中。我们首先点击QGC左上角的Widgets->Onboard Files,将弹出对应窗口。然后点击List Files将列出飞控上所有的文件/文件夹信息。这里我们选中usr文件夹,然后点击Upload Files上传刚刚编译好的
fmt_io.bin
至飞控的usr目录,如下所示:上传完成后,再次点击List Files将看到我们刚上传的io固件已经出现在usr目录下,如下图所示:
下一步我们切换到QGC的Mavlink Console页面,敲击两次回车,将看到飞控的控制台输出,我们在控制台输入指令
fmtio upload usr/fmt_io.bin
,通过fmu下载刚刚上传的io固件。如下所示io固件下载成功:提示:
若是第一次下载fmt_io固件,在输入fmtio upload指令后将返回sync error的错误。这是正常的,因为此时io芯片还没有fmt io的固件,故不能响应fmu发出的重启指令,所以无法进入bootloader从而开始io固件的下载。所以对于这种情况,我们需要连接GPS模块,按住GPS模块上的Safety安全开关按钮,然后给飞控上电。这时候io芯片将驻留在bootloader,然后我们再输入fmtio upload指令则可以正常下载。当io固件下载成功后,我们可以输入
fmtio hello
指令,若看到有返回值,则说明io固件运行正常,如下所示:msh />fmtio hello msh />[IO]:Hello, this is FMT IO!