工程師筆記|STM32G4 應用程序與 Option Bytes 同時燒錄問題

1、引言

客戶使用 STM32G474 系列晶片,在燒錄應用程序的同時要對 Option Bytes 中的 DBANK 進行修改,採用 STlink Utility 或是 CubeProgrammer 工具進行操作,並希望整個過程只用一次燒 錄動作就完成,發現燒錄的應用程序無法運行。

2、問題產生及原因分析

STM32G474 系列晶片具有雙 Bank 功能,且默認情況下 Option Bytes 中的 DBANK =1,即雙 Bank 使能。但客戶實際的應用是單 Bank,所以需要將 DBANK 設置為 0,這樣客戶在使用 Utility 或是 CubeProgrammer 工具燒錄應用程序時,同時設置 Option Bytes 中的DBANK 為 0。但是當燒錄結束後,發現應用程序無法正常運行,需要再次燒錄才能運行。

 

整個燒錄的過程,在 Utility 中操作如下圖所示,通過 Target ->Automatic Mode->Option bytes configuration 對 DBANK 進行修改,在 File 中選擇應用程序文件,然後直接燒錄。

在 CubeProgrammer 中操作如下圖所示,通過 Erasing & Programming->Automatic Mode->Option bytes commands,寫入修改 DBANK 的命令行,在 File 中選擇應用程序文件,然後直接燒錄。

整個操作流程是正確的,以 CubeProgrammer 為例,整個操作的日誌如下,顯示所有操作正常完成。

但是仔細閱讀日誌,可以發現整個操作,首先燒錄的是應用程序,然後再進行 Option Bytes 的修改,也就是說,在燒錄應用程序的時候,MCU 依舊是工作在雙 bank 模式下,待程序燒錄完成,將雙 Bank 修改為單 Bank,注意 DBANK 的修改將會改變 Flash 的取指方式,如下:

• Single bank mode DBANK=0: read access of 128 bits

• Dual bank mode DBANK=1: read access of 64 bits

可以通過單步操作的方式來查看 Flash 中內容的區別。在雙 Bank 模式下燒錄程序後,讀出Flash 內容如下:

對比以上的內容,可以發現由於取指方式的改變,讀取的 Flash 中內容發生了變化,後者出現了大片的空白空間,這也就是此前客戶操作方式在完成燒錄後程序無法運行的原因。

 

3、解決方案

通過以上的分析,要實現客戶的要求,必須首先對 Option Bytes 進行修改,將 Flash 配置為單 Bank 模式後,才能進行應用程序的燒錄,但是在 Utility 或是 CubeProgrammer 中無法修改其本身的操作時序,無法通過一次操作的方式完成,必須分成兩步來完成,即:

• 修改 Option Bytes 中的 DBANK• 燒錄應用程序

那麼客戶最希望的只用一個步驟完成所有的操作是不是沒法實現了?別急,ST 還提供了另一個工具,ST_LINK CLI, 它的操作完全通過命令行的方式來完成。其路徑位於 ST_LINK Utility在安裝目錄下,如下:


可以通過 cmd 窗口中直接調用該工具,舉個例程如下:

D:\ST-LINK Utility>st-link_cli.exe -c SWD -OB DBANK=0 -Rst -ME -P d:\test.hex -V while_programming

以上可以看到 Option Bytes 首先完成修改,然後讓晶片進行 reset,保證新的 Option Bytes重新加載並生效,最後完成應用程序的燒錄。

 

4、 小結

這裡分析了客戶使用燒錄工具 ST Link Utility 和 STM32CubeProgrammer 同時燒錄 Option Bytes 中的 DBANK 設置和應用程序後程序無法正常運行的問題,給出了採用 ST-LINK_CLI.exe 工具一次性操作完成 Option Bytes 與應用程序燒錄的解決方案。

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

false: https://blog.st.com/smallest-knx-transceiver-smart-building/

評論