安謀公司(ARM)最初與晶片設計業者相同, 期望自研自售晶片, 但由於財務困境被迫轉向以純設計電路授權的營利模式. ARM在陸續推出各種處理器核心電路後, 於1994年推出ARM7TDMI(ARM7+16 bit Thumb+JTAG Debug+fast Multiplier+enhanced ICE)處理器核心, 此核心開始廣受歡迎, 使ARM公司及其產品業務的知名度漸開.
ARM之後陸續推出ARM9, ARM10, AMR11核心, 原有ARM7也衍生出各種版本供客戶選擇, ARM9/10/11亦然. 但隨著時間與技術發展, ARM決議發展全新系列核心, 並逐步汰除舊的授權核心.
2008年ARM提出以Cortex為名的新系列核心, 包含Cortex-A, Cortex-R, Cortex-M, 三系列恰好如安謀公司的3個字母A, R, M. A系列著眼在應用程式處理器(Application Processor, AP)市場, M系列則為微控制器(Microcontroller Unit, MCU)市場, R系列也著眼於微控制器市場, 但更偏重於即時控制的應用, 如產業設備控制, 車用電子等.
Cortex-A/R/M提出後, ARM將過往ARM7/9/10/11等系列稱為古典, 經典(Classic)系列, 仍持續提供授權, 但逐漸放淡, 將推行心力轉向新技術, 新架構的Cortex.
CMSIS試圖統一軟體標準
隨著Cortex新系列的提出, ARM也試圖解決一些過往的問題, 過去許多晶片業者取得ARM核心授權後, ARM並不過問晶片業者如何增訂修訂晶片內的電路, 更不過問晶片的軟體程式開發.
不過, 由於晶片業者各自為政, 即便不同晶片業者採行相同的ARM核心, 對於周邊電路的操控方式, 程式的開發撰寫等也各自不同, 甚至同晶片商的前後款晶片也不同, 相容性, 交換性低落, 程式的撰寫無法共通與沿用, 導致軟體開發上的重複浪費, 此使ARM難以發展完整連續的ARM核心軟體生態.
因此ARM提出CMSIS(Cortex Microcontroller Software Interface Standard)標準(圖1), 試圖提供各晶片商一個共同參考依據, 凡採行Cortex-M系列核心的晶片, 若依循此標準發展軟體, 則有較高的通用, 延續性.
而之所以鎖定Cortex-M系列, 在於經典系列最暢銷普及的核心ARM7TDMI, 此核心多數時候被晶片商定位為微控制器, CMSIS的提出, 正是期望減少微控制器軟體重複開發, 難以交換, 難以延續使用等難題.
至於Cortex-A系列屬較新的發展, 包袱較少, 且運算力較強, 硬體資源較充沛, 較無ARM7TDMI, Cortex-M等微控制器的軟體開發困擾, 事實上ARM也在2009年提出mbed後, 在2010年提出Linaro, Lianro試圖提出與建構一套共通的ARM架構Linux軟體生態系統, 使Cortex-A系列所用的Linux軟體有一個共通依循標準, 用意一樣在減少各自為政的重複開發, 累積完整連續的軟體技術資產.
不過由於Android(根基於Linux)的強力發展與普及, 推行Linaro的產業重要性已減少, Cortex-A系列的主要軟體生態依循已是Android.
CMSIS架構解析
CMSIS嚴格而論僅是一個架構的泛稱, 具體內容包含多項軟體零件, 如CMSIS-CORE, CMSIS-Driver, CMSIS-RTOS等. 其中最根基的部份為CMSIS-CORE, 它定義了存取函式, 周邊與中斷定義等, 所有其他軟體若想操控Cortex-M核心電路, 核心周邊電路或其他周邊電路等, 均要透過CMSIS -CORE.
CMSIS-CORE外另兩個重點即是CMSIS-Driver, CMSIS-RTOS, 兩者均是應用程式介面, 可供應用程式呼叫(Call, 對岸稱調用)使用, 前者提供一致的硬體驅動, 操控方式, 後者提供提供應用程式與即時作業系統間的一致互動呼叫方式.
CMSIS-Driver也可以由晶片商再行定義硬體抽象層(Hardware Abstraction Layer, HAL), 以及透過協力業者(Third Party)的中介軟體(Middleware, 對岸稱中間件)來呼叫使用; CMSIS-RTOS也只在定義規範, 實際執行的即時作業系統(Real-Time Operating System, RTOS, 對岸稱即時作業系統)可彈性換替, 可用ARM官方提供的, 也可替換成協力業者提供的, 只要合乎CMSIS- RTOS規範即可平順換替. ARM官方提供的稱為RTX, 是ARM購併Keil後取得的.
其他軟體部份則視需求採行, 針對除錯需求而有CMSIS-SVD(System View Description), CMSIS-DAP(Debug Access Port). 或針對數位訊號處理運算需求而提出CMSIS-DSP(Digital Signal Processing), 以及針對神經網路運算需求而提出CMSIS-NN(Neural Network).
mbed進一步簡化軟體開發
ARM提出CMSIS後已達到提倡軟體規範的目標, 但CMSIS的架構設計依然是以專業軟體程式開發者而著眼, 而微控制器的軟體開發, 早在2005年Arduino提出後, 便積極朝平民簡易路線發展, 使微控制器的軟體開發者人數增加, 年齡層下降, 甚至也對創客(Maker)風潮帶來推助力量. 有鑒於此, ARM以CMSIS標準為基礎進行更多的包裝簡化工程, 提出mbed軟體標準.
mbed確實在開發上提出更多簡便法, 過去微控制器的軟體工程師必須自行安裝開發環境軟體, 但mbed改成網頁型開發環境(圖2), 只要申請免費帳號密碼, 透過網頁登入, 便可進行程式開發(編譯器位在雲端, 為ARMCC C/C++編譯器).
當程式撰寫, 編譯完成後, 也不需要透過層層選單選項, 才能將程式上傳(Upload)到開發板上, 開發板透過USB埠接上PC, 在PC端被視為一個可插拔的USB隨身碟, 只要將編譯好的檔案拖拉放到隨身碟內, 即完成上傳動作, 輕鬆直覺.
mbed發展路線改變
2009年mbed提出, 曆經1.0, 2.0發展後, 到了2013年, 2014年間, 由於Intel, TSMC等全球半導體大廠相繼倡議物聯網(Internet of Things, IoT)的新市場概念, ARM也積極爭取市場機會而展開技術布局. 例如2013年購併芬蘭通訊協定軟體業者Sensinode Oy, 2014年購併SSL, TLS協定軟體業者PolarSSL, 2015年購併以色列硬體加密電路設計商Sansa Security, 購併藍芽協定與型態軟體業者Wicentric, 購併物聯網加密軟體業者Offspark等.
在2013年開啟的半導體業者購併風潮中, ARM自身也由軟體銀行(SoftBank)所購併, 諸多觀察家談論軟銀為何購併ARM? 其著眼可能在於5G, 車聯網(V2X)等, 但物聯網也多在討論範圍中.
ARM購併諸多物聯網技術業者後, 將取得的軟體移植至mbed中, 例如收購PolarSSL後改稱Mbed TLS, 並將mbed技術範疇擴大, 區分成用於感測器節點端的mbed OS, 以及閘道器端的mbed Device Server, 同時也將mbed版本自2.0推進至3.0, 另也推展裝置端的資訊安全防護技術mbed µVisor(圖3).
mbed路線統整回歸
由於mbed引入大量物聯網相關技術, 無法全然沿襲相容原有的2.0版, 新的3.0版成為一個分岔(fork), 即分支性的另立發展, 但此發展也造成過往mbed開發者的抱怨. 因此2016年ARM提出mbed 5.0版, 試圖統整過去的分歧發展. mbed 5.0提出後, 版本數字上明顯跳略過4.0, 此主要是期望在於「5.0是2.0, 3.0的統合版」, 即2+3=5.
雖為統合版, 但mbed 5.0主要承襲原有2.0, 過往2.0時代的函式庫幾乎都可相容沿用, 但不容於3.0版, 過去3.0版的物聯網功能在5.0版上重新詮釋, 3.0版被視為整體發展上的短暫過渡, 主線在於2.0到5.0的演化(圖4).
此外, ARM也進一步擴張mbed發展範疇, 由於物聯網應用多要上感測測數值至雲端, 過去ARM曾在2015年提出mbed Client與mbed Device Connector, 做為mbed裝置連上雲端的技術方案, 但很快ARM在2016年11月推出mbed Cloud取代了mbed Client與mbed Device Connector, 成為新的雲端支援技術; 2017年ARM也強化感測現場在地端的技術, 提出mbed Edge, 強化物聯網閘道器對節點的管理能力.
以mbed為基礎Micro:bit趁勢興起
mbed已是朝親民路線發展的軟體開發模式, 環境, 但控制開發不僅吹平民風, 進一步還吹出學童風, 教育界開始倡議STEM/STEAM(Science, Technology, Engineering, Art, and Mathematics)學習, 因而有方塊, 積木式的映像開發環境出現, 例如Arduino領域有S4A(Scratch for Arduino), Google也提出Blockly等.
因此也有業者以mbed技術為基礎, 發展出名為Micro:bit的學童教育系統電路板(圖5). Micro:bit使用與mbed相同的網頁型開發環境, 不需要在PC端安裝任何軟體即可進行開發, 但開發方式從C/C++的文字數字式的撰寫式開發, 變成積木方塊式的拼湊式開發, 上傳程式方式也與mbed相同. Micro:bit設定的推行對象為11, 12歲學童(圖6).
Micro:bit很快成為學校教材, 許多政府已購置大量Micro:bit電路板而捐贈給學校, 如英國, 新加坡, 馬來西亞等, 並已推展至20多國, 且獲得Microsoft, ARM等科技大廠的支援.
更多配套開發工具強化mbed易用性
前面已述, mbed只需要帳密登入即可使用網頁版開發環境與工具, 但mbed並沒有限定僅能使用網頁版環境進行程式開發, mbed還有許多配套開發工具. 例如mbed也提供PC端的編譯, 例如以傳統命令列介面操作的mbed CLI(Command Line Interface); 程式測試方面有mbed Greentea(Generic Regression Environment for Test Automation, 縮寫成綠茶); 除錯方面有除錯用函式庫mbed pyOCD, 除錯用韌體mbed DAPLink.
或者也可用專業的程式開發工具, 例如Keil公司(2005年由ARM收購)的µVision, IAR公司的Workbench, 開放原始程式碼GCC(GNU Compiler Collection)的makefile程序等; 在程式碼的分散式版本控制系統(Distributed Version Control System, DVCS)上, 也支援git, GitHub, mercurial, GitLab, mbed也有自己的mbed.org/code等.
mbed生態系統日益健全
在進行更深廣的布局後, mbed生態系統更健全提升, 已在網頁上開設帳號註冊的開發者超過20萬個, 社群網頁累積不重複的瀏覽人數超過200萬個, 有10多家晶片商, 20多家板卡商, 累計推出130片以上的mbed系統開發板, 並有諸多的周邊支援零件, 包含30種致動器, 61種通訊功能裝置, 92種顯示器, 59種擴充卡, 27種物聯網模組, 187種感測器, 17種機器人模組, 15種儲存裝置, 甚至有8種線上支援服務, 如推特(Twitter), IFTTT(If This Then That)等(圖7) .
mbed概念引來追隨/競爭者
mbed的發展結合了親和化, 創客文化, 物聯網概念市場等多種元素後, 似有一統嵌入式作業系統的態勢, 但其實mbed仍有其相近競爭標準, 並非是唯一選擇.
一是以親和開發起家的Arduino, Arduino自2005年以來一直是以8位元AVR架構微控制器為主, 但近年來開始嘗試升級發展, 如2014年推出Arduino Zero開發板, 使用的晶片改采Cortex-M0+核心, 或推出Arduino Due開發板, 開發板上的主控晶片采Cortex-M3核心.
二是英特爾在2013年以x86架構推出超微小的夸克(Quark)嵌入式處理器後, Intel旗下的Wind River也於2015年11月提出針對物聯網應用的即時作業系統Rocket, 2016年2月轉交給Linux基金會發展, 並改名Zephyr(和風), 並獲得Intel, NXP, Nordic等晶片商的支援.
三是華為提出的LiteOS, 宣稱10KB RAM記憶體即可執行, 並已獲得意法(ST), 愛特梅爾(Atmel), 恩智浦(NXP), 芯科(Silicon Labs)等歐美晶片商支援, 大陸晶片商如北京兆易創新, 上海靈動微電子, 以及華為旗下的海思半導體等也都支援.
四是亞馬遜(Amazon)僱用了FreeRTOS的創始軟體工程師, 而後推出自有版本的Amazon FreeRTOS, 成為Amazon整體端緣運算(Edge Computing)技術策略的一環.
上述四種OS均為mbed的潛在競爭標準, 需求的硬體資源也多屬同一量級, 多在16KB~64KB RAM記憶體便可運作. 至於其他知名的嵌入式作業系統, 如OpenWrt或Google提出的Android Things, 均屬8MB~ 64MB量級, 與mbed不屬於同一層次, 高低互補關係多過重疊競爭.
而在三種與mbed競逐的軟體標準中, Arduino的發展並不順利, 原有在8位元AVR架構下執行的軟體移植到32位元Cortex-M架構後, 仍有許多臭蟲(Bug)未除, 且多數創客仍鐘意原有8位元系統, 僅少數轉移使用32位元.
Zephyr方面, 由於英特爾在2017年停止嵌入式Atom, Quark處理器的相關發展, Zephyr頓失最大的支援呼應晶片, 氣勢大減, 有待新支援或新方向.
因此, mbed的主要競爭者估為Amazon FreeRTOS, 一是Amazon未支援FreeRTOS前, FreeRTOS即已發展使用10餘年, 二是獲得Amazon大廠的加持, 包含Amazon官方雲端服務(Amazon Web Services, AWS)的支援與Amazon官方硬體產品(Fire系列, Dash系列)的支援. Amazon既是全球最大的公有雲(Public Cloud)營運商, 在Amazon硬體產品也講究薄利多銷, 且不吝於開放或授權技術, 如Alexa語音辨識技術正廣泛運用到非Amazon官方的硬體產品上, 此均有助於推展Amazon FreeRTOS.
不過Amazon FreeRTOS仍須強化親和開發性, 且因為Amazon至2017年11月才宣布支援, 官方認可的開發板僅4片, 但如前所述mbed已達130片, mbed尚具若干優勢.
另外mbed也可能要與其他嵌入式作業系統競爭, 例如同屬輕量性的µC/OS-II, embOS, 這些作業系統已存在一段時間, 若比照FreeRTOS模式, 獲得某些國際技術大廠的支援, 發展則可能立即改觀. 或其他因應物聯網概念興起的新嵌入式作業系統專案, 如愛爾蘭公司提出的Mongoose OS, 或也是長期存在但開始轉聚焦物聯網的嵌入式作業系統, 如Contiki.
最後, mbed後續發展也可能不如預期, 如同Linaro的初衷已由Android代行, 但即便如此ARM自身原有的電路授權業務並沒有損失, 只是由他人主導其軟體生態系統, 如同英特爾主導x86晶片, 但也未主導x86軟體生態系統, 而是Microsoft公司, Linux社群所主導.