為何要在邊緣 IoT 裝置使用多核心微控制器及如何開始

作者:Jacob Beningo

資料提供者:DigiKey 北美編輯群

邊緣物聯網 (IoT) 裝置的開發人員應市場要求,需納入益發多樣且處理密集型的功能,涵蓋通訊、取樣感測器到執行機器學習 (ML) 推論等。同時,開發人員要維持或降低功耗。這需要對設計的核心元件採用更有彈性的架構做法,也就是微控制器。如此一來,開發人員就可在增添功能的同時,在效能、功能與功耗上取得最佳平衡。

這種架構做法採取的形式便是多核心微控制器。顧名思義,多核心微控制器是將多個處理核心建構在單一封裝中。然而,單純採用更多核心無法解決問題。開發人員需要了解對稱與非對稱式多核心處理器之間的差異、如何進行功能分割,以及如何有效地對其進行編程。

本文將介紹多核心微控制器的概念,然後探討開發人員如何運用多核心微控制器,以在效能與能源限制之間取得平衡。本文將介紹 STMicroelectronics 旗下 STM32H7 產品線推出的幾款多核心微控制器,並以此示範說明。此外,本文還會檢驗幾個使用案例,說明開發人員可以運用多核心處理功能,並在多個核心之間拆分工作負載。

多核心微控制器簡介

如上所述,多核心微控制器擁有多個處理核心。常用的配置有兩種:對稱與非對稱式處理。對稱式核心配置包含兩個或多個完全相同的處理核心。例如,這些核心可能都是 Arm® Cortex®-M4 處理器。另一方面,非對稱式核心則可能包含 Arm Cortex-M7 處理器和 Arm Cortex-M4 處理器。此外,也可能包含 Arm Cortex-M4 和 Arm Cortex-M0+ 處理器。組合的方式相當多種,視應用及設計的需求而定。

IoT 開發人員會對多核心微控制器感到興趣,是因為能將應用分成多個執行域。不同的執行域有助於精準控制應用的效能、功能以及電力需求。例如,可以使用一個核心透過高解析度顯示器以及觸控面板與使用者互動,而第二個核心則用於管理系統的即時需求,例如控制馬達、繼電器以及取樣感測器。

開發人員可以採用多種應用分割方式,但其中最常用的兩種典範方式是將應用分成:

  • 多功能/即時
  • 即時/安全

在第一種「多功能/即時」典範中,系統就如同上文所述的一樣。多功能型應用的元件,如顯示、機器學習推論、音訊播放以及記憶儲存等,都由一個核心處理。第二個核心則用於處理即時功能,例如馬達控制、感測與通訊堆疊 (圖 1)。

多功能/即時典範的示意圖圖 1:採用多核心微控制器的應用設計典範之一,是將多功能型應用的元件置於一個核心,即時型元件則置於第二個核心。(圖片來源:STMicroelectronics)

第二種典範則將應用分成即時與安全功能。在第一個核心當中,應用會處理諸如顯示、記憶體存取以及即時音訊播放等作業。另一方面,第二個核心則只充當安全處理器使用。因此,第二個核心會負責儲存重要資料 (如裝置與網路金鑰)、處理加密、安全啟動程式,以及執行任何屬於安全軟體範疇的其他功能 (圖 2)。

即時應用元件置於一個核心的示意圖圖 2:另一種運用多核心微控制器的應用設計典範,是將即時應用元件置於一個核心,所有安全性元件則置於第二個核心。(圖片來源:STMicroelectronics)

此外,還有其他潛在方式可分割多核心微控制器的應用空間,但這兩種典範似乎是最受 IoT 開發人員青睞的方式。

挑選多核心微控制器開發板

雖然多核心微控制器越來越受歡迎,但仍然不算是主流,挑選時會面臨一些難題。如果開發人員想使用多核心微控制器,最好挑選擁有下列特徵的開發板:

  • 含有 LCD,以便探索多功能型應用應用
  • 擴充 I/O
  • 低成本
  • 由經過實證的生態系統支援,包括範例程式碼、社群論壇,並可洽詢具備專業素養的現場應用工程師

以下將討論數個來自 STMicroelectronics 的產品範例,首先從 STM32H745I-DISCO 開始 (圖 3)。這款開發板以 STM32H745ZIT6 雙核心微控制器為基礎,其中包含一個運作頻率為 480 MHz 的 Arm Cortex-M7 核心,以及第二個運作頻率為 240 MHz 的 Arm Cortex-M4 處理器。此零件包含一個雙精度浮點單元,以及一個具備 16 Kb 資料與 16 Kb 指令快取的 L1 快取。這款探索板因為包含某些額外功能,因而特別值得關注,例如:

  • SAI 音訊編解碼器
  • 微機電系統 (MEMS) 麥克風
  • 板載四通道 SPI 快閃記憶體
  • 4 GB eMMC
  • 子卡擴充
  • 乙太網路
  • 供音訊裝置與耳機使用的排針座

這款開發板有許多內建功能,因此是運用多核心微控制器的超簡易入門選擇,且確實能擴充應用。

STMicroelectronics 的 STM32H745I-DISCO 開發板圖片圖 3:STM32H745I-DISCO 開發板整合了許多板載感測器以及記憶體功能,能讓開發人員測試運作頻率為 480 MHz 以及 240 MHz 的雙核心微控制器。(圖片來源:STMicroelectronics)

如果開發人員想尋找擁有額外功能以及大量擴充 I/O 的開發板,那麼 STM32H757I-EVAL 也許正是最佳選擇 (圖 4)。STM32H757I-EVAL 包含額外的評估板功能,例如:

  • 8 M x 32 位元 SRAM
  • 1 Gb 雙重四通道 SPI NOR 快閃記憶體
  • 用於追蹤指令的嵌入式追蹤巨集單元 (ETM)
  • 電位器
  • LED
  • 按鈕 (撥動、搖桿、喚醒)

對於剛入門的開發人員來說,這些額外功能 (特別是 I/O 擴充) 非常實用。

STMicroelectronics 的 STM32H757I-EVAL 開發板圖片圖 4:STM32H757I-EVAL 開發板為開發人員提供大量擴充空間,並且能輕易取用周邊裝置,此外也有 LCD 螢幕,能開始開發多核心應用。(圖片來源:STMicroelectronics)

在了解幾款開發板之後,接下來將簡單提供一些建議,以便開始開發多核心微控制器應用。

如何開始開發第一個多核心應用

無論選用兩款 STM32H7 開發板的哪一個,開始使用時都需要兩個主要工具。第一個工具是 STMicroelectronic 的 STM32CubeIDE。這是一款免費的整合式開發環境 (IDE),能讓開發人員編譯自己的應用程式碼,並將其部署至開發板。此外,STM32CubeIDE 也提供必要的資源來逐步執行應用並進行除錯,並且相容於各大作業系統,包括 Windows、Linux 以及 MacOS。

第二個工具是 STMicroelectronic 的 STM32H7 韌體套件。這個套件包含適用於 STM32H7 開發板的範例:

  • 多核心處理
  • 使用 FreeRTOS
  • 周邊裝置驅動程式
  • FatFS (檔案系統)

開發人員需要下載韌體應用程式套件,並對其選用之開發板所支援的範例加以熟悉。不過,開發人員需特別注意兩個資料夾。第一個是應用程式資料夾,內含兩個說明如何使用 OpenAMP 的範例 (圖 5)。這些範例說明如何在微控制器核心之間來回傳輸資料,其中一個核心會將資料傳輸到另一個,再由第二個核心傳回第一個。兩個範例以不同的方式執行此步驟。第一個是沒有作業系統的裸機,而另一個則搭配 FreeRTOS。

OpenAMP STM32Cube_FW_H7 的圖片圖 5:STM32Cube_FW_H7 提供數個範例,展示如何開始透過 OpenAMP 進行多核心處理。(圖片來源:Beningo Embedded Group)

第二組範例展示的是在使用及不使用 RTOS 的情況下,如何配置兩個核心 (圖 6)。其中一個範例說明如何在每個核心上執行 FreeRTOS;第二個範例則說明如何在一個核心上使用 RTOS,而另一個核心則裸機運作。這個韌體套件還有其他幾個範例可展示其他功能,但上述範例是入門時不錯的選擇。

STM32Cube_FW_H7 提供數個範例示意圖圖 6:STM32Cube_FW_H7 提供數個範例,展示如何配置搭載多核心處理器的作業系統。(圖片來源:Beningo Embedded Group)

載入範例專案後,開發人員會看到類似圖 7 的專案佈局。如圖所示,專案由各個核心的應用程式碼組成。組建的配置亦可設定成,讓開發人員一次只使用一個核心。如圖 7 中以灰階顯示的檔案所示。

OpenAMP Ping-Pong 範例專案圖片圖 7:OpenAMP Ping-Pong 範例專案向開發人員展示如何在兩個 CPU 核心之間建立通訊通道。(圖片來源:Beningo Embedded Group)

範例程式碼的完整說明並不在本文的討論範圍內,但讀者可以檢閱與任何範例相關的 readme.txt 檔案,取得詳細說明來了解其運作方式,然後可檢閱原始程式碼,了解跨處理器通訊 (IPC) 的實際執行方式。

使用多核心微控制器的秘訣與訣竅

開始使用多核心微控制器並不困難,但開發人員必須開始以略微不同的方式思考其應用設計。以下提供一些開始使用多核心微控制器的「秘訣與訣竅」:

  • 仔細評估應用,以決定最適合的應用領域劃分方式。雖然可以由單一處理器涵蓋多個領域,但若未細心規劃,可能會影響效能。
  • 請花時間探索 OpenAMP 架構內建的功能,並瞭解應用要如何運用這些功能。
  • 下載適用於 STM32H7 處理器的應用範例,並且為選定的開發板執行多核心應用範例。H747 包含兩個範例:一個適用於 FreeRTOS,另一個則適用於 OpenAMP。
  • 進行應用除錯時,別忘了現在有兩個核心在運作!務必在除錯環境中選擇正確的執行緒,以檢視其調用記錄。
  • 運用硬體旗號等內部硬體資源,在核心上達到應用執行同步。

開發人員若在一開始便使用支援完備的開發板,並且遵循這些「秘訣和訣竅」,便能在初次使用多核心微控制器時省下許多時間和麻煩。

結論

對於網路邊緣 IoT 系統的開發人員而言,多核心微控制器能依據應用需求,在功能、效能與功耗之間達到更優異的配合與平衡。這類微控制器能讓開發人員將應用分成數個領域,例如多功能/即時,或是即時/安全處理。將應用區分成多個領域的能力,能讓開發人員在不需要處理域時,將對應的核心停用,以節省能源;或是將核心開啟,以提高應用效能。

如本文所述,有多款不同的開發板可用於開始探索多核心微控制器應用設計,並且能完全掌控其效能與能源概況。

DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo 是嵌入式軟體顧問,目前與超過十幾個國家的客戶合作,透過產品品質、成本和上市時間的改善,促成業務的大幅轉型。他曾在嵌入式軟體開發技術上發表超過兩百篇文章,是深思熟慮的講師和技術培訓師,共擁有三個學位,包括密西根大學的工程碩士學位。歡迎透過以下方法洽詢,電郵:jacob@beningo.com、網站:www.beningo.com,亦可登記取得他發行的Embedded Bytes 每月電子報

關於出版者

DigiKey 北美編輯群