2020年9月4日 星期五

Silicon Labs EFM8 微控制器開發環境建置 [3.0]-離線與 ISP(UART)燒錄

網頁最後修改時間:2020/09/04
[1.1]網頁,開始說明如何以 Silicon Labs 的 EFM8 系列晶片(EFM8BB21F16G-QFN20)為主角,撰寫如何建置 8-bit Microcontrollers 的開發環境、如何建立專案以及如何進行韌體燒錄一系列的網頁。

此系列包含:
  • Silicon Labs Simplicity Studio 8-bit Microcontrollers 開發環境建置;
    主要說明在 Simplicity Studio 建置 Silicon Labs 8-bit Microcontrollers 開發環境時所需要的軟體的下載和安裝。
  • Keil C51 的 Silicon Labs C8051 / EFM8 開發環境建置;
    主要說明在 Keil µVision 建置 Silicon Labs 8-bit Microcontrollers 開發環境時所需要的軟體的下載和安裝。

  • 如何建立一個 Simplicity Studio 專案檔;
    • 如何匯入、修改和編譯官方(或既有的)Simplicity Studio v4 專案範例;
      說明如何匯入已有的 Simplicity Studio 專案檔,進行編譯和修改。
    • Simplicity Studio v4 全新專案建置範例;
      說明如何從頭建置一個新的 Simplicity Studio v4 專案檔。
  • 如何匯入 Simplicity Studio v4 專案檔至 Keil C51;
    說明如何匯入 Simplicity Studio v4 專案檔至 Keil C51,進行編譯和修改。

  • 離線與 ISP(UART)燒錄;
    燒錄 .hex 檔的說明,和使用 ISP(UART)燒錄韌體的方法。

此篇是這一系列的最後一篇,要來看看,怎麼使用工具軟體,燒錄指定的 EFM8 晶片韌體(只要是 Silicon Labs C8051 晶片系列都可以,只不過這裡有些地方的說明只屬於特定的 EFM8 系列晶片)。

使用 UART 燒錄 EFM8 韌體的步驟與方法

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
本篇所需要的相關資料已放置於雲端資料夾,有購買商品的使用者,請自行下載使用!
其餘的使用者,請自行依照提供之連結下載相關資料。
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

*********************************************************************************
網頁所用到的開發板與燒錄模擬器:
*********************************************************************************

為了解講的方便,下面分為幾個小節做說明:
  • 離線燒錄;
    • Silabs Flash Programming Utilities 燒錄說明;
    • Silabs MCU Production Programmer 燒錄說明;
  • ISP (UART) 燒錄;
    • 取得需要的工具程式;
    • Keil µVision 轉檔指令設定;
    • 燒錄 EFM8 UART Bootloader;
    • 經由 UART 燒錄 EFM8BB21F16G-QFN20 韌體程式;
    • 韌體測試;

【離線燒錄】

一般來說,程式撰寫之後可以直接使用 IDE 進行編譯和韌體燒錄的動作,但如果只是需要做韌體燒錄的話,那麼就需要獨立的燒錄軟體來用。

這裡所使用的燒錄軟體都是 SiLabs 官網所釋出的,穩定性很高,建議離線燒錄時使用。

在這小節需要的 Flash Programming Utilities 和 MCU Production Programmer 這兩個軟體,都可以在同一個官方網址 [ 下載 ]。


/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* Offline-Programming - Silabs Flash Programming Utilities 燒錄說明:

下面介紹 Silicon Labs Flash Programming Utilities 的安裝步驟和燒錄韌體的方法。

下載下方提供的連結檔案:
Flash Programming Utility 下載(utildll.exe)

Silabs Flash Programming Utilities 燒錄說明 - 01
點擊 utildll.exe 開啟軟體安裝精靈。

"Next >" 進入到下一個畫面。

Silabs Flash Programming Utilities 燒錄說明 - 02
點選 🔘 I accept the ..,再按 "Next >" 進入到下一個畫面。

Silabs Flash Programming Utilities 燒錄說明 - 03
接下來的畫面是用來選擇安裝目錄的。

若沒有特別的需求的話,直接使用預設值做安裝即可。

按 "Next >" 進入到下一個畫面。

Silabs Flash Programming Utilities 燒錄說明 - 04
按 "Install" 進入到下一個畫面。

Silabs Flash Programming Utilities 燒錄說明 - 05
按 "是(Y)" 在軟體安裝完成之後,在桌面建立軟體捷徑。

Silabs Flash Programming Utilities 燒錄說明 - 06
軟體安裝中...

Silabs Flash Programming Utilities 燒錄說明 - 07
Silabs Flash Programming Utilities 燒錄說明 - 08
按 "Finish" 完成軟體安裝。

Silabs Flash Programming Utilities 燒錄說明 - 09
將 C8051F 燒錄模擬器接上電腦,並把灰色排線插到開發板上(不要漏了其中一步,否則燒錄器就會連不上開發板),這樣在開啟 Flash Programming Utility 時,"Connect/Disconnect" 頁籤裡的 USB Debug Adapter 才可以被選擇,其中
  • Debug Interface:用來選擇燒錄器使用的何種介面(JTAG 或 C2);
     根據晶片型號來選擇:C2(F3xx 以前的 MCU)介面,JTAG(F3xx 以後的的 MCU)介面。
    ** 對於 EFM8BB2 晶片系列就是選 C2 介面。
  • Debug Adapter:用來選擇燒錄器型式。
    不用想了,就是選 🔘 USB Debug Adapter
    對於想要燒錄器給開發板供電的話,請勾選 Power target after disconnect

Silabs Flash Programming Utilities 燒錄說明 - 10

  • ☑ Disable Dialogs on Connect and Disconnect :請勾選這個選項,避免燒錄器與開發板連線/離線時出現對話視窗(因為可以由燒錄器上面的燈號清楚知道燒錄的動作開始和停止)。
  • "Connect":連線燒錄模擬器與學習開發板;
     燒錄模擬器未與開發板連線時,Device Name: 不會出現任何連線中的晶片型號。

按下 "Connect" ,燒錄模擬器會嘗試與學習開發板晶片連線。

Silabs Flash Programming Utilities 燒錄說明 - 11
若連線成功的話,Device Name: 會出現偵測到的晶片型號,如下圖所示。

Silabs Flash Programming Utilities 燒錄說明 - 12
切換到  "Falsh Erase"  頁籤。

若此時按下 "Erase Code Space",就可以擦除開發板主晶片 EFM8BB21F16G-C-QFN20 的記憶體資料。

取消勾選𐄂 Disable Dialogs on FLASH Erase 選項,否則執行記憶體擦除時不會有任何回應,會不清楚現在動作是否正常執行。

Silabs Flash Programming Utilities 燒錄說明 - 13
按下 "Erase Code Space",會依序出現下面對話視窗,並完成記憶體清除的動作。

Silabs Flash Programming Utilities 燒錄說明 - 14
Silabs Flash Programming Utilities 燒錄說明 - 15
Silabs Flash Programming Utilities 燒錄說明 - 16
切換到 "Download Hex File/Go/Stop" 頁籤。

按下 "Browse" 按鈕開啟檔案總管。

Silabs Flash Programming Utilities 燒錄說明 - 17

選擇要燒錄的 .hex 檔案(這裡指的是 EFM8BB21G16G-QFN20_Demo01.hex),按下 "開啟(O)"


Silabs Flash Programming Utilities 燒錄說明 - 18
按下 "Download" 按鈕開始下載。

Silabs Flash Programming Utilities 燒錄說明 - 19
如果出現下面這個訊息視窗,表示連線有問題,要確認電腦端、燒錄模擬器和學習開發板之間的接線是否有確實接好?

接線確認後,請重新再按下 "確定" 按鈕,再回到 "Connect/Disconnect" 頁籤下重新 "Connect"

Silabs Flash Programming Utilities 燒錄說明 - 20
如果連線之後沒問題的話,就會出現下面視窗開始下載韌體。

Silabs Flash Programming Utilities 燒錄說明 - 21
一但韌體下載完成,就會出現燒錄成功的提示視窗。

按下 "確定",完成韌體的燒錄並關閉提示視窗。

Silabs Flash Programming Utilities 燒錄說明 - 22

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
Offline-Programming - Silabs MCU Production Programmer 燒錄說明:

下面介紹 Silicon Labs MCU Production Programmer 的安裝步驟和燒錄韌體的方法。

下載下方提供的連結檔案:
MCU Production Programmer 下載(MCUProductionProgrammer.zip)

Silabs MCU Production Programmer 燒錄說明 - 01
MCU Production Programmer 是可攜式軟體不需要安裝,解壓縮後就可以使用。

滑鼠雙擊解壓縮目錄下的 MCUProductionProgrammer.exe 打開軟體畫面。

Silabs MCU Production Programmer 燒錄說明 - 02
選單點選 "Program Menu -> Configure Programming Information",開啟燒錄組態設定畫面。

Silabs MCU Production Programmer 燒錄說明 - 03
初次開啟的組態畫面如下所示。

Silabs MCU Production Programmer 燒錄說明 - 04
在 "Configure Programming Settings" 設定頁面中,請作如下設定:
  • Configuration \ Part Number::設定頁面左上角處,選擇晶片型號為 EFM8BB21F16G-QFN20
  • Configuration \ Settings:勾選 ☑ Erase code space before programming
在 Configuration \ Hex File Location(s) \ Not Nanked: 欄位旁,按下右邊 "..." 按鈕;

Silabs MCU Production Programmer 燒錄說明 - 05
選擇要燒錄的 .hex 檔案(這裡指的是 EFM8BB21F16G-QFN20_Demo01.hex),按下 "開啟(O)"

Silabs MCU Production Programmer 燒錄說明 - 06
確認剛剛的設定沒有問題之後,按下 "Accept Settings" 儲存設定並離開。

Silabs MCU Production Programmer 燒錄說明 - 07
回到主畫面,按下畫面中間 "Program Device" 按鈕,開始燒錄韌體。

Silabs MCU Production Programmer 燒錄說明 - 08
燒錄完成之後,Status Log 的欄位輸出,可以檢查燒錄是否成功?

Silabs MCU Production Programmer 燒錄說明 - 09

【ISP (UART) 燒錄】

這一個部分需要下面的文件和壓縮檔,請預先下載並解壓縮它。

參考文件與資料:

下載網頁 ]

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* UART Programming - 取得需要的工具程式:

解壓縮 AN945SW.zip 到資料夾中,假設它解壓縮的目錄為 {AN945SW}

{AN945SW} 中有三個資料夾:
  • ProductionDeviceHexfiles:編譯好的 EFM8 系列晶片的 Bootloader。
  • StartKitHexfiles:編譯好的 EFM8 Start Kit 的 Bootloader。
  • Tools:包含用於與 EFM8 Bootloader 一起使用的工具程式和 Python Script。

複製 {AN945SW}\Tools\Windows 資料夾中的兩個檔案:hex2boot.exeefm8load.exe,其中,
  • hex2boot.exe.hex 檔為 .efm8 檔的命令列轉換工具程式;
  • efm8load.exe:經由 UART 下載(燒錄).efm8 檔到晶片的命令列工具程式;

取得需要的工具程式 - 01
將複製的兩個檔案,貼上到 EFM8 專案編譯之後的輸出資料夾裡(這裡指的是 {KEIL_EFM8_PRJ}\Project\Objects)。

這裡假設專案資料夾路徑是 D:\OneDrive\PTS\8051\Keil\Silabs\EFM8BB2\EFM8BB21F16G-C-QFN20_Demo01,縮寫為 {KEIL_EFM8_PRJ}

取得需要的工具程式 - 02

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
UART Programming - Keil µVision 轉檔指令設定:

打開 Keil µVision 專案選項設定視窗。

切換到 "User" 頁籤,勾選 After Build/Rebuild 下的 ☑ Run #1,並在其右方 User Command 欄位中輸入
.\Objects\hex2boot.exe .\Objects\@L.hex -o .\Objects\@L.efm8
上方的指令會在編譯後,直接將 EFM8BB21F16G_QFN20_Demo01.hex 檔轉換為 EFM8BB21F16G-C-QFN20_Demo01.efm8。轉換後的 .efm8 檔,是被用來做為 UART 燒錄的檔案。

"OK" 儲存設定並回到主畫面。

Keil µVision 轉檔指令設定 - 01
"Rebuild" 重新編譯程式。

Keil µVision 轉檔指令設定 - 02
完成編譯後,確認下方 "Build Output" 的輸出訊息,可看到剛剛建立的指令列成功被執行。

Keil µVision 轉檔指令設定 - 03
確認一下專案輸出資料夾,可看到 EFM8BB21F16G-C-QFN20_Demo01.efm8 已成功被轉檔。

Keil µVision 轉檔指令設定 - 04

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
UART Programming - 燒錄 EFM8 UART Bootloader:

EFM8 晶片在出廠的時候已預先燒錄了 Bootloader,不同的晶片支援不同的 Bootloader 燒錄方式(詳細的部分請參考文件 Table 1.1.  EFM8 Device Bootloader Support 裡的說明)。對於EFM8BB21F16G-QFN20 來說,它的 Bootload 模式,只支援了 UART 韌體燒錄方式。

根據參考文件裡 Table 1.1. 表格裡所描述的,EFM8BB2x 系列晶片只支援 UART Bootloader,這是個不需要使用燒錄模擬器燒錄程式的方法,只需要 UART 轉 TTL 模組就能成事。

雖說 EFM8BB21F16G-QFN20 出廠時候已預先燒錄 UART Bootloader,但難說不會因為其他的原因被其他韌體程式覆寫了,所以下面就來學學怎麼燒錄 Bootloader。

檔案 {AN945SW}\ProductionDeviceHexfiles\EFM8BB2\EFM8BB21F16G_QFN20.hex 是 EFM8BB21F16G-QFN20 晶片預編譯好的 UART Bootloader 韌體程式。我們要做的就是燒錄這個韌體程式到晶片中,讓晶片擁有使用 UART 燒錄韌體的能力。

燒錄 EFM8 UART Bootloader - 01
開啟 FLASH Programming Utilities,切換到 "Download Hex File/Go/Stop" 頁面,按 "Browse" 打開檔案總管。

選擇 {AN645SW}\ProductionDeviceHexfiles\EFM8BB21F16G-QFN20.hex 後,按 "開啟(O)" 開啟此檔案。

燒錄 EFM8 UART Bootloader - 02
勾選 ☑ Erase all Code Space before download,然後按 "Download" 下載韌體。

燒錄 EFM8 UART Bootloader - 03
若按下 "Download" 後出現下面的警告視窗,表示燒錄模擬器還未連線,但這不表示是燒錄模擬器未插上電腦,而是必須插上電腦又要確認能夠與其通訊的意思。

請先按 "確定" 關閉此警告視窗。

燒錄 EFM8 UART Bootloader - 04
** 請確認燒錄模擬器已插上電腦,並與 EFM8BB2 學習開發板接好線。

切換至 "Connect/Disconnect" 頁籤,按下 "Connect" 與燒錄模擬器和學習開發板進行連線。

燒錄 EFM8 UART Bootloader - 05
如果沒出現任何問題,就會出現成功連線的訊息。

燒錄 EFM8 UART Bootloader - 06
如果有成功偵測到接上的學習開發板,關閉連線成功的提示視窗後,下方的 Device Name: 就會出現偵測到的晶片型號。

燒錄 EFM8 UART Bootloader - 07
切換到 "Download Hex File/Go/Stop" 頁籤,按下 "Download" 開始下載選定的韌體。

燒錄 EFM8 UART Bootloader - 08
成功燒錄之後,會出現提示韌體下載成功的視窗。

按下 "確定",完成韌體的燒錄並關閉提示視窗。

燒錄 EFM8 UART Bootloader - 09
同樣的燒錄步驟,可為 EFM8 系列的晶片燒錄其 Bootloader。

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
UART Programming - 經由 UART 燒錄 EFM8BB21F16G-QFN20 韌體程式:

準備好了 .hex 轉換之後 Boot Record 檔(.efm8),下面來看看怎麼使用 UART 做韌體燒錄。

準備一個 USB 轉 TTL 模組或 RS232 線,然後進行下面的接線。

若使用USB 轉 TTL 模組作為燒錄韌體的工具,其與學習開發板之間的接線就如下表所示:

EFM8BB21 開發板兩側接腳USB 轉 TTL 模組
<P0.4>(UART0 TX)<RXD>
<P0.5>(UART0 RX)<TXD>
<+5V><+5V>
<GND><GND>
<GND>P2.0 (C2D)

EFM8BB21F16G-QFN20 UART 燒錄韌體的實體接線圖
若使用 RS232 線作為燒錄韌體的工具,則學習開發板內部的接線就如下表所示:

EFM8BB21 開發板兩側接腳EFM8BB21 開發板中間 2x5 接腳
<P0.4>(UART0 TX)<RXD>
<P0.5>(UART0 RX)<TXD>
<GND>P2.0 (C2D)

使用 UART 燒錄時,必須讓學習開發板開機時進入到 Bootload 模式。這條件可成立於開機或重置時,讓 <P2.0> 維持在低電壓準位至少 50 us(要不就開機時直接接地也可以,其他方法請看參考文件 5.3.1 Entering Bootload Mode)。

成功進入到 Bootload Mode 後,在燒錄檔案的目錄下,開啟 "命令提示字元" 應用程式,並輸入下面的指令:
efm8load.exe -b 115200 -p COM5 EFM8BB21F16G-C-QFN20_Demo01.efm
如果學習開發板沒有進入到 Bootload Mode,那麼就會出現 [15] 的錯誤訊息。

如果學習開發板進入到 Bootload Mode,那麼成功燒錄之後,就會輸出如下圖最後一段的訊息。

EFM8BB21F16G-QFN20 UART 燒錄韌體的指令

/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
UART Programming - 韌體測試:

這一小節展示的範例,會從 UART 輸出一段提示訊息,再等待使用者輸入一個字元,最後將該字元以 16 進位的方式輸出。

要進行韌體測試,請預先好準備 USB 轉 TTL 模組或 USB 轉 RS232 線。

根據 EFM8BB21F16G-C-QFN2_Demo01.c 裡面的說明,

// Program Description:
//
// This program demonstrates how to configure the EFM8BB2 to use routines
// in STDIO.h to write to and read from the UART0 interface.  The program
// reads a character using the STDIO routine getchar(), outputs that character
// to the screen, and then outputs the ASCII hex value of that character.
//
// Resources:
//   SYSCLK - 24.5 MHz HFOSC0 / 1
//   UART0  - 115200 baud, 8-N-1
//   Timer1 - UART0 clock source
//   P0.4   - UART0 TX
//   P0.5   - UART0 RX

第一種測試方式是使用 USB 轉 TTL 模組,直接將 USB 轉 TTL 模組的接腳,與 EFM8BB2 學習開發板兩邊的晶片接腳相連接即可,電源也使用 USB 轉 TTL 模組的不用外接;此方法不需要用到開發板上的 RS232 晶片。

兩者之間的接線,如下表所示:
EFM8BB21 開發板兩側接腳名稱USB 轉 TTL 模組
<P0.4>(UART0 TX)<Rx>
<P0.5>(UART0 RX)<Tx>
<+5V><+5V>
<GND><GND>

第二種測試方式是使用 USB 轉 RS232 線,不過這需要預先將 EFM8BB2 學習開發板上的 RS232 晶片的 <TxD> 和 <RxD> 接腳預先連接到 <P0.5> 和 <P0.4>,然後接上 USB 轉 RS232 線到開發板上的 DB9 接頭,才能進行測試。

兩者之間的接線,如下表所示:
EFM8BB21 開發板兩側接腳名稱EFM8BB21 開發板中間 2x5 接腳名稱
<P0.4>(UART0 TX)<RXD>
<P0.5>(UART0 RX)<TXD>

開啟電腦的測試軟體,按下開發板上面的紅色按鈕通電(或通電狀態下,按下開發板上的 RESET 按鈕),UART 通訊軟體中就會出現 Enter character:,然後輸入 A Z,就如下圖所示。

韌體測試 UART 輸出訊息

【結論】

本篇關於 EFM8 的離線燒錄,提供了兩種官方工具軟體,讓用戶能自行選擇要用哪一種?每一種的目的雖然都是用來燒錄韌體,但是用的地方還是有所差異的。像是 MCU Production Programmer,就能根據不同的 MCU 載入預先的組態設定進行燒錄,但是 Flash Programming Utilities 就只能根據每次的晶片做組態設定。

EFM8BB21F16G-QFN20 支援 UART Bootloader,所以能以 UART 的方式做韌體的燒錄,對於不適用於使用燒錄模擬器的場合是很方便的一種作法,文中也同時提出了 Bootload 重新燒錄的方法和步驟。

希望這一系列關於 EFM8 微控制器開發環境建置的網頁,對於想要學習 EFM8 系列晶片的使用者能有所幫助。


<< 部落格相關文章 >>

.
.

沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !