解決飛控升級betaflight4.4固件后陀螺儀和flash不識別問題

前幾天買了一塊FreeAxis家的25AF4AIO飛控,使用的是BMI270陀螺儀和128M的Flash黑盒存儲器,出廠固件是BF4.3,功能都正常。
正好前幾天Goggles2眼鏡更新固件了,終于支持BF4.4的高清OSD了,于是順手給這塊飛控升到了BF4.4固件(使用的是Matek F411的固件),刷完固件后連上地面站一看,飛控提示沒有檢測到陀螺儀,Dataflash那里也顯示無存儲器:

由于BF4.4以后搞了一套云編譯系統(tǒng),飛控固件的驅(qū)動搞成模塊化了,在固件編譯期間可以自由選擇保留或者閹割哪些驅(qū)動模塊,不再是一個固件包含所有驅(qū)動了。
默認固件閹割了很多驅(qū)動,打開編譯日志:

可以看到并沒有編譯BMI270和flash

下面想辦法將這兩個模塊編譯進固件里,打開顯示不穩(wěn)定版本,然后下面會彈出啟用專家模式選項,打開這個專家模式,下面又會彈出一個CustomDefines的輸入框,找到方向了,從這里入手,就是可以自定義固件的地方。

然而這里提示面向開發(fā)者,查看BF的維基,也沒有發(fā)現(xiàn)相關(guān)文檔說明這里應(yīng)該怎么填寫參數(shù)

于是打開Betaflight的官方Github主頁,在這個倉庫里搜BMI270,第一個結(jié)果里面就可以看到:

于是就很明了了,要想編譯BMI270,需要在編譯參數(shù)里添加USE_ACCGYRO_BMI270,同理,搜索flash型號W25N01G:

得到USE_FLASH_W25N01G,下面測試這兩個參數(shù)是否有效,打開地面站,填入這兩個參數(shù),根據(jù)提示使用空格來分開

加載成功后再次查看編譯日志


發(fā)現(xiàn)這兩個模塊已成功加入編譯,燒錄到飛控中連接地面站后發(fā)現(xiàn)陀螺儀和加速度計已成功識別到,但是還是未識別到閃存芯片。

既然flash模塊已經(jīng)成功編譯到固件里,還是識別不到的話,下一步應(yīng)該從參數(shù)設(shè)置這個方向來檢查問題了,
飛控售后群里面給了一個cli命令文本,在里面找到了flash相關(guān)的兩個命令:
resource?FLASH_CS 1 A15
set flash_spi_bus = 2
打開地面站cli命令行標簽頁,輸入這兩個命令,然后輸入save命令自動重啟

連接地面站后顯示成功識別到了flash,問題解決

題外話
bf4.0之后,隨著飛控型號的增多,固件數(shù)量也非常多,維護起來也很費力,因此bf推出了unified-targets(統(tǒng)一固件):

在betaflight的發(fā)布頁上,就是統(tǒng)一固件

可以看到固件試按照主控芯片的型號來命名,并沒有區(qū)分飛控型號

統(tǒng)一固件中包含大部分驅(qū)動,不同的飛控通過config配置文件來設(shè)置,在這個位置可以找到各個型號的飛控板的默認配置:

找到自己的飛控板配置文件,打開后發(fā)現(xiàn)里面是一些cli命令行命令

飛控燒錄對應(yīng)MCU的統(tǒng)一固件后,將這些參數(shù)復制到cli命令行里面,即可完成飛控的參數(shù)配置。
這樣的設(shè)計可以很方便地自己自定義飛控,甚至是可以做出自己的飛控。
但是有個問題就是現(xiàn)在飛控板載外設(shè)型號越來越多,各種型號的陀螺儀、氣壓計、磁力計等,如果把這些外設(shè)的驅(qū)動全部編譯到固件里,那么編譯出來的固件大小會超出一些mcu的限制,比如F411芯片。因此即使是統(tǒng)一固件,也會因為固件大小的限制而閹割掉一部分驅(qū)動,也正是因為這個原因,BF4.4推出了云編譯系統(tǒng),可以按照自己的需求,來定制固件。