欢迎光临散文网 会员登陆 & 注册

解决飞控升级betaflight4.4固件后陀螺仪和flash不识别问题

2023-04-05 00:46 作者:zhao4142  | 我要投稿


前几天买了一块FreeAxis家的25AF4AIO飞控,使用的是BMI270陀螺仪和128M的Flash黑盒存储器,出厂固件是BF4.3,功能都正常。

正好前几天Goggles2眼镜更新固件了,终于支持BF4.4的高清OSD了,于是顺手给这块飞控升到了BF4.4固件(使用的是Matek F411的固件),刷完固件后连上地面站一看,飞控提示没有检测到陀螺仪,Dataflash那里也显示无存储器:

由于BF4.4以后搞了一套云编译系统,飞控固件的驱动搞成模块化了,在固件编译期间可以自由选择保留或者阉割哪些驱动模块,不再是一个固件包含所有驱动了。

默认固件阉割了很多驱动,打开编译日志:

可以看到并没有编译BMI270和flash

下面想办法将这两个模块编译进固件里,打开显示不稳定版本,然后下面会弹出启用专家模式选项,打开这个专家模式,下面又会弹出一个CustomDefines的输入框,找到方向了,从这里入手,就是可以自定义固件的地方。

然而这里提示面向开发者,查看BF的维基,也没有发现相关文档说明这里应该怎么填写参数

于是打开Betaflight的官方Github主页,在这个仓库里搜BMI270,第一个结果里面就可以看到:

于是就很明了了,要想编译BMI270,需要在编译参数里添加USE_ACCGYRO_BMI270,同理,搜索flash型号W25N01G:

得到USE_FLASH_W25N01G,下面测试这两个参数是否有效,打开地面站,填入这两个参数,根据提示使用空格来分开

加载成功后再次查看编译日志

发现这两个模块已成功加入编译,烧录到飞控中连接地面站后发现陀螺仪和加速度计已成功识别到,但是还是未识别到闪存芯片。

既然flash模块已经成功编译到固件里,还是识别不到的话,下一步应该从参数设置这个方向来检查问题了,

飞控售后群里面给了一个cli命令文本,在里面找到了flash相关的两个命令:

resource FLASH_CS 1 A15

set flash_spi_bus = 2

打开地面站cli命令行标签页,输入这两个命令,然后输入save命令自动重启

连接地面站后显示成功识别到了flash,问题解决

题外话

bf4.0之后,随着飞控型号的增多,固件数量也非常多,维护起来也很费力,因此bf推出了unified-targets(统一固件):

在betaflight的发布页上,就是统一固件

可以看到固件试按照主控芯片的型号来命名,并没有区分飞控型号

统一固件中包含大部分驱动,不同的飞控通过config配置文件来设置,在这个位置可以找到各个型号的飞控板的默认配置:

找到自己的飞控板配置文件,打开后发现里面是一些cli命令行命令

飞控烧录对应MCU的统一固件后,将这些参数复制到cli命令行里面,即可完成飞控的参数配置。

这样的设计可以很方便地自己自定义飞控,甚至是可以做出自己的飞控。

但是有个问题就是现在飞控板载外设型号越来越多,各种型号的陀螺仪、气压计、磁力计等,如果把这些外设的驱动全部编译到固件里,那么编译出来的固件大小会超出一些mcu的限制,比如F411芯片。因此即使是统一固件,也会因为固件大小的限制而阉割掉一部分驱动,也正是因为这个原因,BF4.4推出了云编译系统,可以按照自己的需求,来定制固件。

解决飞控升级betaflight4.4固件后陀螺仪和flash不识别问题的评论 (共 条)

分享到微博请遵守国家法律