
來源:公眾號【魚鷹談單片機】
作者:魚鷹Osprey
ID :emOsprey
大家好,我是魚鷹。最近有學員問關于如何升級 boot 問題(注意是升級 boot,不是 App)。
1、boot 代碼在 ram 中運行,然后直接更新 boot 自身,即自舉,實現比較復雜。2、app 代碼運行后,更新 boot 所在 flash 空間,完成替換,實現比較簡單。第二種方案更新 boot 常規解法是通過接口更新 boot,比如 uart、USB、can,無論哪一種,都有定義更新協議,如 ymodem。在魚鷹看來都比較復雜。因為該道友只是為了更新 boot 來修復問題,所以魚鷹提供了最簡單的解決方案,直接在 app 代碼里面嵌入 boot 代碼來完成升級,這樣一來,不需要寫驅動、也不用實現傳輸協議,簡單高效,不易出錯,可以快速完成升級。linux 環境下 bin 文件轉頭文件數組,windows 也有類似命令xxd -i xxx.bin > xxx.h
這個方案魚鷹在項目中也實現過,不過不是給自身升級 boot,而是給外部設備升級 app,可以快速驗證升級流程是否有問題。不過由于是升級 boot,因此升級過程千萬不要斷電,否則一定變磚,如果你又開啟了最高級別(一次性熔斷,不可恢復)的讀寫保護功能,那么沒有解救方法,因此慎用該保護方案。另外一點,這個問題其實有一個根本性問題,就是 OTA 有概率變磚頭(魚鷹有遇到過),只有找到root case(根本原因),才能算徹底解決,否則不管怎么升級有 bug 的 boot 都是無效解。
打了多年的單片機調試斷點到底應該怎么設置? | 顛覆認知
-THE END-
如果對你有幫助,記得轉發分享哦
微信公眾號「魚鷹談單片機」
每周一更單片機知識

長按后前往圖中包含的公眾號關注
魚鷹,一個被嵌入式耽誤的暢銷書作家
個人微信「EmbeddedOsprey」

長按后打開對方的名片關注