6加1体育彩票走势图

首頁 > 評測 > 評測列表 > MCU

老兵傳奇-8bit MCU和EFM8BB1LCK開發板評測

  • 作者:zhanzr
  • 來源:21ic
  • [導讀]
  • 老兵傳奇-8bit MCU和EFM8BB1LCK開發板評測板子圖 板子前視圖拿到這個板子, 可以說沒有什么驚奇.這個板子從外觀還是功能講, 在筆者最近用過的板子中可以說非常普通. 不過評價一個板子并不能僅僅從外貌出發吧, 借著這

 

板子

board_front_xiaomi_1_copy.jpg

圖 板子前視圖

拿到這個板子, 可以說沒有什么驚奇.這個板子從外觀還是功能講, 在筆者最近用過的板子中可以說非常普通. 不過評價一個板子并不能僅僅從外貌出發吧, 借著這次評測機會, 想跟大家聊聊嵌入式處理器的一些個人看法.

近年來,隨著工藝與IP的逐漸成熟, 32bit的MCU增長迅速, 風頭之勁乃至于16bit的MCU基本上被跳過了. 現在說嵌入式MCU, 要么就是8bit, 要么就是32bit, 16bit的MCU產品型號屈指可數:

1. Intel公司曾經想在8051上逐漸升級的80251, 現在市場上基本見不到蹤影. 細心的程序員可能還會注意到Keil現在還有C251的開發工具出售. 某些過時的大學教材中也有過80251的痕跡. 但是至少在中國市場上, 80251沒有存在感.

2. TI的MSP430, 主打低功耗, 隨著其他廠商也在低功耗上下功夫, MSP430的低功耗特性也不再是獨門絕技.在市場上的份額也是逐漸萎縮.

3. 還是TI的一些16bit的DSP, 主要是定點DSP. 在電機控制領域還有一些份額. 主要是廠商在垂直領域做了很多優化.從產品本身來講, 這種非主流的DSP必要性也在慢慢降低.

4. Microchip的dsp24系列, 跟TI的16bit定點DSP情形相似.

5. 英飛凌的C166系列, 主打汽車市場. 也是著重于存量市場.

6. 凌陽的一個16bit系列, 主打簡單語音處理應用. 上大學我還學過一陣子, 但是現在連型號也不記得了.

當然還有一些專攻垂直領域的產品, 這里不多說了.

可以看出的是16bit的MCU并沒有像人們曾經想象的那樣, 替代8bit的市場份額, 在市場上唱主角若干年后再被32bit的MCU取代. 現代嵌入式處理器市場的現實是: 簡單的任務還是基本上使用8bit的內核, 有一定復雜性的應用就會使用32bit的MCU. 16bit的MCU處理能力不及32bit, 成本功耗上不及8bit, 所以市場份額一直沒有起來.

那么8bit的MCU的情形又如何, 很多嵌入式工程師都有一些誤解. 下面來簡單分析下.

TIM圖片20191022135550.png

點擊上圖立即免費申請30塊EFM8 BUSY BEE開發板,前100位還有好禮相送!

關于8 bit的誤解

8位處理器正在被淘汰

這是最常見的誤解, 先說事實: 根據最新的Gartner的市場報告. 8bit的市場營收額和增長額跟32bit的相比都僅僅差幾個百分點. 考慮到8bit的單個芯片比32bit芯片要便宜很多的事實, 8bit的出貨量其實遠高于32bit的.

打個直觀的比方, 現在我們有了高鐵, 是不是所有傳統的普快,特快火車都要立即淘汰呢. 顯然事實并非如此, 至于原因就太多了.現實情況就是8bit的MCU曾經的應用領域并不能立即用32bit的MCU直接替代.

8位處理器缺乏創新

不少人會認為既然現在市場的寵兒是32bit的MCU, 廠商們是不是都沒有投入研發資源在8bit產品上了. 這么想的人可能一想到8bit的MCU, 腦海中會浮現40DIP的”經典8051”的形象.

事實上芯片廠商們并沒有停止創新, Silicon labs這樣的廠商同時有32bit與8bit的產品. 但是在8bit產品線上的創新一直沒有停止. 比如CIP-51內核因為采用了一個時鐘周期等同于一個指令周期的設計, 瞬間將同頻率的8051性能提高了12倍. 國內的一些半導體廠商也有基于8051或其他8bit內核的創新.

8位處理器難以使用C/C++語言編程

如果你了解Arduino的設計原理, 這個誤解就不攻自破. 當然坦白講, 8bit的MCU使用高級語言編程確實比32bit的MCU要困難些. 主要障礙就是內存地址的不統一. 比如8051內核的內存地址就分為CODE, data, sfr, idata, xdata. 如果涉及到banking就更復雜了. 8bit的PIC還有硬件Stack這樣更加”非主流”的設計. 但是這些障礙都可以通過工具的優化來緩解.

8位處理器專為簡單應用而生

這個觀點倒是有幾分真實, 但是嵌入式應用本身就是簡單應用居多. 嵌入式系統應用的本身特點決定了8bit依然有很多用武之地. 外設, 編譯器的進化將慢慢拓展8bit處理器的應用范疇.

8位處理器不能勝任IoT應用需求

IoT應用不是一個單獨的應用, 而是一個復合應用. 智能手表, 智能音箱, 主控制器, 網關這種當然需要復雜的處理器來實現. 但是IoT應用還包含大量的傳感器節點, 執行節點, 轉換節點. 這種節點用低功耗的8bit處理器來實現更加適合.

8位處理器響應慢

這個就是完全的誤解了, 典型的嵌入式應用中, 響應速度主要跟中斷響應和喚醒延遲相關. 8bit處理器有天然的優勢(地址轉換工作量小, IP單元實現門數少). 至少不輸于32bit的處理器.

8位處理器的能效低于32位處理器

曾經看過ARM公司的權威工程師寫的一本書, 書中觀點是32bit處理器的能效比高于8bit的MCU. 理由是32bit處理器能快速處理完任務, 休眠時間的比例更大. 但是這個結論包含一個假設, 就是任務有一定復雜度, 如果任務本身非常簡單, 喚醒過程的功耗也很大, 那么這個假設不成立. 針對不同應用場景, 不能簡單說8bit, 32bit哪個能效比更高. 至少非常簡單的應用中, 8bit的能效比要高. 如果再加上單獨響應,無需CPU干預的一些任務, 8bit的能效比甚至能高出很多.

相同價格的32位處理器功能遠強于8位處理器

這個也有一定程度的可信度. 但是不要忘記有相當大的一部分的應用, 使用8bit的MCU就足夠的情況下, 非要購買平均價格高一點的32bit MCU, 成本是會上升的. 很多基本上標準化了的嵌入式產品有很大的量, 就會發現8bit的成本優勢還是會高一點的.

8位處理器設計的應用不能適應未來變化

這是個思維角度問題, 作為嵌入式程序員, 更應該是考慮當前的任務. 不管是什么類型的MCU, 如果產品形態變化了或者需求本身變化了,就要重新設計. 未來誰都看不清, 何必考慮那么多沒有實際意義的前瞻.

8位處理器開發工作更繁重

32bit處理器的處理更加以軟件中心, 可以做更多的代碼復用. 8bit處理器更多地利用硬件外設來完成任務. 綜合而言, 沒有絕對的差別.

8位處理器沒有升級路徑

只要是嵌入式處理器, 升級路徑都不大明確. 如果你采用既有8bit, 又有32bit的產品的廠家, 你會發現很多外設都很相似. 考慮到現在圖形化配置外設的趨勢, 升級路徑逐漸變得不那么重要, 反正都是圖形化或者腳本化來生成基礎驅動代碼.

EFM8BB1芯片

chip_blockgram_copy.jpg

圖 芯片功能框圖

chip_detail_copy.jpg

圖 芯片結構框圖

芯片亮點:

1. 內核是8051世界中的明星:CIP-51. EFM8BB系列中這個內核最高25MHz,相當于經典8051跑在300MHz. 使用內部時鐘可以跑在24.5MHz, 相當于經典8051跑在294MHz.

2. 內部低速時鐘,80KHz與24.5MHz的內部高速時鐘互為補充, 方便低功耗設計.

3. 16-bit CRC硬件計算單元

4. AEC-Q100認證, 套用一句廣告語:“不是所有的MCU都能過AEC-Q100認證”. 通過這個認證表示可以使用在汽車級別的惡劣環境.

5. 其余特點不用單獨拿出來講, 但是很多人會忽視的一個亮點就是Silicon Labs的圖形配置開發工具界面, 能大大節省開發時間.

軟件開發-Simplicity Studio+圖形化配置

simplicity_studio_4_splash.png

關于圖形化配置式開發

顧名思義, 所謂的圖形化配置就是通過GUI方式來配置外設, 生成代碼. 這一點很重要, 因為現代MCU的外設越來越多, 越來越復雜, 涉及到的初始化配置非常繁瑣, 容易出錯, 已經不適合工程師慢慢查閱動輒幾百,幾千頁的參考手冊來手動書寫寄存器讀寫代碼. 除了外設配置之外, 還有IO分配, 純軟件組件的配置,時鐘樹的配置, 這些重復機械的工作以前都是工程師手工完成的. 目前市場上領先的MCU廠家都有自己的圖形化配置工具, 可以說圖形化配置工具+優化過的編譯鏈接工具鏈+圖形化的調試工具是現代嵌入式開發的必不可少的三項標配. 筆者印象中,Silicon Labs公司是最早推出圖形化配置工具的MCU廠家之一. 當然最初的工具只能配置Cross Bar, 解決IO口分配問題. 經過多年進化, Simplicity Studio內置的配置工具現在已經非常完善了, 很多功能筆者現在也還沒有用到過. 下面以一個例子來演示一下子圖形化配置的效率.

從頭到尾創建一個工程

Simplicity Studio的下載安裝這里不贅述了, 后文有參考連接.

第一步, 新建工程, 注意選擇Silicon Labs MCU Project, 相當于是一個模版:

new_prj_silicon_labs.png

第二步,選擇板子, 芯片, 如果你的板子是自定義的, 只選芯片型號就可以了:

new_prj_select_board_part.png

第三步, 選項目類型, 這里跟之前的新建項目那里是一個意思:

new_prj_simplicity_configurator.png

第四步, 選擇項目名稱, 保存位置:

new_prj_name_place.png

第五步,選擇工具鏈, 目前這里沒有什么好選的, 就是一個工具鏈, 當然可能以后還會支持更多的工具鏈:

內部配置

new_prj_toolchain.png

現在項目就創建完畢了, 可以開始配置了.

配置狀態機, 這個示例項目很簡單, 就是復位狀態與工作狀態, 實際工程中一般還會有多個低功耗狀態.

配置IO口, 根據前面的封裝類型, 全圖形化操作, 需要注意的是Silicon Labs公司產品獨有的Crossbar概念, Crossbar必須使能IO口配置才會生效.

外設配置

cross_bar_enable.png

下面就是最重要的外設配置:

peripherals_config.png

首先配置時鐘使用內置的24.5MHz時鐘源, 這是不使用外部時鐘源能達到的最高時鐘.

HF_OSC_24_5_MHz.png

這里界面上有點歧義, 如果選了內部時鐘源, EXTCLK其實沒有意義. 反倒是有意義的24.5MHz被顯示為灰色了.

再配置Timer3為1000Hz重載, 作為計時單元.

timer_3_1KHz_config.png

上面的數字也表明1000Hz其實是個不能精確達到的頻率, 事實上是999.836Hz,這個精度也夠了. 如果需要更精確的時鐘, 需要計算各種整數的分頻比.

再來配置中斷:

interrupt_config.png

到這里配置差不多了, 保存配置文件自動生成配置代碼.

save_generate_code.png

進度條完了, 項目的代碼框架就完成了, 可以在這個架子上開始應用開發了. 實際的測試工程都在后文有下載連接. 用過這個配置工具的工程師, 可以比較一下子使用圖形化配置方法生成代碼能給你帶來多少效率提升.至少筆者本人現在選擇MCU時, 只會選擇有圖形化配置手段的芯片. 當然作為嵌入式工程師, 查閱數據手冊, 參考手冊還是必不可少的, 只是大多數的簡單機械的工作真的沒有必要去手工操作了.

關于8051編譯工具鏈

工程師們所熟知的8051的C語言工具鏈:

1. 當然就是Keil了,Keil已經被ARM收購了, 現在可能更著名的產品是ARM內核的開發工具.但是8051工具鏈還是業界最著名的8051商業化開發工具. Silicon Labs跟ARM/Keil達成某種合作關系, 凡是購買這塊開發板的用戶都可以免費使用全功能版本的Keil工具鏈. 這個工具鏈跟Silicon Lab的Simplicity Studio結合的很完美. 如何安裝工具, 配置編譯器請看后文的參考連接.

2. IAR. 以優化為特點.

3. Tasking, ICC這些公司也有8051的編譯工具鏈產品, 本人很少用, 不評價.

4. 曾經有開源的SDCC工具鏈對8051內核支持也很好. 但是這個工具鏈至少有如下缺點.

4.1 沒有商業化的支持, 很多新型芯片的頭文件沒有及時更新, 對工程開發是個障礙. 起碼程序員需要自己建立具體型號的頭文件, 連接配置. 這些工作并沒有什么附加值.

4.2 圖形化配置功能外設, 生成代碼, 配置引腳這些功能沒有商業化的支持, 不可能做的好.

4.3 對仿真,調試支持的不好

4.4 開源產品, 缺乏維護, 生成的代碼正確性, 優化效果只能靠程序員自己去慢慢踩坑.

綜上所述, 本人并不看好開源的8051工具鏈. 至于高質量的gcc,llvm為什么一直沒有支持8051這樣的內核呢. 這是因為這些MCU的內存分布并不標準, 而且完整的LibC尺寸太大,直接讓gcc,llvm產生可以用于實際生產環境的8051可執行代碼非常困難. 上述的SDCC工具鏈也是一種特殊的支持8051的GCC版本. 算是開源界對8051內核的一次已經被放棄的嘗試.

現在隨著市場形態的進化, 商業化的工具鏈越來越容易獲取. 比如購買了本開發板的程序員就可以免費得到完全版本的Keil 8051工具鏈, 再加上Simplicity Studio本身具有的圖形化的配置,調試功能. 現在的8051程序員們可以說非常幸福了.

至于不使用C語言, 直接使用匯編語言設計整個工程的做法, 筆者并不提倡. 程序員最寶貴的就是開發與調試時間, 應該抓住重點.

跑個分: CRC16硬件加速

crc16_block.png

圖 硬件CRC16單元

EFM8BB1的硬件CRC16單元有兩個功能:

1. 接受軟件指定的字節流計算CRC16

2. 自動對Flash內容進行CRC16計算.

如果對功能安全有所了解, 這個CRC16硬件加速單元可以幫工程師很大的忙. 這里用幾種不同的方法來計算CRC16, 來跑個分. 參賽選手(除非另外說明, 編譯器都為Keil, 優先級最高, LibC使用高效率版本, 數據模型為small):

1. EFM8BB1上的硬件CRC16計算單元(運行在24.5MHz)

2. EFM8BB1上的軟件實現的CRC計算函數(運行在24.5MHz)

3. 另外一款32bit的MCU使用軟件實現的CRC計算函數(Cortex M0, 運行在32MHz)

實際的測試工程都在后文的下載鏈接中可以找到, 重要測試代碼, 分別是軟件CRC16與硬件計算函數:

code1.jpg

code2.jpg

跑分結果:

crc16_benchmark_raw.png

crc16_benchmark_unit.png

可以看出:

同樣頻率下(24.5MHz), 硬件CRC16單元的效率是軟件CRC16函數的2.8倍, 跟更高頻率(32MHz)的Cortex M0的軟件實現版本類似. 而經過頻率調整(即運算效率除以運行頻率)后, 硬件CRC16單元比Cortex M0的軟件實現版本的效率更高.

總結與參考

目前而言, 8位MCU過時的那一刻還遠遠沒有到來. 大多數復雜度較低, 可以使用硬件單元加速的嵌入式應用選用8位MCU能達到最佳ROI. 使用先進的開發工具, 配合設計合理的外設, 8bit的MCU上的軟件開發工作也會非常簡單高效, 如上文所是的硬件CRC16計算函數只有幾行. 嵌入式工程師在選型時, 要注意上述演示得出的一些結論.

官方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/

代碼工程下載: https://github.com/zhanzr/efm8bb1lck-demo.git

  • 本文系21ic原創,未經許可禁止轉載!

網友評論

6加1体育彩票走势图 广西快乐10分五星走势 微信二八杠是哪个软件好 假牌九是怎么玩的 四季肖中特网址 山东群英会彩票遗漏数据 彩票中奖十一期 河南快赢481软件破解版下载 可以上下分的麻将官网 兴动哈尔滨麻将官方版 广东麻将到底怎么玩 福建11选5开奖官网 北京快三详情 6肖中特三期必开一期 幸运飞艇官方论坛 欢乐麻将免费场版本下载 贵州快三开奖结果查询