嵌入式和物聯(lián)網(wǎng) (IoT) 開發(fā)團隊承受著壓力,需要盡快完成并交付設(shè)計。為了能夠快速行動,他們需要使用經(jīng)過驗證且具有強大生態(tài)系統(tǒng)的元器件和軟件框架。他們還需要研究如何維護系統(tǒng),以及將來如何擴展,這意味著解決方案還需要具備可移植性,并且在需要時能夠跨多種硬件平臺工作。
但是,微控制器供應(yīng)商經(jīng)常將開發(fā)人員束縛在自己的生態(tài)系統(tǒng)中,這使得在微控制器之間進行切換不是那么容易。此外,微控制器生態(tài)系統(tǒng)的軟件工具常常不足,大部分是基于 C 語言,這對開發(fā)團隊而言也是絆腳石。
考慮到這些需求,本文將介紹?Arm?Mbed 平臺和操作系統(tǒng)。文中將展示開發(fā)人員如何利用 Mbed 生態(tài)系統(tǒng)來加速嵌入式產(chǎn)品開發(fā),并使用它來擴展到微控制器供應(yīng)商生態(tài)系統(tǒng)之外的世界。
什么是 Arm Mbed?
Mbed 是由 Arm 主導(dǎo)的面向物聯(lián)網(wǎng)設(shè)備開發(fā)人員的在線協(xié)作體系1。Mbed 為開發(fā)人員提供極為豐富的資源來加速開發(fā),從 Mbed OS、Mbed TLS 一直到 Mbed 庫支持的開發(fā)板和各種元器件。
Mbed 的初衷是讓開發(fā)人員能夠利用在線社區(qū)中 200,000 開發(fā)人員以及主要微控制器供應(yīng)商(例如?Cypress Semiconductor、NXP Semiconductors?和?STMicroelectronics)所支持的大型生態(tài)系統(tǒng),借助現(xiàn)有元器件、開發(fā)工具和庫來加快開發(fā)速度。使用 Mbed 生態(tài)系統(tǒng)有許多優(yōu)勢:
庫和示例均用 C++ 編寫,C++ 是一種現(xiàn)代的面向?qū)ο笳Z言,其設(shè)計使得代碼可擴展且可重用。
支持利用現(xiàn)有硬件平臺快速開發(fā)嵌入式產(chǎn)品原型以證明其可行性。
使用 Mbed 在線和離線編譯器以及 Mbed 命令行界面 (CLI),簡化軟件測試的開發(fā)(測試甚至包括在許多示例和庫中)。
內(nèi)置用于開發(fā)物聯(lián)網(wǎng)設(shè)備的工具,例如云連接器服務(wù),不僅簡化了設(shè)備到云的連接,而且簡化了通過其他基于云的服務(wù)管理設(shè)備的工作。
Mbed 的通用架構(gòu)模型給嵌入式開發(fā)人員提供了極大的靈活性和可擴展性。舉例來說,該架構(gòu)模型一般分為三個單獨的層(圖 1):
低級硬件抽象層 (HAL)
Mbed OS API,用作中間件,提供存儲、RTOS、安全連接、通信堆棧等能力
高級物聯(lián)網(wǎng)層,包括開發(fā)人員的應(yīng)用程序代碼、Mbed OS 庫和連接客戶端
圖 1:Mbed 架構(gòu)包含三個主要層,可以根據(jù)需要進行擴展和補充:一個通過 HAL 抽象的低級硬件接口,一個對中間件進行抽象的 Mbed OS API 層,以及一個用于編寫應(yīng)用程序代碼并利用庫和 Pelion 等客戶端的高級層。(圖片來源:Arm Mbed)
該架構(gòu)的設(shè)計方式讓開發(fā)人員可以加入應(yīng)用所需的組件,而省去其余工作。這使該架構(gòu)具有可伸縮性和靈活性,方便開發(fā)人員用來快速開發(fā)原型,并在較短時間內(nèi)將原型變?yōu)榱慨a(chǎn)產(chǎn)品。
Mbed 從硬件開始
盡管 Mbed 提供了良好的軟件基礎(chǔ),但除了軟件和開發(fā)軟件所需的工具之外,還會提供其他功能。團隊開發(fā)產(chǎn)品的最快方法是在使用軟件的同時利用 Mbed 硬件生態(tài)系統(tǒng)。硬件生態(tài)系統(tǒng)包括三個不同方面:
- 模塊
- 開發(fā)板
- 元器件
模塊本質(zhì)上是以物聯(lián)網(wǎng)為中心的連接設(shè)備,它以經(jīng)過認證且隨時可用的封裝形式提供。例如,開發(fā)人員若要開發(fā)一款支持 LoRaWAN 的產(chǎn)品,可以選擇?Multi-Tech Systems?的?MTMDK-XDOT-NA1-A00?xDot 模塊開發(fā)套件(圖 2)。xDot 模塊在視距應(yīng)用中可提供長達 10 英里的雙向通信距離,在建筑物中可提供 1 到 3 英里的雙向通信距離,數(shù)據(jù)速率從每秒 293 位 (bps) 到每秒 20 Kb (kbps)。該模塊使用低功耗 STMicroelectronics 的?STM32L151CCU6?處理器,其工作頻率為 32 兆赫 (MHz),可以通過 SPI、UART 或 I2C 接口利用 AT 消息傳遞方案進行控制。
圖 2:xDot 模塊為開發(fā)人員提供經(jīng)過認證的 LoRaWAN 模塊,該模塊受 Mbed 軟件堆棧的支持,可以大大縮短開發(fā)人員實現(xiàn)和運行解決方案的時間。(圖片來源:Multi-Tech Systems Inc.)
Mbed 板本質(zhì)上是 Mbed 全面支持的不同微控制器系列的開發(fā)板。每個開發(fā)板都有微控制器供應(yīng)商提供的獨特特性和功能。例如,對支持低功耗藍牙 (BLE) 的開發(fā)板感興趣的開發(fā)人員,可能會喜歡 Cypress Semiconductor 的?CY8CKIT-062-BLE(圖 3)。
圖 3:CY8CKIT-062-BLE 開發(fā)板具備多種用于開發(fā)物聯(lián)網(wǎng)連接設(shè)備的特性,包括電子墨水顯示屏、電容式觸控按鈕和滑塊、BLE 模塊以及 KitProg2 調(diào)試器。(圖片來源:Cypress Semiconductor)
CY8CKIT 的獨特之處在于它使用多核 PSoC 62 安全微控制器。一個內(nèi)核是 Arm? Cortex?-M4 處理器,第二個內(nèi)核是低功耗 Arm Cortex-M0 +。這使開發(fā)人員可以劃分應(yīng)用程序代碼,例如讓一個處理器處理 BLE 通信,或者使用 Cortex-M0+ 內(nèi)核作為安全處理器來鎖定應(yīng)用程序。板上提供的 I/O 擴展可將 Mbed 元器件連接到系統(tǒng),從而大大減輕開發(fā)人員開發(fā)系統(tǒng)原型的工作。
Mbed 元器件是一個硬件元器件,具有 Mbed 支持的庫及其相關(guān)的中間件,這些庫和中間件充當(dāng)產(chǎn)品開發(fā)的構(gòu)件。例如,從事物聯(lián)網(wǎng)項目的開發(fā)人員可能會決定要使用溫度傳感器。開發(fā)人員可以在 Mbed 元器件中搜索其支持的溫度傳感器,例如,他們可能會在外設(shè)模塊中發(fā)現(xiàn)?Maxim Integrated?的?MAX31723PMB1,該模塊可用于快速開發(fā)原型(圖 4)。
此類 Mbed 元器件的優(yōu)點在于,它們幾乎總是作為開發(fā)板提供并帶有原理圖。這樣,開發(fā)人員不僅可以查看使傳感器工作所需的硬件配置,還可以使用軟件庫來啟動和運行傳感器。
圖 4:MAX31723PMB1 數(shù)字溫度計和溫控器外設(shè)模塊(原理圖所示)可以輕松插入 Mbed 開發(fā)板,然后使用相關(guān)的 Mbed 元器件庫來快速連接溫度傳感器并與之交互。(圖片來源:Maxim Integrated)
Mbed 并非只有像測量溫度和濕度的傳感器那樣的簡單傳感器。例如,開發(fā)醫(yī)療設(shè)備的開發(fā)人員會發(fā)現(xiàn),Maxim Integrated 的?MAXREFDES220#?模塊為他們提供了基于手指的心率和 SpO2 血氧傳感器的參考設(shè)計(圖 5)。
圖 5:MAXREFDES220# 模塊為開發(fā)人員提供了一個支持基于手指的心率和 SpO2 監(jiān)測的開發(fā)板。(圖片來源:Maxim Integrated)
此外,還有諸如?Seeed Technology?的?114991252?VL53L0X Flow 分線板之類的組件,它們可用于光線檢測和 3D 飛行時間 (ToF) 測距等應(yīng)用(圖 6)。例如,嘗試在邊緣開發(fā)基于手勢的技術(shù)的開發(fā)人員,可能會對該傳感器感興趣。
圖 6:Seeed Technologies 的 114991252 Flow 傳感器分線板可輕松集成到 Mbed 開發(fā)板中,用于需要光線檢測的應(yīng)用或手勢檢測等 3D 飛行時間應(yīng)用。(圖片來源:Seeed Technology)
開發(fā)人員選定開發(fā)板和元器件之后,便可開始利用 Mbed 進行開發(fā),通過創(chuàng)建“Hello World” LEDBlinky 應(yīng)用程序來測試他們是否可以成功對開發(fā)板進行編程并使 LED 燈閃爍。
用 Mbed 編寫“Hello World” LEDBlinky 應(yīng)用程序
開發(fā) Mbed 應(yīng)用程序有多種方法:通過在線編譯器;通過離線編譯器;或使用命令行界面 (CLI) 工具。根據(jù)個人經(jīng)驗,建議使用 CLI,因為它能更好地控制開發(fā)過程,并且更易于集成到開發(fā)流程中,例如測試工具和連續(xù)集成服務(wù)器。
CLI 提供了命令行界面功能,因此使用 Windows 的開發(fā)人員可以使用命令提示符來編譯代碼。創(chuàng)建 LEDBlinky 應(yīng)用程序的第一步是使用 Mbed 隨附的預(yù)寫示例。這可以通過在命令提示符中輸入以下命令來完成:
mbed import mbed-os-example-blinky
下載示例需要幾分鐘時間,因為還會下載 Mbed OS 和應(yīng)用中可能會使用的其他支持組件。下載完成后,開發(fā)人員便可導(dǎo)航到 mbed-os-example-blinky 文件夾,其中有一個 main.cpp 文件。開發(fā)人員可以在自己喜歡的編輯器中打開此模塊,其中代碼大致如下所示:開發(fā)人員可以在此進行修改,但是對于本文而言,使用默認值即可。更值得注意的是編譯和部署代碼。具體用來編譯和部署代碼的命令將因硬件而異。下面的例子顯示了如何使用一條命令對 Cypress CY8CKIT-062-BLE 開發(fā)板進行編譯和編程:
第一次編譯項目可能需要幾分鐘,因為工具鏈需要構(gòu)建所有自動進入 Mbed 應(yīng)用程序的關(guān)聯(lián)文件。編譯周期完成后,結(jié)果應(yīng)類似于下面的圖 7 所示。
圖 7:成功編譯 LEDBlinky 項目后 Mbed 編譯器的輸出。(圖片來源:Jacob Beningo)
命令行中的 -f 選項將會自動獲取已編譯的十六進制文件,并將其復(fù)制到開發(fā)板上,開發(fā)板顯示為 DAPLink 大容量存儲設(shè)備。此時,LED 應(yīng)該閃爍,開發(fā)人員可以開始開發(fā)主要應(yīng)用程序。
Mbed 的使用技巧與訣竅
Mbed 入門非常簡單,但對于開發(fā)人員來說可能存在挑戰(zhàn)。以下是關(guān)于開始使用 Mbed 開發(fā)產(chǎn)品的一些“技巧與訣竅”:
避免使用在線編譯器。雖然這對于業(yè)余愛好者來說很好,但對于專業(yè)人士而言,讓其他人的服務(wù)器擁有源代碼可能是個問題。此外,來回云端可能會減慢調(diào)試速度。諸如 Mbed IDE 或 Mbed CLI 之類的本地編譯器是更好的選擇。
Mbed 支持多線程,但默認情況下,主函數(shù)在自己的線程中運行。
從 Mbed 示例項目開始,對其進行考察,了解如何更有效地使用 Mbed 應(yīng)用程序。
利用 Mbed 測試工具確保應(yīng)用開發(fā)沒有無意間破壞 Mbed 框架中的任何內(nèi)容。
使用 Mbed 硬件站點搜索可以快速集成在一起來開發(fā)產(chǎn)品的開發(fā)板、元器件和模塊。
上述技巧將有助于確保開發(fā)人員盡量減少花費在嵌入式產(chǎn)品開發(fā)上的時間。
總結(jié)
嵌入式和物聯(lián)網(wǎng)開發(fā)人員需要一個受到良好支持的生態(tài)系統(tǒng)來為他們提供現(xiàn)代化的工具、流程和軟件,幫助他們加快開發(fā)工作并使開發(fā)成本最小。如本文所示,Mbed 平臺和 OS 是開發(fā)人員可以利用的一種潛在選擇。
Mbed 提供可擴展且靈活的軟件架構(gòu),其中包含許多已經(jīng)集成在一起并經(jīng)過測試的組件。由于對各種硬件模塊、開發(fā)板和元器件的強大支持,開發(fā)人員可以輕松創(chuàng)建產(chǎn)品原型,然后將其擴展成生產(chǎn)解決方案。
評論