隨著智能產(chǎn)品越來越多,應(yīng)用到的MCU數(shù)量也隨之增長(zhǎng),有對(duì)MCU接觸過的朋友都知道,MCU有不同的位數(shù),如
8位MCU、24位MCU、32位MCU,每種MCU的應(yīng)用都有不同領(lǐng)域產(chǎn)品,今天就來聊聊8位和32位的MCU,接下來看看8位MCU和32位MCU如何選擇,先從兩者的功能來區(qū)別。
本文比較了8位MCU和32位MCU 用例,也可用作如何在兩種 MCU 架構(gòu)之間進(jìn)行選擇的指南,本文中的大多數(shù)32位MCU 示例都集中在 ARM Cortex-M 上,它在各種 MCU 供應(yīng)商產(chǎn)品組合中的行為非常相似。8位MCU MCU 架構(gòu)種類繁多,因此很難對(duì)8位MCU供應(yīng)商的產(chǎn)品進(jìn)行類似比較。為了進(jìn)行比較,我們將使用嵌入式開發(fā)人員首選的廣泛使用且易于理解的 8051 架構(gòu)。
8位MCU和32位MCU如何選擇?
事實(shí)上,ARM Cortex 和 8051 哪個(gè)更好,并不是像“吉他或鋼琴哪個(gè)更好?”這樣的邏輯問題,真正要解決的問題是哪種MCU能夠幫助我們更好地解決今天面臨的問題,不同的任務(wù)需要不同的工具,我們的目標(biāo)是了解“如何更好地使用我們擁有的工具”,包括8位MCU和32位MCU,那些簡(jiǎn)單地說“ARM 更好”或“8051 更好”的人幾乎肯定是在以自己的方式思考并試圖銷售產(chǎn)品。
要比較不同的設(shè)備,您需要測(cè)量它們,有許多構(gòu)建工具可供選擇,已嘗試進(jìn)行公平的比較,并選擇我們認(rèn)為能代表真實(shí)開發(fā)人員體驗(yàn)的場(chǎng)景。
并非所有 MCU 都是一樣的
在我們開始比較架構(gòu)之前,請(qǐng)務(wù)必注意并非所有制造的 MCU 都是一樣的。將基于 ARM CortexM0+ 處理器的現(xiàn)代 MCU 與已有 30 年歷史的 8051 MCU 進(jìn)行比較,8051 MCU 根本很難超越性能比較,幸運(yùn)的是,仍有許多供應(yīng)商繼續(xù)投資于8位MCU處理器。對(duì)于很多應(yīng)用來說,8位MCU內(nèi)核可以彌補(bǔ) M0+ 或 M3 內(nèi)核的不足,并且在某些方面表現(xiàn)更好。
開發(fā)工具也很重要,現(xiàn)代嵌入式固件開發(fā)包括功能完整的 IDE、現(xiàn)成的固件庫、大量示例、完整的評(píng)估和入門套件,以及用于簡(jiǎn)化硬件設(shè)置、庫管理和生產(chǎn)編程等任務(wù)的工具。需要幫助應(yīng)用程序。如果 MCU 具有現(xiàn)代8位MCU內(nèi)核和開發(fā)環(huán)境,則此類 MCU 的性能通常優(yōu)于類似的基于 ARM Cortex 的 MCU。
系統(tǒng)規(guī)模
作為一般原則,ARM CortexM 內(nèi)核適用于較大的系統(tǒng)規(guī)模,而 8051 器件適用于較小的系統(tǒng)規(guī)模。中型系統(tǒng)有兩種方法可供選擇,具體取決于系統(tǒng)執(zhí)行的任務(wù)。請(qǐng)注意,在大多數(shù)情況下,外圍設(shè)備的組合起著重要作用。如果您需要 3 個(gè) UART、1 個(gè) LCD 控制器、4 個(gè)時(shí)鐘和 2 個(gè) ADC,則并非所有這些外設(shè)都在8位MCU MCU 上。
易用性與成本和尺寸
對(duì)于中型系統(tǒng),您可以使用任一架構(gòu)來完成工作。權(quán)衡是在 ARM 內(nèi)核提供的易用性和 8051 設(shè)備提供的成本和物理尺寸優(yōu)勢(shì)之間做出選擇。ARM Cortex-M 架構(gòu)在所有流行的編譯器中具有集成的內(nèi)存映射模式和完整的 C99 支持,使得這種架構(gòu)非常容易編寫固件。此外,還提供各種庫和第三方代碼。當(dāng)然,這種易用性的代價(jià)是成本。對(duì)于上市時(shí)間短的復(fù)雜應(yīng)用程序和缺乏經(jīng)驗(yàn)的固件開發(fā)人員來說,易用性是一個(gè)關(guān)鍵因素。
盡管8位MCU組件比32位組件具有成本優(yōu)勢(shì),但真正的區(qū)別在于成本等級(jí)。具有 2 KB/512 B(閃存/RAM)的小型8位MCU設(shè)備很常見,但小于 8 KB/2 KB 的32位設(shè)備很少見。對(duì)于不需要很多資源的系統(tǒng),這種存儲(chǔ)容量范圍允許系統(tǒng)開發(fā)人員實(shí)現(xiàn)成本顯著降低的解決方案。因此,對(duì)成本非常敏感或內(nèi)存要求低的應(yīng)用程序傾向于選擇 8051 解決方案。
一般來說,8位MCU設(shè)備在物理尺寸方面也有優(yōu)勢(shì)。例如,一些MCU的32位QFN封裝為4mm x 4mm,而基于8051的8位MCU器件的QFN封裝可以小到2mm x 2mm。芯片級(jí)封裝 (CSP) 中的8位MCU和32位架構(gòu)之間的差異并不大,但成本更高且更難組裝??臻g受限的應(yīng)用通常需要選擇 8051 MCU 來滿足這些限制。
通用代碼和 RAM 效率
8051 MCU 成本低的主要原因之一是它們通常比 ARM Cortex-M 內(nèi)核更有效地使用閃存和 RAM。更少的資源。系統(tǒng)越大,這種影響越小。
然而,8位MCU內(nèi)存資源的這種優(yōu)勢(shì)可能并不總是適用。在某些情況下,ARM 內(nèi)核的效率與 8051 內(nèi)核一樣,甚至更高。例如,32 位操作只需要一條 ARM 設(shè)備指令,而 8051 MCU 則需要多條8位MCU指令。顯然,這段代碼在 ARM 架構(gòu)上運(yùn)行效率更高。
用于小型閃存/RAM 的 ARM 架構(gòu)的兩個(gè)主要缺點(diǎn)是代碼空間效率和 RAM 使用的可預(yù)估性。首個(gè)也是很明顯的問題是一般的代碼空間效率。8051 內(nèi)核使用 1 位、2 位或 3 位指令,而 ARM 內(nèi)核使用 2 位或 4 位指令。8051 指令通常更小,但它們實(shí)際上需要更多時(shí)間,因此這種優(yōu)勢(shì)減弱了。與 8051 相比,ARM 內(nèi)核每條指令可以完成更多工作,32位算術(shù)就是一個(gè)例子,實(shí)際上,指令寬度使得 8051 產(chǎn)生相當(dāng)密集的代碼。
代碼空間效率
在具有分布式訪問變量的系統(tǒng)中,ARM 體系結(jié)構(gòu)的加載/存儲(chǔ)體系結(jié)構(gòu)通常比指令寬度更重要??紤]一個(gè)信號(hào)量實(shí)現(xiàn),它需要在代碼的不同位置遞減(賦值)或遞增(解除分配)一個(gè)變量。ARM 內(nèi)核需要將變量加載到寄存器中,對(duì)其進(jìn)行操作并將其存儲(chǔ)回去,這需要三個(gè)指令。另一方面,8051 內(nèi)核可以只用一條指令直接操作內(nèi)存位置。隨著對(duì)變量所做的工作量每次都增加,加載/存儲(chǔ)開銷變得微不足道。但是如果一次要完成的工作較少,加載/存儲(chǔ)會(huì)產(chǎn)生很大的不同,8051 具有明顯的效率優(yōu)勢(shì)。
信號(hào)量在嵌入式軟件中并不常見,但簡(jiǎn)單的計(jì)數(shù)器和標(biāo)志信號(hào)量廣泛用于面向控制的應(yīng)用程序中,并且具有相同的目的,常見的 MCU 代碼屬于這種類型。
另一個(gè)原因是 ARM 處理器比 8051 內(nèi)核有更多的空閑堆??臻g。8051 設(shè)備通常只在堆棧中為每個(gè)函數(shù)調(diào)用存儲(chǔ)返回地址(2 位),并且通常通過分配在堆棧上的靜態(tài)變量來完成大部分工作。
在某些情況下,默認(rèn)情況下函數(shù)是不可重入的,這可能會(huì)導(dǎo)致問題。但是,這也意味著需要預(yù)留的??臻g很小,完全可以預(yù)估,這對(duì)于 RAM 有限的 MCU 很重要。
不同的任務(wù)需要不同的工具。我們的目標(biāo)是了解如何充分利用我們擁有的工具,包括8位MCU和32位MCU。
架構(gòu)細(xì)節(jié)
現(xiàn)在讓我們談?wù)劵緢?chǎng)景。假設(shè)您有基于 ARM 和 8051 的 MCU 以及必要的外圍設(shè)備,ARM 設(shè)備非常適合大型系統(tǒng)或以易用性為優(yōu)先考慮的應(yīng)用程序。如果低成本/小尺寸是看重的問題,那么 8051 器件是一個(gè)不錯(cuò)的選擇,下面我們對(duì)每個(gè)架構(gòu)所擅長(zhǎng)的應(yīng)用進(jìn)行更詳細(xì)的分析,并分離出一般原理。
(1) 延遲
兩種架構(gòu)在中斷和函數(shù)調(diào)用延遲方面存在很大差異,8051 比 ARM Cortex-M 內(nèi)核更快。此外,具有好的外圍總線 (APB) 的外圍設(shè)備也會(huì)影響延遲。這是因?yàn)閿?shù)據(jù)需要通過 APB 和 AMBA 高性能總線 (AHB) 發(fā)送。后續(xù),許多基于 Cortex-M 的 MCU 在使用高頻內(nèi)核時(shí)鐘時(shí)需要 APB 時(shí)鐘分配,這也會(huì)增加外設(shè)延遲。
做了一個(gè)簡(jiǎn)單的實(shí)驗(yàn),實(shí)驗(yàn)中斷由 I/O 引腳觸發(fā),此中斷將向引腳發(fā)送信號(hào)并根據(jù)引起中斷的引腳更新標(biāo)志,然后我測(cè)量了一些指示32位實(shí)現(xiàn)的參數(shù)。
簡(jiǎn)而言之,實(shí)驗(yàn)結(jié)果表明 8051 內(nèi)核在進(jìn)入和退出中斷服務(wù)程序 (ISR) 方面具有優(yōu)勢(shì)。然而,隨著中斷服務(wù)例程 (ISR) 變得更大并且執(zhí)行時(shí)間更長(zhǎng),這些延遲變得微不足道。按照既定原則,系統(tǒng)越大,8051的優(yōu)勢(shì)就越小。此外,如果中斷服務(wù)例程 (ISR) 包含大量數(shù)據(jù)傳輸或大于8位MCU的整數(shù)數(shù)據(jù)操作,則執(zhí)行時(shí)間優(yōu)勢(shì)為中斷服務(wù)例程 (ISR) 遷移到 ARM 內(nèi)核。例如,使用新樣本更新 16 位或32位移動(dòng)平均值的 ADC ISR 可能在 ARM 設(shè)備上運(yùn)行得更快。
(2) 控制與處理
8051 內(nèi)核的基本功能是控制代碼,可以分布式訪問變量并使用大量控制邏輯(if、case 等)。8051 內(nèi)核在處理8位MCU數(shù)據(jù)方面也非常有效,而 ARM Cortex-M 內(nèi)核則擅長(zhǎng)數(shù)據(jù)處理和32位運(yùn)算。此外,32 位數(shù)據(jù)通道允許 ARM MCU 一次移動(dòng) 4 個(gè)字節(jié),而 8051 一次只能移動(dòng) 1 個(gè)字節(jié),從而可以更有效地復(fù)制大數(shù)據(jù)包。因此,主要通過將數(shù)據(jù)從一個(gè)地方移動(dòng)到另一個(gè)地方(例如 UART 到 CRC 或 US B)來進(jìn)行流式數(shù)據(jù)處理的應(yīng)用程序更適合基于 ARM 處理器的系統(tǒng)。
這并不意味著您不應(yīng)該運(yùn)行在 8051 內(nèi)核上執(zhí)行大量數(shù)據(jù)移動(dòng)或32位數(shù)學(xué)會(huì)運(yùn)算的應(yīng)用程序,在許多情況下,其他考慮因素超過了 ARM 內(nèi)核的效率優(yōu)勢(shì),或者這些優(yōu)勢(shì)變得無關(guān)緊要,考慮使用 UART 轉(zhuǎn) SPI 橋。應(yīng)用程序大部分時(shí)間都在外圍設(shè)備之間復(fù)制數(shù)據(jù),這是 ARM 內(nèi)核更有效地執(zhí)行的任務(wù)。
然而,這也是一個(gè)非常小的應(yīng)用程序,可能小到可以安裝在只有 2 KB 內(nèi)存的設(shè)備上。8051 內(nèi)核效率較低,但具有足夠的處理能力來處理此應(yīng)用中的高數(shù)據(jù)速率。對(duì)于 ARM 設(shè)備,可用的額外周期是在空閑循環(huán)或“WFI”(Wait for Interrupt)中,等待下一個(gè)可用數(shù)據(jù)到達(dá)。在這種情況下,8051 內(nèi)核是合適的,因?yàn)轭~外的 CPU 周期并不重要,而且較小的閃存封裝可以節(jié)省資金。如果額外的周期用于做有意義的工作,那么額外的效率就非常重要,并且提高的效率可以使 ARM 內(nèi)核受益。
(3)指針
8051 設(shè)備不像 ARM 設(shè)備那樣有統(tǒng)一的內(nèi)存映射,但它們對(duì)訪問代碼(閃存)、IDATA(內(nèi)部 RAM)和 XDATA(外部 RAM)有不同的指令。為了生成好的代碼,指向 8051 代碼的指針指示它指向的空間。然而,在某些情況下,可以使用泛型指針指向任意空間,但這種類型的指針訪問效率低下。例如,將指針指向緩沖區(qū)并將數(shù)據(jù)從該緩沖區(qū)輸出到 UART 的函數(shù)。如果指針是 XDATA 指針,XDATA 數(shù)組可以發(fā)送到 UART,但需要先將代碼空間中的數(shù)組復(fù)制到 XDATA。通用指針可以指向代碼和 XDATA 空間,但它們速度較慢并且需要更多代碼才能訪問。
特定于領(lǐng)域的指示符在大多數(shù)情況下很有用,但通用指示符在編寫用途未知的可重用代碼時(shí)非常靈活。如果這在您的應(yīng)用中很常見,則 8051 將失去其效率優(yōu)勢(shì)。
(4) 選擇并完成作品
我多次注意到計(jì)算傾向于選擇 ARM 而控制傾向于選擇 8051,但沒有應(yīng)用程序只專注于計(jì)算或控制。您如何大致描述您的應(yīng)用程序并計(jì)算其良好范圍?假設(shè)考慮一個(gè)應(yīng)用程序,它不能明確地分配給8位MCU或32位類別。
該應(yīng)用程序不需要所有可用的 MIPS,并且需要優(yōu)化成本,因此代碼空間比執(zhí)行速度更重要。成本比應(yīng)用程序的速度更重要這一事實(shí)使 8051 內(nèi)核在一般代碼情況下略有優(yōu)勢(shì)。此外,8051內(nèi)核在控制代碼方面也有一定的優(yōu)勢(shì)。ARM 內(nèi)核主導(dǎo)32位計(jì)算,但許多應(yīng)用程序并未考慮到這一點(diǎn)。考慮到所有這些因素,8051 內(nèi)核是這個(gè)特定應(yīng)用的不錯(cuò)選擇。
假設(shè)應(yīng)用程序更關(guān)心執(zhí)行速度而不是成本,則 ARM 內(nèi)核全面主導(dǎo)計(jì)算代碼,只需進(jìn)行少量更改,通用代碼就不會(huì)被任何架構(gòu)所吸引。在這種情況下,控制代碼多于計(jì)算,但總體結(jié)果相當(dāng)平衡。顯然,這個(gè)過程涉及很多評(píng)估,但是分解應(yīng)用程序并評(píng)估每個(gè)組件的技術(shù)可以揭示哪些架構(gòu)在哪些情況下具有顯著優(yōu)勢(shì)。
功耗
通過查看數(shù)據(jù)表,很容易根據(jù)功耗數(shù)據(jù)得出哪種 MCU 更好,某些類型的 MCU 具有出色的睡眠和活動(dòng)模式電流性能,但這種評(píng)級(jí)非常具有誤導(dǎo)性,占空比(在每種功耗模式下花費(fèi)的時(shí)間)始終主導(dǎo)功耗,除非這兩個(gè)設(shè)備具有相同的占空比,否則數(shù)據(jù)表中的當(dāng)前規(guī)格毫無意義,適合您的應(yīng)用需求的重要架構(gòu)通常具有較低的功耗。
考慮一個(gè)系統(tǒng),該系統(tǒng)在喚醒設(shè)備后將 16 位 ADC 樣本添加到移動(dòng)平均值,然后返回睡眠狀態(tài)并且在獲取下一個(gè)樣本之前不會(huì)再次喚醒。此任務(wù)涉及大量 16 位和32位計(jì)算。ARM 設(shè)備可以比 8051 設(shè)備更快地執(zhí)行計(jì)算和返回睡眠狀態(tài),因此 8051 具有更好的睡眠和活動(dòng)模式電流,但消耗更少的系統(tǒng)功率。當(dāng)然,如果您正在執(zhí)行的任務(wù)更適合 8051 設(shè)備,則出于同樣的原因,MCU 的功耗對(duì)您的系統(tǒng)有利。
8位MCU還是32位?怎么決定呢!
如果即使在考慮了所有這些變量之后,您仍然不確定哪種 MCU 架構(gòu)是很好選擇怎么辦? 也就是說,兩者都是不錯(cuò)的選擇,使用哪種架構(gòu)并不重要。過去的經(jīng)驗(yàn)和個(gè)人喜好即使不是直接的技術(shù)優(yōu)勢(shì),也在決定 MCU 架構(gòu)方面發(fā)揮著重要作用。
此外,您還可以利用這個(gè)機(jī)會(huì)評(píng)估潛在的未來項(xiàng)目,如果您未來的大部分項(xiàng)目更適合ARM設(shè)備,請(qǐng)選擇ARM,如果未來的項(xiàng)目更注重降低成本和尺寸。