[Betaflight] 用Ubuntu為Omnibus F4 V3S 刷新 Betaflight 韌體

Omnibus F4 是一片性價比好、比較大眾化的飛控 (Flight Controller, FC),500塊台幣左右,就能買到一片體積小、重量輕、功能夠用的完整飛控。我也是比較了各家飛控之後,決定採用這款夠經濟、也還不退流行的 Omnibus F4。目前拍賣網上的賣家,多半都是販售 Omnibus F4 V3 或者 Omnibus F4 V3S 這兩種版本,其中 V3S 是有加上 LC 訊號濾波器的新版本,濾波器讓圖傳讓馬達頻率改變時,減少雜訊,讓信號更純淨、畫面減少波紋。從電路板正面 (有大顆 STM32 MCU 的那面),就可以看出差異,右邊是有濾波器的 V3S:


Omnibus F4 V3S 升級版本
剛買來的板子,賣家可能放庫存一段時間,裡面不見得有最新版的韌體,買來需要自己去刷新韌體 Flash Firmware。Windows 的刷韌體方法,很容易在網路上找得到,而Linux就比較少參考資料。我用Ubuntu刷韌體的過程,遇到一些狀況,在這部落格紀錄一下,順便分享同好。
不過好在 STM32 的ROM裡面,有設計獨立的刷機程式 DFU (Device Firmware Upgrade),本身就有Boot Lorder,上電開機後,就可透過STM32軟體虛擬USB COM Port (VCP) 跟電腦通訊 ,由電腦這頭的軟體控制,刷入新版韌體。Linux 多半是這些技術初期的開發環境,相容性很好,因此不需要另外安裝通訊驅動程式。基本上,F4插上去電腦 USB,就可以用 lsusb 指令,看到板子有被認到,像我的是 Ubuntu 20.04顯示的USB裝置 (STMicroelectronics STM32F407, 其實這片上面所安裝MCU型號是SMT32F405, 沒有F407裡面的 Ethernet MAC, 也沒有相機介面)
顯示STM32F407晶片的VCP裝置資訊
以前用 Ubuntu 16.04 的時候,就有試過其他用 VCP 的小板子,一樣不用驅動程式,我相信還在使用 Ubuntu 16.04的同好,應該也不會有問題。若你一插上去F4,就發現認不到,建議你先確認你的 MicroUSB線,不是充電專用線。那種手機充電線,常為了省成本,裡面只有 Vcc 跟 GND 兩條線,而沒有 Data+ Data-,是沒辦法跟電腦通訊的。建議你先搞清楚到底裡面是不是 4線的,免得浪費太多時間在 Debug。

安裝 Betaflight - Configurator 設定專用程式

這個程式包含所有設定 Betaflight 韌體相關功能,也包含刷機功能,可以下載最新的韌體來刷機。對F4刷韌體,不用擔心操作錯誤讓板子變成磚塊,因為上面講過, STM32 的 FDU是放在 ROM 裡面的,就算刷機中途失敗,還是能開機,重新進行刷韌體的步驟。
到這裡 (https://github.com/betaflight/betaflight-configurator/releases) 下載 Ubuntu 專用的 deb 軟件包 betaflight-configurator_10.7.0_amd64.deb (這是目前我用的版本 10.7.0,以後可能會有新版),下載之後,點兩下就能安裝。連接好你的F4認到板子之後,按下右邊連線按鈕,就連線了,顯示板子的內容,左上角 Logo 下面,有顯示目前韌體的版本,跟板子的名稱。等等下載韌體,要下載這片板子專用的韌體才行。

連線之後顯示飛行器

打開對 STM32 USB VCP 裝置的寫入權限

刷韌體的過程中,唯一遇到的問題,就是無法寫入,顯示 udev 沒有這個裝置的權限規則定義。跟這篇「ATtiny85 的 DigiSpark山寨可插拔開發編程板」裡面提到的操作過程一樣,你必須先在
/etc/udev/rules.d 目錄下,建立一個權限規則檔案,以打開USB裝置寫入權限,比如檔名叫做 45-stm32f407.rules:
sudo vi 45-stm32f407.rules
檔案中的內容如下:
#STM32F407 writable authority
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", GROUP="plugdev"

第一行是註解,有沒有都無所謂。第二行告訴作業系統,要開放權限的是製造商編號 0483 (vendor id),裝置編號 df11 (device id, product id),跟你剛剛用 lsusb 指令看到的裝置編號5740不一樣。因為DFU是一個獨立的 Device,ST公司把它用獨立的裝置編號命名。當你按下燒寫固件失敗以後,重新執行 lsusb 指令。你就會看見DFU專屬的裝置名稱。

STM32F407 DFU 專屬裝置編號

後面兩個參數設定屬於群組  plugdev 裡面的使用者,開放 ugo 權限為可讀寫 (跟 Linux 檔案權限的規則一樣 0666)。所以,你得先確定你目前登入的這個使用者,已經屬於plugdev群組:

cat /etc/group | grep plugdev

沒有的話,你得加入 plugdev 群組,把usernam改成你的登入使用者名稱:

usermod -a -G plugdev username

刷新韌體(固件)

按照你前面連線時,看到的板子名稱,選擇「OMNIBUSF4SD」,下面就會出現目前可以下載的韌體版本,從最新到最舊。 毫無疑問,我選擇目前最新的 4.3.2版,然後按右下角的「從網路加載固件」,就會去下載韌體回來。當然,你想要掌控一切的話,也可以先去 betaflight 官網下載韌體檔 betaflight_4.2.3_STM32F405.hex ,然後用本地加載固件方式,選擇你下載的韌體檔。
如同前面提到,燒寫韌體固件,需要使用板子專用的燒寫程式 DFU,然而板子插上電腦後,預設是進入VCP通訊程式,要進入 DFU 刷韌體程式,你必須要先「連接」,進入原來版本的韌體設定環境後,在「設置」首頁畫面左側,點選「激活啟動引導程式/DFU」就會把F4飛控重開機後進入DFU介面。或者插上 USB線到F4之前,先按著接頭左邊那個迷你按鈕不要放開,插上接頭後,就會進入DFU介面。

上面動作完成進入DFU之後,就可以來刷新版韌體了。按下右上角「更新固件」按鈕,進入更新韌體固件畫面,如果你是第一次使用這片板子,你可以安裝一個完全乾淨的 F4,啟用「全盤擦除(會丟失所有設置)」這個選項,會把原來板子中的預設值一起刪除。根據過往在其他種類MCU燒寫新版韌體的經驗,我都會全部擦除,避免開發團隊因疏忽,造成前後版本設定不相容問題。最後按下方的「燒寫固件」按鈕,就會開始執行新版韌體燒錄過程,因為有勾選全盤擦除,因此會先跑擦除程序,之後才會跑出以下燒寫過程的畫面。

F4飛控新版韌體燒錄中

燒寫完成之後,Progress Bar 進度顯示會填滿變成綠色,顯示燒錄成功。

第一次連線安裝新版韌體後的F4飛控

刷完新的韌體,會自動將F4飛控重新開機,然後你會看到右上角的裝置名稱,又從 DFU 變回 ttyACM,馬上執行連線。由於是刷新後第一次連線,程式會問你是否使用預設值。Betaflight 開發團隊在 4.2 版的說明,有提到他們把預設值改進了一下,讓調機更容易。所以,就相信他,採用預設值吧。
燒錄完新版韌體後,第一次連線

進入Betaflight第一個畫面之後,它會要你歸零加速度計的水平基準,也就是在STM32 MCU旁邊那顆小小的IC, MCU-6000陀螺儀。這顆陀螺儀沒有帶磁場感測羅盤,只是微機電 MEMS 在裡面,感應旋轉。所以,Z-軸的旋轉,是從你把 F4飛控上電後的那個方向,定義為0度。所以,如果你在插上USB的時候,板子沒有朝向螢幕的前方,等會兒開啟 Betaflight後,你就會看到畫面中的飛機的方向不是朝向前面。

把F4飛控放在地面水平處,執行水平基準歸零。你最好先用六角銅柱,把F4鎖在機架上或一個平面上再歸零,因為F4的背面並不是平的。而歸零的地面或桌面,可以先用手機的水平儀,確認放置F4那個地方的水平狀況 (假設手機的水平儀是可以信賴的)。
要求校準加速度計

按下「校準加速度計」按鈕之後,一切就大功告成囉。

沒有留言:

張貼留言