2020年9月1日 星期二

Silicon Labs EFM8 微控制器開發環境建置 [2.2]-如何匯入 Simplicity Studio v4 專案檔至 Keil C51

網頁最後修改時間:2020/09/01
[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)燒錄韌體的方法。

[2.1.1]開始,連續三篇的網頁,都會用來說明 EFM8BB21F16G-QFN20 這顆晶片韌體專案的建立步驟和方法。而這一篇,是針對如何匯入 Simplicity Studio v4 專案檔至 Keil C51做說明。

EFM8BB21F16G-QFN20 Package Marking(not included bee icon)

/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
本篇的 Keil 專案檔建立,採用來自 [2.1.2] 網頁的  EFM8BB21F16G-C-QFN2-_Demo01 專案。因為只需要做專案的設置,而不需要做任何程式方面的變更,所以請依照本篇網頁裡面步驟自行建置。

有購買商品的使用者,網頁中所需相關資料已放置於雲端硬碟({商品雲端資料夾} / 程式碼 / 部落格範例 / [2.2]-如何匯入 Simplicity Studio v4 專案檔至 Keil C51 / Keil-Project_EFM8BB21F16G-C-QFN20_Demo01.zip),請自行下載使用!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*

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

經過 1.2 Keil C51 的 Silicon Labs C8051 / EFM8 開發環境建置 裡軟體安裝的說明,想必 Keil C51 已經完成安裝,現在開始準備要進行 EFM8BB21F16G-QFN20 韌體專案的建立。

本篇 Keil 的專案建立,類似於 2.1.1 匯入 Simplicity Studio 專案的方式,主要分為下面幾個小節作為說明:
  • 建立專案資料夾;
  • 建立專案(Crteat a New µVision Project);
  • 專案項目設定(Manage Project Item);
  • 專案目標選項設定(Options for Target);
  • 專案編譯與程式燒錄;
  • 燒錄後的韌體測試;

開始之前,先建立幾個縮寫字:
  • {SILABS_EFM8_PRJ}:表示要匯入到 Keil C51 裡的 Silabs EFM8 專案檔資料夾,假設放置於 D:\OneDrive\PTS\8051\SSSv4\EFM8BB2\EFM8BB21F16G-C-QFN20_Demo01
  • {SILABS_EFM8_DEV}:開發 EFM8 所需要的程式標頭檔和檔案資料夾,假設放置於 D:\SiliconLabs\SimplicityStudio\v4\developer
  • {KEIL_EFM8_PRJ}:Keil 專案檔資料夾,假設放置於 D:\OneDrive\PTS\8051\Keil\Silabs\EFM8BB2\EFM8BB21F16G-C-QFN20_Demo01

根據 Simplicity Studio 的 "Project Explorer" 的專案項目列表,我們可以依此建立 Keil 的專案資料夾。

Simplicity Studio 專案項目列表

【建立專案資料夾】

如下,在 Keil 專案放置的資料夾中,建立如下的目錄結構。

最上層為專案名稱:EFM8BB21F16G-C-QFN20_Demo01

EFM8BB21F16G-C-QFN20_Demo01 ​ ├─Includes ​ ├─Project ​ ├─inc ​ ├─src ​ └─Startup


  • Includes:包含使用到的 Silabs 官方的函式庫標頭檔;
    依照下面的說明,複製下面兩個資料夾中需要的檔案到 {KEIL_EFM8_PRJ}\Includes 資料夾中。
    • 複製 {SILABS_EFM8_DEV}\sdks\8051\v4.1.7\Device\EFM8BB2\inc 資料夾裡面所有的檔案到 {KEIL_EFM8_PRJ}\Includes 資料夾中。

建立專案資料夾 - 01
  • 複製 {SILABS_EFM8_DEV}\sdks\8051\v4.1.7\Device\shared\si8051Base 資料夾中(除了 SILABS_START.A51 之外)的檔案到 {KEIL_EFM8_PRJ}\Includes 資料夾中。

建立專案資料夾 - 02
完成檔案複製後的 {KEIL_EFM8_PRJ}\Includes 資料夾,如下所示。

建立專案資料夾 - 03
  • Project:Keil C51 專案檔檔案放置的地方,第一次儲存專案的同時,也會建立 ListingsObjects 這兩個資料夾;
    請看下一節關於專案建立的說明。

建立專案資料夾 - 04
  • inc:包含使用者或是軟體產生的 .h 程式碼;
    複製 {SILABS_EFM8_PRJ}\inc 裡面所有檔案到 {KEIL_EFM8_PRJ}\inc 資料夾中。

建立專案資料夾 - 05
完成檔案複製後的 {KEIL_EFM8_PRJ}\inc 資料夾,如下所示。

建立專案資料夾 - 06
  • src:包含使用者或是軟體產生的 .c 程式碼;
    複製 {SILABS_EFM8_PRJ}\src 裡面所有 .c 檔案到 {KEIL_EFM8_PRJ}\src 資料夾中。

建立專案資料夾 - 07
完成檔案複製後的 {KEIL_EFM8_PRJ}\src 資料夾,如下所示。

建立專案資料夾 - 08
  • Startup:單獨用來放置 SILABS_STARTUP.A51 檔案的資料夾;
    請由 {SILABS_EFM8_DEV}\sdks\8051\v4.1.7\Device\shared\si8051Base 資料夾,或{SILABS_EFM8_PRJ}\src複製 SILABS_STARTUP.A51 檔案到 {KEIL_EFM8_PRJ}\Startup 資料夾中。

完成檔案複製後的 {KEIL_EFM8_PRJ}\Startup 資料夾,如下所示。

建立專案資料夾 - 09
完成 Keil 專案資料夾的建立和檔案複製後,接下來就可以建立 Keil 專案檔了。

【建立專案(Crteat a new µVision project)】

點選 "Project -> New uVision Project...",開啟新建專案對話視窗。

建立專案 - 01
將專案檔儲存在專案資料夾 {KEIL_EFM8_PRJ}\Project 中,並命名為 EFM8BB21F16G-C-QFN_Demo01,然後按下 "存檔" 儲存並關閉視窗。

儲存專案檔的同時,會於同資料夾下再產生 Objects 和 Listings 兩個資料夾(若專案選項有做相關的設定,則會有所不同)。

建立專案 - 02
關閉視窗後,接著會再自動開啟另一個 "Select Device for Target 'Target 1'..." 的對話視窗。

在該視窗左上角的下拉選單中,選擇 Silicon Labs Custom Data Base

接著在下方 Search: 欄位中,輸入 EFM8BB21 進行篩選,然後點擊篩選之後的 EFM8BB21F16G-QFN20

最後勾選 ☑ Use Extended Linker (LX51) instead of BL51,按下 "OK" 儲存並離開。

建立專案 - 03
這時會出現另一個對話視窗。

因為我們已經自己添加了 SILABS_STARTUP.A51,所以按 "否(N)" 不添加後離開。

建立專案 - 04

【專案項目設定(Manage Project Items)】

回到主畫面,滑鼠右鍵點選 Target 1,下拉選單中選擇 "Manage Project Items...",開啟添加專案項目的對話視窗。

這裡主要是將專案資料夾裡面會用到的檔案,添加作為專案的項目,但不需要包含外部的標頭檔和函式庫。

專案項目設定 - 01
請對照下面的步驟與圖示,進行相對應的項目名稱修改以及資料夾的添加。
  • Project Targets:
    • 修改下面的 Target 1EFM8BB21F16G-C-QFN20
  • Groups:
    • 添加 Startup src 兩個群組。
  • Files:
    • 選擇 Groups: Startup 添加檔案 {KEIL_EFM8_PRJ}\Startup\SILABS_STARTUP.A51

點選 Startup 後,按 "Add Files..." 開啟檔案總管。

專案項目設定 - 02
依照下面的步驟選擇檔案:
  1. 選擇 檔案類型: Asm Source file (*.s;*.src;*.a*)
  2. 選擇檔案  SILABS_STARTUP.A51
  3. 按 "Add" 加入檔案;
  4. "Close" 離開;

專案項目設定 - 03
如果 Startup 群組的檔案添加成功,點選群組時,檔案就會顯示在右邊的 Files: 欄位中。

接著點選 Groups: 下的 src,同樣照著剛剛上面的步驟,添加相關的檔案。

專案項目設定 - 04
請添加 {KEIL_EFM8_PRJ}\src 資料夾中的 EFM8BB21F16G-C-QFN20_Demo01_main.cInitDevice.c 這兩個檔案,到 src 群組中。

專案項目設定 - 05
 添加完成,就如下圖所示。

專案項目設定 - 06
完成各群組檔案的添加之後,專案項目就如下圖所示。

專案項目設定 - 07

【專案目標選項設定(Options for Target)

組織好專案項目之後,接著要設定專案目標選項;也就是加入會用到的外部的標頭檔和函式庫,以及關於專案編譯、燒錄和除錯的設定。

EFM8BB21F16G-C-QFN20 點擊滑鼠右鍵,下拉選單中選擇 "Options for Target 'EFM8BB21F16G-C-QFN20'..."

專案目標選項設定 - 01
 切換到 "Output" 頁籤中,勾選 [v] Create HEX File

專案目標選項設定 - 02
 切換到 "C51" 頁籤中,按下 Include Paths 右邊的 "..." 按鈕。

專案目標選項設定 - 03
這會開啟一個 "Folder Setup" 路徑的設定視窗。

有兩個路徑需要加入,先按 新增圖示,再按下 2 右邊的 "..." 按鈕。

專案目標選項設定 - 04
 第一個路徑,選擇  {KEIL_EFM8_PRJ}\inc

專案目標選項設定 - 05
第二個路徑,選擇 {KEIL_EFM8_PRJ}\Includes

專案目標選項設定 - 06
完成標頭檔的路徑設定之後,就如下圖所示。

"OK" 關閉 "Folder Setup" 視窗,並回到專案選項設定。

專案目標選項設定 - 07 
"C51" 頁籤,Include Paths 加入了剛剛添加的資料夾路徑。

專案目標選項設定 - 08
切換到 "LX51 Misc" 頁籤,在 Misc controls 加入 REMOVEUSED 這一段文字。

專案目標選項設定 - 09
*********************************************************************************
在 "Device" 頁籤中,[v] Use Extended Linker (LX51) instead of BL51 的勾選,和 "LX51 Misc" 頁籤中,Misc controls 的設定,都是為了解決 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 的警告問題。

另一個方法:在 "BL51 Misc" 頁籤中,disable Warning Numbers: 填入 16 亦可。
*********************************************************************************

切換到 "Debug" 頁籤,修改除錯時要使用的裝置。

專案目標選項設定 - 10
點選 🔘 Use: ,再於右側下拉選單中,選擇 Silicon Labsd C8051Fxxx Driver,最後按下 "Settings" 開啟除錯器選用視窗。

專案目標選項設定 - 11
如果當下沒有把燒錄模擬器插上的話(如下圖所示),會沒有其他選項可以做選擇。

所以請按 "OK" 關閉視窗,再把燒錄模擬器插上電腦後,重新再開啟該視窗一次。

專案目標選項設定 - 12
若一切無誤,則剛剛視窗中間的選項就會出現!

重新按下 "Settings","Target Setup" 選擇 🔘 USB Debug Adapter,然後按下 "OK" 儲存設定。

專案目標選項設定 - 13
切換到 "Utilities" 頁籤,選擇要使用的燒錄器

專案目標選項設定 - 14
在 🔘 Use Target Deiver for Flash Programming 下方的下拉選單選項中,選擇 Silicon Labs C8051Fxxx Driver,再按下 "OK",儲存所有設定後離開對話視窗,回到主畫面。

這裡有一點很重要必須說明:Use Target Deiver for Flash Programming 一般需要設定兩次才會成功!

所以完成設定之後,請務必關閉 "Options for Target ..."  視窗後,再次打開做確認。

一定要確保這選項設定成功!

專案目標選項設定 - 15

【專案編譯與程式燒錄】

完成專案項目和專案選項中的所有設定後,由於檔案已經預先都準備好了,也不需要再做撰寫或修改,現在可以進行程式的編譯了。

按下 "Build (F7)" 開始編譯程式。

專案編譯與程式燒錄 - 01
若程式沒有出現任何問題的話,編譯輸出會類似下圖所示。

專案編譯與程式燒錄 - 02
** 請務必在進行燒錄之前將燒錄模擬器與開發板連接好,並插上電腦!

確定燒錄模擬器還插在電腦上,將 2x5 灰色排線插到 EFM8BB2 學習開發板黑色插槽中(開發板不需要另外再接電源線),按下 "Download (F8)" 就會開始進行韌體燒錄的準備動作。

專案編譯與程式燒錄 - 03
首先,會先詢問是否要清除 Flash?

按下 "是(Y)" ,開始擦除記憶體。

專案編譯與程式燒錄 - 04
完成記憶體擦除的工作後,會出現提示完成的對話視窗

按下 "確定" 後,就會開始進行韌體的燒錄。

專案編譯與程式燒錄 - 05
完成韌體燒錄之後,主畫面的輸出,就如下圖所示。

專案編譯與程式燒錄 - 06

【燒錄後的韌體測試】

這一小節展示的範例,會從 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,接著就如下圖所示。

燒錄後的韌體測試
【結論】

本篇,說明了如何匯入 SSv4 專案到 Keil C51 的步驟與方法,適用於傾向使用 Keil 開發 Silicon Labs 8-bit Microcontrollers 的用戶。對於初學者來說,建議使用[2.1.1]匯入專案的方式,來學習與熟悉 EFM8BB21-C-QFN20 晶片韌體程式的開發,這會比用其他方式更容易上手。有任何不懂的地方,官方有提供論壇和豐富的資料文件與應用筆記可供交流、詢問、參考與查閱。

SSv4 支援多種軟體的專案檔匯入,除了 Simplicity Studio 和 Keil C51 專案檔外,其餘沒說到的專案檔匯入步驟和方法,請自行參考官方文件或網路上的教學。

本篇是 Silicon Labs EFM8 專案建立和匯入的最後一篇,接下來我們將介紹離線燒錄和使用 UART 燒錄韌體的步驟和方法。


<< 部落格相關文章 >>

.
.

沒有留言:

張貼留言

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

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

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