首頁 > 評(píng)測(cè) > 老兵傳奇-8bit MCU和EFM8BB1LCK開發(fā)板評(píng)測(cè)
老兵傳奇-8bit MCU和EFM8BB1LCK開發(fā)板評(píng)測(cè)
- [導(dǎo)讀]
- 老兵傳奇-8bit MCU和EFM8BB1LCK開發(fā)板評(píng)測(cè)板子圖 板子前視圖拿到這個(gè)板子, 可以說沒有什么驚奇.這個(gè)板子從外觀還是功能講, 在筆者最近用過的板子中可以說非常普通. 不過評(píng)價(jià)一個(gè)板子并不能僅僅從外貌出發(fā)吧, 借著這
板子
圖 板子前視圖
拿到這個(gè)板子, 可以說沒有什么驚奇.這個(gè)板子從外觀還是功能講, 在筆者最近用過的板子中可以說非常普通. 不過評(píng)價(jià)一個(gè)板子并不能僅僅從外貌出發(fā)吧, 借著這次評(píng)測(cè)機(jī)會(huì), 想跟大家聊聊嵌入式處理器的一些個(gè)人看法.
近年來,隨著工藝與IP的逐漸成熟, 32bit的MCU增長迅速, 風(fēng)頭之勁乃至于16bit的MCU基本上被跳過了. 現(xiàn)在說嵌入式MCU, 要么就是8bit, 要么就是32bit, 16bit的MCU產(chǎn)品型號(hào)屈指可數(shù):
1. Intel公司曾經(jīng)想在8051上逐漸升級(jí)的80251, 現(xiàn)在市場上基本見不到蹤影. 細(xì)心的程序員可能還會(huì)注意到Keil現(xiàn)在還有C251的開發(fā)工具出售. 某些過時(shí)的大學(xué)教材中也有過80251的痕跡. 但是至少在中國市場上, 80251沒有存在感.
2. TI的MSP430, 主打低功耗, 隨著其他廠商也在低功耗上下功夫, MSP430的低功耗特性也不再是獨(dú)門絕技.在市場上的份額也是逐漸萎縮.
3. 還是TI的一些16bit的DSP, 主要是定點(diǎn)DSP. 在電機(jī)控制領(lǐng)域還有一些份額. 主要是廠商在垂直領(lǐng)域做了很多優(yōu)化.從產(chǎn)品本身來講, 這種非主流的DSP必要性也在慢慢降低.
4. Microchip的dsp24系列, 跟TI的16bit定點(diǎn)DSP情形相似.
5. 英飛凌的C166系列, 主打汽車市場. 也是著重于存量市場.
6. 凌陽的一個(gè)16bit系列, 主打簡單語音處理應(yīng)用. 上大學(xué)我還學(xué)過一陣子, 但是現(xiàn)在連型號(hào)也不記得了.
當(dāng)然還有一些專攻垂直領(lǐng)域的產(chǎn)品, 這里不多說了.
可以看出的是16bit的MCU并沒有像人們?cè)?jīng)想象的那樣, 替代8bit的市場份額, 在市場上唱主角若干年后再被32bit的MCU取代. 現(xiàn)代嵌入式處理器市場的現(xiàn)實(shí)是: 簡單的任務(wù)還是基本上使用8bit的內(nèi)核, 有一定復(fù)雜性的應(yīng)用就會(huì)使用32bit的MCU. 16bit的MCU處理能力不及32bit, 成本功耗上不及8bit, 所以市場份額一直沒有起來.
那么8bit的MCU的情形又如何, 很多嵌入式工程師都有一些誤解. 下面來簡單分析下.
點(diǎn)擊上圖立即免費(fèi)申請(qǐng)30塊EFM8 BUSY BEE開發(fā)板,前100位還有好禮相送!
關(guān)于8 bit的誤解
8位處理器正在被淘汰
這是最常見的誤解, 先說事實(shí): 根據(jù)最新的Gartner的市場報(bào)告. 8bit的市場營收額和增長額跟32bit的相比都僅僅差幾個(gè)百分點(diǎn). 考慮到8bit的單個(gè)芯片比32bit芯片要便宜很多的事實(shí), 8bit的出貨量其實(shí)遠(yuǎn)高于32bit的.
打個(gè)直觀的比方, 現(xiàn)在我們有了高鐵, 是不是所有傳統(tǒng)的普快,特快火車都要立即淘汰呢. 顯然事實(shí)并非如此, 至于原因就太多了.現(xiàn)實(shí)情況就是8bit的MCU曾經(jīng)的應(yīng)用領(lǐng)域并不能立即用32bit的MCU直接替代.
8位處理器缺乏創(chuàng)新
不少人會(huì)認(rèn)為既然現(xiàn)在市場的寵兒是32bit的MCU, 廠商們是不是都沒有投入研發(fā)資源在8bit產(chǎn)品上了. 這么想的人可能一想到8bit的MCU, 腦海中會(huì)浮現(xiàn)40DIP的”經(jīng)典8051”的形象.
事實(shí)上芯片廠商們并沒有停止創(chuàng)新, Silicon labs這樣的廠商同時(shí)有32bit與8bit的產(chǎn)品. 但是在8bit產(chǎn)品線上的創(chuàng)新一直沒有停止. 比如CIP-51內(nèi)核因?yàn)椴捎昧艘粋(gè)時(shí)鐘周期等同于一個(gè)指令周期的設(shè)計(jì), 瞬間將同頻率的8051性能提高了12倍. 國內(nèi)的一些半導(dǎo)體廠商也有基于8051或其他8bit內(nèi)核的創(chuàng)新.
8位處理器難以使用C/C++語言編程
如果你了解Arduino的設(shè)計(jì)原理, 這個(gè)誤解就不攻自破. 當(dāng)然坦白講, 8bit的MCU使用高級(jí)語言編程確實(shí)比32bit的MCU要困難些. 主要障礙就是內(nèi)存地址的不統(tǒng)一. 比如8051內(nèi)核的內(nèi)存地址就分為CODE, data, sfr, idata, xdata. 如果涉及到banking就更復(fù)雜了. 8bit的PIC還有硬件Stack這樣更加”非主流”的設(shè)計(jì). 但是這些障礙都可以通過工具的優(yōu)化來緩解.
8位處理器專為簡單應(yīng)用而生
這個(gè)觀點(diǎn)倒是有幾分真實(shí), 但是嵌入式應(yīng)用本身就是簡單應(yīng)用居多. 嵌入式系統(tǒng)應(yīng)用的本身特點(diǎn)決定了8bit依然有很多用武之地. 外設(shè), 編譯器的進(jìn)化將慢慢拓展8bit處理器的應(yīng)用范疇.
8位處理器不能勝任IoT應(yīng)用需求
IoT應(yīng)用不是一個(gè)單獨(dú)的應(yīng)用, 而是一個(gè)復(fù)合應(yīng)用. 智能手表, 智能音箱, 主控制器, 網(wǎng)關(guān)這種當(dāng)然需要復(fù)雜的處理器來實(shí)現(xiàn). 但是IoT應(yīng)用還包含大量的傳感器節(jié)點(diǎn), 執(zhí)行節(jié)點(diǎn), 轉(zhuǎn)換節(jié)點(diǎn). 這種節(jié)點(diǎn)用低功耗的8bit處理器來實(shí)現(xiàn)更加適合.
8位處理器響應(yīng)慢
這個(gè)就是完全的誤解了, 典型的嵌入式應(yīng)用中, 響應(yīng)速度主要跟中斷響應(yīng)和喚醒延遲相關(guān). 8bit處理器有天然的優(yōu)勢(shì)(地址轉(zhuǎn)換工作量小, IP單元實(shí)現(xiàn)門數(shù)少). 至少不輸于32bit的處理器.
8位處理器的能效低于32位處理器
曾經(jīng)看過ARM公司的權(quán)威工程師寫的一本書, 書中觀點(diǎn)是32bit處理器的能效比高于8bit的MCU. 理由是32bit處理器能快速處理完任務(wù), 休眠時(shí)間的比例更大. 但是這個(gè)結(jié)論包含一個(gè)假設(shè), 就是任務(wù)有一定復(fù)雜度, 如果任務(wù)本身非常簡單, 喚醒過程的功耗也很大, 那么這個(gè)假設(shè)不成立. 針對(duì)不同應(yīng)用場景, 不能簡單說8bit, 32bit哪個(gè)能效比更高. 至少非常簡單的應(yīng)用中, 8bit的能效比要高. 如果再加上單獨(dú)響應(yīng),無需CPU干預(yù)的一些任務(wù), 8bit的能效比甚至能高出很多.
相同價(jià)格的32位處理器功能遠(yuǎn)強(qiáng)于8位處理器
這個(gè)也有一定程度的可信度. 但是不要忘記有相當(dāng)大的一部分的應(yīng)用, 使用8bit的MCU就足夠的情況下, 非要購買平均價(jià)格高一點(diǎn)的32bit MCU, 成本是會(huì)上升的. 很多基本上標(biāo)準(zhǔn)化了的嵌入式產(chǎn)品有很大的量, 就會(huì)發(fā)現(xiàn)8bit的成本優(yōu)勢(shì)還是會(huì)高一點(diǎn)的.
8位處理器設(shè)計(jì)的應(yīng)用不能適應(yīng)未來變化
這是個(gè)思維角度問題, 作為嵌入式程序員, 更應(yīng)該是考慮當(dāng)前的任務(wù). 不管是什么類型的MCU, 如果產(chǎn)品形態(tài)變化了或者需求本身變化了,就要重新設(shè)計(jì). 未來誰都看不清, 何必考慮那么多沒有實(shí)際意義的前瞻.
8位處理器開發(fā)工作更繁重
32bit處理器的處理更加以軟件中心, 可以做更多的代碼復(fù)用. 8bit處理器更多地利用硬件外設(shè)來完成任務(wù). 綜合而言, 沒有絕對(duì)的差別.
8位處理器沒有升級(jí)路徑
只要是嵌入式處理器, 升級(jí)路徑都不大明確. 如果你采用既有8bit, 又有32bit的產(chǎn)品的廠家, 你會(huì)發(fā)現(xiàn)很多外設(shè)都很相似. 考慮到現(xiàn)在圖形化配置外設(shè)的趨勢(shì), 升級(jí)路徑逐漸變得不那么重要, 反正都是圖形化或者腳本化來生成基礎(chǔ)驅(qū)動(dòng)代碼.
EFM8BB1芯片
圖 芯片功能框圖
圖 芯片結(jié)構(gòu)框圖
芯片亮點(diǎn):
1. 內(nèi)核是8051世界中的明星:CIP-51. EFM8BB系列中這個(gè)內(nèi)核最高25MHz,相當(dāng)于經(jīng)典8051跑在300MHz. 使用內(nèi)部時(shí)鐘可以跑在24.5MHz, 相當(dāng)于經(jīng)典8051跑在294MHz.
2. 內(nèi)部低速時(shí)鐘,80KHz與24.5MHz的內(nèi)部高速時(shí)鐘互為補(bǔ)充, 方便低功耗設(shè)計(jì).
3. 16-bit CRC硬件計(jì)算單元
4. AEC-Q100認(rèn)證, 套用一句廣告語:“不是所有的MCU都能過AEC-Q100認(rèn)證”. 通過這個(gè)認(rèn)證表示可以使用在汽車級(jí)別的惡劣環(huán)境.
5. 其余特點(diǎn)不用單獨(dú)拿出來講, 但是很多人會(huì)忽視的一個(gè)亮點(diǎn)就是Silicon Labs的圖形配置開發(fā)工具界面, 能大大節(jié)省開發(fā)時(shí)間.
軟件開發(fā)-Simplicity Studio+圖形化配置
關(guān)于圖形化配置式開發(fā)
顧名思義, 所謂的圖形化配置就是通過GUI方式來配置外設(shè), 生成代碼. 這一點(diǎn)很重要, 因?yàn)楝F(xiàn)代MCU的外設(shè)越來越多, 越來越復(fù)雜, 涉及到的初始化配置非常繁瑣, 容易出錯(cuò), 已經(jīng)不適合工程師慢慢查閱動(dòng)輒幾百,幾千頁的參考手冊(cè)來手動(dòng)書寫寄存器讀寫代碼. 除了外設(shè)配置之外, 還有IO分配, 純軟件組件的配置,時(shí)鐘樹的配置, 這些重復(fù)機(jī)械的工作以前都是工程師手工完成的. 目前市場上領(lǐng)先的MCU廠家都有自己的圖形化配置工具, 可以說圖形化配置工具+優(yōu)化過的編譯鏈接工具鏈+圖形化的調(diào)試工具是現(xiàn)代嵌入式開發(fā)的必不可少的三項(xiàng)標(biāo)配. 筆者印象中,Silicon Labs公司是最早推出圖形化配置工具的MCU廠家之一. 當(dāng)然最初的工具只能配置Cross Bar, 解決IO口分配問題. 經(jīng)過多年進(jìn)化, Simplicity Studio內(nèi)置的配置工具現(xiàn)在已經(jīng)非常完善了, 很多功能筆者現(xiàn)在也還沒有用到過. 下面以一個(gè)例子來演示一下子圖形化配置的效率.
從頭到尾創(chuàng)建一個(gè)工程
Simplicity Studio的下載安裝這里不贅述了, 后文有參考連接.
第一步, 新建工程, 注意選擇Silicon Labs MCU Project, 相當(dāng)于是一個(gè)模版:
第二步,選擇板子, 芯片, 如果你的板子是自定義的, 只選芯片型號(hào)就可以了:
第三步, 選項(xiàng)目類型, 這里跟之前的新建項(xiàng)目那里是一個(gè)意思:
第四步, 選擇項(xiàng)目名稱, 保存位置:
第五步,選擇工具鏈, 目前這里沒有什么好選的, 就是一個(gè)工具鏈, 當(dāng)然可能以后還會(huì)支持更多的工具鏈:
內(nèi)部配置
現(xiàn)在項(xiàng)目就創(chuàng)建完畢了, 可以開始配置了.
配置狀態(tài)機(jī), 這個(gè)示例項(xiàng)目很簡單, 就是復(fù)位狀態(tài)與工作狀態(tài), 實(shí)際工程中一般還會(huì)有多個(gè)低功耗狀態(tài).
配置IO口, 根據(jù)前面的封裝類型, 全圖形化操作, 需要注意的是Silicon Labs公司產(chǎn)品獨(dú)有的Crossbar概念, Crossbar必須使能IO口配置才會(huì)生效.
外設(shè)配置
下面就是最重要的外設(shè)配置:
首先配置時(shí)鐘使用內(nèi)置的24.5MHz時(shí)鐘源, 這是不使用外部時(shí)鐘源能達(dá)到的最高時(shí)鐘.
這里界面上有點(diǎn)歧義, 如果選了內(nèi)部時(shí)鐘源, EXTCLK其實(shí)沒有意義. 反倒是有意義的24.5MHz被顯示為灰色了.
再配置Timer3為1000Hz重載, 作為計(jì)時(shí)單元.
上面的數(shù)字也表明1000Hz其實(shí)是個(gè)不能精確達(dá)到的頻率, 事實(shí)上是999.836Hz,這個(gè)精度也夠了. 如果需要更精確的時(shí)鐘, 需要計(jì)算各種整數(shù)的分頻比.
再來配置中斷:
到這里配置差不多了, 保存配置文件自動(dòng)生成配置代碼.
進(jìn)度條完了, 項(xiàng)目的代碼框架就完成了, 可以在這個(gè)架子上開始應(yīng)用開發(fā)了. 實(shí)際的測(cè)試工程都在后文有下載連接. 用過這個(gè)配置工具的工程師, 可以比較一下子使用圖形化配置方法生成代碼能給你帶來多少效率提升.至少筆者本人現(xiàn)在選擇MCU時(shí), 只會(huì)選擇有圖形化配置手段的芯片. 當(dāng)然作為嵌入式工程師, 查閱數(shù)據(jù)手冊(cè), 參考手冊(cè)還是必不可少的, 只是大多數(shù)的簡單機(jī)械的工作真的沒有必要去手工操作了.
關(guān)于8051編譯工具鏈
工程師們所熟知的8051的C語言工具鏈:
1. 當(dāng)然就是Keil了,Keil已經(jīng)被ARM收購了, 現(xiàn)在可能更著名的產(chǎn)品是ARM內(nèi)核的開發(fā)工具.但是8051工具鏈還是業(yè)界最著名的8051商業(yè)化開發(fā)工具. Silicon Labs跟ARM/Keil達(dá)成某種合作關(guān)系, 凡是購買這塊開發(fā)板的用戶都可以免費(fèi)使用全功能版本的Keil工具鏈. 這個(gè)工具鏈跟Silicon Lab的Simplicity Studio結(jié)合的很完美. 如何安裝工具, 配置編譯器請(qǐng)看后文的參考連接.
2. IAR. 以優(yōu)化為特點(diǎn).
3. Tasking, ICC這些公司也有8051的編譯工具鏈產(chǎn)品, 本人很少用, 不評(píng)價(jià).
4. 曾經(jīng)有開源的SDCC工具鏈對(duì)8051內(nèi)核支持也很好. 但是這個(gè)工具鏈至少有如下缺點(diǎn).
4.1 沒有商業(yè)化的支持, 很多新型芯片的頭文件沒有及時(shí)更新, 對(duì)工程開發(fā)是個(gè)障礙. 起碼程序員需要自己建立具體型號(hào)的頭文件, 連接配置. 這些工作并沒有什么附加值.
4.2 圖形化配置功能外設(shè), 生成代碼, 配置引腳這些功能沒有商業(yè)化的支持, 不可能做的好.
4.3 對(duì)仿真,調(diào)試支持的不好
4.4 開源產(chǎn)品, 缺乏維護(hù), 生成的代碼正確性, 優(yōu)化效果只能靠程序員自己去慢慢踩坑.
綜上所述, 本人并不看好開源的8051工具鏈. 至于高質(zhì)量的gcc,llvm為什么一直沒有支持8051這樣的內(nèi)核呢. 這是因?yàn)檫@些MCU的內(nèi)存分布并不標(biāo)準(zhǔn), 而且完整的LibC尺寸太大,直接讓gcc,llvm產(chǎn)生可以用于實(shí)際生產(chǎn)環(huán)境的8051可執(zhí)行代碼非常困難. 上述的SDCC工具鏈也是一種特殊的支持8051的GCC版本. 算是開源界對(duì)8051內(nèi)核的一次已經(jīng)被放棄的嘗試.
現(xiàn)在隨著市場形態(tài)的進(jìn)化, 商業(yè)化的工具鏈越來越容易獲取. 比如購買了本開發(fā)板的程序員就可以免費(fèi)得到完全版本的Keil 8051工具鏈, 再加上Simplicity Studio本身具有的圖形化的配置,調(diào)試功能. 現(xiàn)在的8051程序員們可以說非常幸福了.
至于不使用C語言, 直接使用匯編語言設(shè)計(jì)整個(gè)工程的做法, 筆者并不提倡. 程序員最寶貴的就是開發(fā)與調(diào)試時(shí)間, 應(yīng)該抓住重點(diǎn).
跑個(gè)分: CRC16硬件加速
圖 硬件CRC16單元
EFM8BB1的硬件CRC16單元有兩個(gè)功能:
1. 接受軟件指定的字節(jié)流計(jì)算CRC16
2. 自動(dòng)對(duì)Flash內(nèi)容進(jìn)行CRC16計(jì)算.
如果對(duì)功能安全有所了解, 這個(gè)CRC16硬件加速單元可以幫工程師很大的忙. 這里用幾種不同的方法來計(jì)算CRC16, 來跑個(gè)分. 參賽選手(除非另外說明, 編譯器都為Keil, 優(yōu)先級(jí)最高, LibC使用高效率版本, 數(shù)據(jù)模型為small):
1. EFM8BB1上的硬件CRC16計(jì)算單元(運(yùn)行在24.5MHz)
2. EFM8BB1上的軟件實(shí)現(xiàn)的CRC計(jì)算函數(shù)(運(yùn)行在24.5MHz)
3. 另外一款32bit的MCU使用軟件實(shí)現(xiàn)的CRC計(jì)算函數(shù)(Cortex M0, 運(yùn)行在32MHz)
實(shí)際的測(cè)試工程都在后文的下載鏈接中可以找到, 重要測(cè)試代碼, 分別是軟件CRC16與硬件計(jì)算函數(shù):
跑分結(jié)果:
可以看出:
同樣頻率下(24.5MHz), 硬件CRC16單元的效率是軟件CRC16函數(shù)的2.8倍, 跟更高頻率(32MHz)的Cortex M0的軟件實(shí)現(xiàn)版本類似. 而經(jīng)過頻率調(diào)整(即運(yùn)算效率除以運(yùn)行頻率)后, 硬件CRC16單元比Cortex M0的軟件實(shí)現(xiàn)版本的效率更高.
總結(jié)與參考
目前而言, 8位MCU過時(shí)的那一刻還遠(yuǎn)遠(yuǎn)沒有到來. 大多數(shù)復(fù)雜度較低, 可以使用硬件單元加速的嵌入式應(yīng)用選用8位MCU能達(dá)到最佳ROI. 使用先進(jìn)的開發(fā)工具, 配合設(shè)計(jì)合理的外設(shè), 8bit的MCU上的軟件開發(fā)工作也會(huì)非常簡單高效, 如上文所是的硬件CRC16計(jì)算函數(shù)只有幾行. 嵌入式工程師在選型時(shí), 要注意上述演示得出的一些結(jié)論.
官方Silicon Labs的EFM8BB1LCK頁面: https://www.silabs.com/support/getting-started/microcontrollers/efm8-mcu/efm8bb1lck-busy-bee-mcu-low-cost-kit
筆者不是很感冒, 但是很多人希望了解下的開源8051工具鏈SDCC: http://sdcc.sourceforge.net/
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評(píng)論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開發(fā)
預(yù)算:¥1100001天前