Pixhawk遥控器无法检测&bootloader烧写

Pixhawk“detected 0 radio channel”

导火索:最近毕设想用pixhawk来做个东西。于是跟着官方的wiki,搭建起了编译环境。但是奇怪的事情突然发生了。我clong的是官方最新版的master分支的固件,ubuntu下完成编译并且下载。连接上QGC后发现,遥控器读取不了信号,并且显示

Pixhawk遥控器无法检测&bootloader烧写_第1张图片

尝试过很多方法:重刷旧PX4固件和arduipilot固件,换QGC版本,清空SD卡,换遥控器,换飞控。均无果。于是想到了重新刷写两个板子的booloader。


pixhawk的fmu和io板刷写过程

1.固件准备

git clone git@github.com:PX4/Bootloader.git
cd Bootloader
make

编译成功后会输出各个版本对应的bootloader文件:
Pixhawk遥控器无法检测&bootloader烧写_第2张图片
其中:
pixhawk的fmu对应的是:px4fmuv2_bl.bin
pixhawk的io对应的是:px4io_bl.bin

2.硬件准备

  • 一个ST-Link
    Pixhawk遥控器无法检测&bootloader烧写_第3张图片

  • 拆开的pixhawk
    Pixhawk遥控器无法检测&bootloader烧写_第4张图片

pixhawk板上的JTag底座用的是10pin的,跟我们平常的20pin的不一样,因此需要做个转换。

  • 10pinJTAG针脚定义(pixhawk上的)
    Pixhawk遥控器无法检测&bootloader烧写_第5张图片

  • 20pinJTAG针脚定义(st-link上的)
    Pixhawk遥控器无法检测&bootloader烧写_第6张图片

我们使用SW模式来下载程序,因此只需要对接四个针脚:
- VCC(st-link的1接pixhawk的1)
- SWDIO(st-link的7接pixhawk的2)
- SWCLK(st-link的9接pixhawk的4)
- GND(st-link的20接pixhawk的9)

即可完成pixhawk上jtag和st-link的连接!这里就不贴上对接完成的图了。

关于连接用的线,我是直接剪断杜邦线来做的。焊接在pixhawk上对应位置即可。
Pixhawk遥控器无法检测&bootloader烧写_第7张图片

3.软件准备

  • 需要从官网下载STM32 ST-LINK utility和stlink驱动

在官网下载比较麻烦,要注册一个帐号。这里直接附上度盘下载地址链,密码:wqv8

4.开始烧写

1.打开STM32 ST-LINK utility,Target->Settings,在Connect setting那里选择SWD模式
2.把pixhawk的FMU板的JTAG和st-link的VCCSWDIOSWCLKGND分别对应接上(如果是烧写IO板则连IO板的JTAG)。
3.把px4fmuv2_bl.bin固件拖进去STM32 ST-LINK utility界面(如果烧写的是IO板则拖px4io_bl.bin)。
4.Target-Connect,然后Target-Erase Chip,然后Target-Program,按start。等待数秒后即可烧写完成。


遥控器信号检测不到问题分析

  • 按照上面的Bootloader烧写方法,先烧录FMU板的Bootloader,再烧录IO板的Bootloader,并且再烧录前先进行全片擦除,一般就可以解决文章前面提到的遥控信号检测不到的情况。而且板子可以烧录旧版的固件正常工作

- 可是产生这个问题的原因到底是什么呢?

- 之前说过尝试过很多方法:重刷旧PX4固件和arduipilot固件,换QGC版本,清空SD卡,换遥控器,换飞控。但是都无法解决。

- 由之前的尝试可知,排除硬件的问题,也排除上位机版本不兼容的问题,因此初步怀疑是Bootloader出了问题。于是后面笔者通过STM32 ST-LINK utility的“对比芯片flash内的bin和要烧录的bin差异“的功能,发现,Bootloader的代码并没有损坏。于是困惑就来了,那么到底是哪里出了问题呢?

后面通过观察有这种问题的飞控跟正常的飞控的IO板指示灯的区别:

  • 有问题的板:IO B/E(红)和IO ACT(蓝)灯由始至终互相交替闪烁,不论是换固件还是复位。
  • 正常的板子:一开始IO B/E(红)常量,IO ACT(蓝)灯闪烁,之后IO B/E(红)快闪和IO ACT(蓝)灯慢闪,最后IO B/E(红)熄灭和IO ACT(蓝)灯慢闪。

- 现象表明是IO板的确出了问题,不是Bootloader的问题,而是IO板固件的问题,IO板的固件,是FMU板通过IO板的Bootloader烧写到IO板上的。而且据了解出现这个问题的人大多都是下载了master分支的程序之后出现的问题。因此怀疑锁定master的最新固件。

- 为了验证这个猜想,笔者再次做了一个实验:FMU板保留master分支编译下载的最新固件,对IO板子进行Bootloader的刷写。
-烧录完IO板的Bootloader后重启飞控后的现象:IO B/E(红)和IO ACT(蓝)灯在飞控初始化一段时间后,再次进入了相交替闪烁的循环。也就是文章开头的现象又出现了。

-因此,最后的罪魁祸首就是:master分支的固件。

-再者,如果想知道为什么master固件会导致这样的问题,那么只有研究下master固件对IO板子的flash做了什么事情了。

个人观点:master分支上的固件版本一般是不稳定版本,因此在进行个人的开发的时候,建议在clone完固件后,git tag,然后用类似git checkout v1.5.5这样切换到一个稳定的版本后,再进行后续的开发


你可能感兴趣的:(pixhawk,无人机)