[筆記] 笙泉 Megawin 微控制器(ARM Cortex-M0)的系統開發

        Megawin 公司推出的 MG32F02x 系列晶片是以 ARM Cortex-M0 為核心的微控制器,內建至少 32KB flash 存放程式碼與資料,包含常用的介面,如:UARTI2CSPIADC...等,算是具備完整周邊的 MCU。

準備工作:
        軟體套件 KEIL uVision5 ARM 版本,注意 ARM compiler 版本必須是5.06 update 7,筆者測試過update 6,會造成 ISP 代碼運行時出現異常。而 KEIL v5.34版本裡面就包含ARM compiler 5.06 update 7,所以下載最新的 KEIL 版本即可避開此問題。此外,開發過程還需要準備一個 M-Link Cortex-M0 的除錯器,以方便我們開發時可以設斷點step by stepdebug...。

        安裝 KEIL ARM 軟體後,需要再載入 Megawin 的工具包。開啟 KEIL IDE,在選單上點選 Pack Installer工具按鈕,從這工具去載入 Megawin.CM0_DFP.2.0.8.pack 或最新版。成功後,這樣的 KEIL 開發環境才能支援 Megawin 晶片。這個 pack 裡面包含晶片所有介面的驅動程式碼,以及範例程式,我們可以從工具的選單複製所需的範例程式碼。

韌體燒錄方式:
        在開發韌體時,透過 KEIL IDE 加上 M-Link debugger 便能下載韌體到晶片上,但是一般實用場景下不可能每次都用 KEIL 套件去燒錄韌體。目前 Megawin 提供兩種燒錄韌體的方式:ICP (In-Circuit Programming) 和 ISP (In-System Programming)。

        ICP方式就是M-Link除錯器連接到晶片的SCL (PC4)和SDA (PC5)接腳,利用ICP32_Programmer.exe 軟體工具將韌體燒錄到指定 AP flash記憶體區,如下圖。首先載入我們的韌體(稱為 app),再按下 “Insert ISP-Code” 插入原廠提供的 ISP 碼,組成完整的 binary code,最後按下 Update Target 鈕,這樣 M-Link debugger 就會幫我們把完整的韌體燒到晶片裡。

圖一:ICP 燒錄工具

        ISP 方式不需要用到 M-Link 除錯器,主要利用晶片裡的開機程式將韌體燒錄到晶片內部記憶體,上一段說到 ICP 插入原廠的 ISP 碼,這段程式碼就是用在這兒,一般也稱為 bootloader 程式碼。晶片 RST (PC6) 接腳的高低電位是用來判斷是否進入 ISP 燒錄程序,當晶片通電後,如果 RST 接腳為低電位,則進入 ISP 程序。

        ISP 透過 UART 方式接收韌體資料,再寫入 flash 記憶體。ISP 是利用哪兩根 UART 接腳通訊呢?TH197B 開發板是用 PB8 和 PB9,不過 TH197A 開發板使用 PC10 和 PC11,必須了解原廠 ISP 程式碼的流程才得知,或許 ISP 能同時監測這兩組通訊。

        打開原廠提供的 COM_ISP32_AP.exe 工具,如下圖。先載入我們的韌體,進入 ISP 燒錄程序,再按 Update Target。怎麼進入 ISP 燒錄程序呢?板子需先斷電,同時壓住Reset鍵,此時通電,還不能放開 Reset,按下 Update Target 後,再放開 Reset 鍵。

圖二:ISP 燒錄工具

OTA更新韌體:
        如果我們不想用前一段燒錄韌體的方式,希望利用自己的韌體程式更新韌體,那就需要自行開發 ISP 程式。對於全新晶片的 flash,其內容需要依照下面步驟處理,第一步利用 ICP32 工具將我們開發的 app 應用程式碼與 ISP 碼載入,如下圖所示。載入 app 應用碼後,再插入自行開發的 ISP 碼,在下方工具欄就能看到一個 32KB buffer 的內容 (準備寫到flash的內容),app碼被放在 0x0 為起點的位址,ISP 碼則被放在 0x7C00 為起點的位址。

圖三:ICP32工具建立一個32KB區塊

        ISP Size欄位要選擇 1KB,因為這是原廠預設ISP大小。BOOT_MS開機模式選擇從 app 開始,因為還不是更新韌體階段,不需要進入 ISP。一切就緒後,按下Update Target,32KB buffer會被燒錄到晶片的 AP 區塊裡,也就是 flash 區塊。

        上述動作完成後,我們就可以從 PC 端進行韌體更新了,稱為 OTA 更新。PC 端的工具先載入韌體的 binary 檔案,然後將這個檔案傳輸給晶片上的 app 應用碼,當 app 收到這些資料時,便會將之存放在晶片的 IAP 區塊,等待全部binary都收到後,app 會把 BOOT_MS 開機模式設為ISP 開始,然後 warm reset 晶片。

圖四:PC端的韌體更新工具

        當晶片 warm reset 後,便會進入自行開發的 ISP 碼。ISP會將存放在 IAP 區的韌體寫到AP區,完成後,BOOT_MS 開機模式被設為 app 開始,這樣就完成韌體更新。

留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Visual Studio 遠端偵錯的設定步驟

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

[應用] 藍芽 BLE client/server 架構:BLE remote controller

[模組] LD3320 離線語音辨識晶片與 ESP32 無線傳輸