目錄 一、免交互概念 二、基本免交互例子 三、expect 四、實驗演示 一、免交互概念 概念:對於shell腳本的自動化運維,就要實現免交互來達到自動化運維的效果 二、基本免交互例子 可以免交互統計出行號 1.命令行免交互統計 2.使用腳本免交互統計 3.使用免交互命令列印 4.免交互修改密碼 5 ...
4選擇正確的MCU
本章是關於微控制器單元(MCU)選擇的速成課程,主要針對那些沒有深厚硬體背景的工程師。它並不試圖成為一份詳盡的清單,列出你在為新項目選擇硬體時需要知道和考慮的一切。它確實提供了關於區分和選擇MCU設備的許多因素的介紹。最後,你將瞭解足夠多的關鍵考慮因素,以便有效地研究MCU並與團隊中的硬體工程師討論潛在的候選人。通過加強硬體/固件合作,併在第一時間為項目選擇合適的MCU,你將避免硬體重新設計和進度延誤。
我們將首先介紹為你的項目選擇一個合適的MCU所要考慮的廣泛因素。之後,我們將討論不同開發硬體之間的權衡。對STM32系列進行簡短的介紹,以顯示供應商如何傾向於對其產品系列進行分組。在本章的最後,我們將比較幾個以STM32 MCU為核心的不同開發板(dev board),以說明為什麼我們要使用這樣的開發板。
參考資料
- 軟體測試精品書籍文檔下載持續更新 https://github.com/china-testing/python-testing-examples 請點贊,謝謝!
- 本文涉及的python測試開發庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
MCU 考慮因素
選擇微控制器本身而不是開發板時需要考慮一些因素。 假設該項目包含完全定製的電子產品,則對選擇的確切 MCU 沒有限制,就像您僅在開發板之間進行選擇時一樣。 學生和愛好者有時會人為地進一步限制自己,有時會忠於某些生態系統並且只從這些生態系統內的開發板(例如 Arduino 或 mBed)中進行選擇。 雖然任何生態系統在本質上都沒有錯,但如果您無法考慮其他解決方案或無法理解每個硬體為特定項目帶來的獨特優勢,您將無法成長為專業工程師。
核心考慮
- 是否適合?
- 能運行我所有的代碼嗎?
- 成本是多少?
- 是否容易獲得?
物理尺寸
根據設計的不同,MCU的尺寸可能是一個重要的因素。如果你正在開發一個可穿戴或攜帶型設備,尺寸很可能是你的首要考慮因素。有時,預包裝的MCU太大,設計者需要採用板載晶元(MCU的硅晶元直接粘合在印刷電路板(PCB)上,而不是放在單獨的塑料包裝中)。另一方面,大型的機架式設備往往有足夠的空間容納任何尺寸的MCU,以完成工作。
給那些有興趣設計自己硬體的提示--包裝類型將在PCB的複雜性以及組裝的難易程度上起作用(特別是在原型設計階段)。如果你的原型將被手工組裝,任何鷗翼式封裝,如四平盒(QFP),都是最容易的。在QFP之後,四平包無引線(QFN)封裝仍然容易手工焊接。除非你是個焊接高手,否則一般最好不要手工組裝球柵陣列(BGA)!
ROM
只讀存儲器(ROM Read-only memory)是同一個系列的MCU的相當大的區別因素,ROM大小與價格密切相關。根據一個產品系列中不同型號的數量,可能有多個MCU具有非常相似的外圍設備。這些MCU很可能具有相同的物理尺寸,但卻有明顯不同的記憶體數量。如果你的應用對成本很敏感,但所需的ROM是未知的,可以考慮以下方法:
- 選擇一個MCU系列,在相容的空間里提供多種快閃記憶體尺寸。
- 從該系列中擁有最多ROM的MCU開始開發。這為增加功能提供了最大的靈活性。
- 在知道最終的image尺寸後,可以在開始大規模生產前選擇精確的MCU(具有較小的快閃記憶體尺寸)。
當採取這種方法時,你需要確保為未來的功能留下足夠的空間,假設你的產品能夠接受現場更新的固件。另外,一定要仔細檢查不同型號的外設分配情況--針腳相容並不總是意味著固件相容!
所需的ROM數量差別很大,取決於有多少代碼需要載入到設備上。如果你一直在使用8位MCU,那麼當你轉到32位架構(如ARM)時,你可能會感到非常驚訝。與8位架構相比,在32位架構上實現類似的程式將需要更多的快閃記憶體空間。好消息是,快閃記憶體的尺寸已經跟上了,所以幾乎總是可以找到一個具有足夠板載快閃記憶體的MCU來滿足你的應用。將第三方庫拉到你的代碼庫中,通常在快閃記憶體方面是相當昂貴的,所以如果你選擇走這條路,就要註意了。
RAM
片上隨機存取存儲器(RAM random access memory)的數量是另一個需要考慮的因素--它通常會跟隨特定設備的快閃記憶體數量。具有較大ROM的部件通常會有更多的RAM。需要大量RAM的幾個例子是:需要大型數據緩衝區的數據處理、複雜的網路堆棧、用於通信的深層緩衝區、GUI(尤其是那些需要幀緩衝區的GUI),以及任何運行虛擬機的解釋語言(即MicroPython和Lua)。
例如,假設你的應用程式需要一個高解析度的顯示器。如果顯示器沒有自己的幀緩衝器的板載控制器,你可能已經在外部RAM領域了。驅動這種類型的顯示器所需的緩衝區大小可能會超過MCU上的可用RAM。另一方面,如果你正在建立簡單的控制系統,只有有限的連接和用戶界面能力,那麼少量的RAM可能就是所需的全部。
另外,請註意FreeRTOS中的每個任務都需要它自己的堆棧(一般在Cortex-M埠上至少有512位元組),所以如果需要大量的任務,將很容易快速利用幾KB的RAM。
從固件工程師的角度來看,外部RAM似乎是免死金牌(誰不想把可用的RAM增加近一個數量級)--但所有這些功能都是有代價的。除非你的系統絕對需要它,否則最好避免在MCU的地址/數據匯流排上使用外部RAM。它需要額外的PCB空間,消耗更多的電力,並最終推高PCB和材料清單(BOM)的成本。由於長度調整的要求和所涉及的信號數量,在增加用於訪問外部RAM的外部高速並行匯流排時,PCB佈局會相當複雜。由於所有的高速信號,該設計也將更有可能發出EMI。儘管它提供了大量的空間,但外部RAM通常比板載RAM稍慢,這可能導致更複雜的鏈接器文件(如果某些功能有非常嚴格的時間限制)。其他值得考慮的因素包括正確設置RAM的時序參數和緩存一致性問題,如果你試圖通過使用數據緩存來加速對外部RAM的訪問(詳情請參考進一步閱讀部分)。
儘管有這麼多的缺點,擁有外部RAM可以實現很多功能,比如在RAM中緩存整個固件鏡像以便升級的能力,功能豐富的GUI框架,複雜的網路堆棧,以及複雜的信號處理技術。與其他任何要求一樣,需要做出權衡。
CPU時鐘
由於我們將討論限制在具有相同底層架構的MCU上,因此具有更快的核心時鐘速率的MCU將比具有較慢時鐘速率的MCU更快地執行同一組純軟體功能。請註意前面聲明中的關鍵詞 "純"--有時,有一些板載硬體外設可以對執行速度產生巨大的影響,而這與CPU時鐘速率無關(例如Cortex-M4內核上的硬體浮點和DSP功能)。
另一件需要註意的事情是設備的絕對最大時鐘速率與應用的實際時鐘速率。例如,一些MCU的最大時鐘頻率與生成USB外設所需的內部48MHz時鐘不相容,因此,如果同時使用USB外設,它就不能以最大速度使用。
中斷處理
在ARM Cortex-M系列中,中斷處理都非常相似。所有器件都包括一個帶有可重定位向量表的嵌套向量中斷控制器(NVIC)和一個外部中斷控制器(EXTI)。器件的具體考慮包括可用的外設中斷和如何將其映射到NVIC,以及如何將外部中斷復用到EXTI。
價格
根據不同的應用,BOM的成本可能是一個重要的驅動因素,也可能幾乎不是考慮因素。一般來說,在大批量的應用中,BOM成本會受到越來越多的關註。然而,對於小批量產品,通常明智的做法是更多地關註最大限度地減少產品的開發時間和努力,而不是儘可能地實現最低的BOM成本。通過專註於最小化小批量產品的工程努力和開發時間,該產品將更快地進入市場。產品不僅能更快地開始產生收入,而且還能減少非經常性工程(NRE)成本。更少的NRE導致正在開發的產品的投資回報率(ROI)更快。更快的投資回報率最終使經理和首席執行官們非常高興 在這種情況下,為每年銷售幾十種產品的BOM花費幾美元而擔心--犧牲幾周或幾個月的開發努力--很少是一個明智的權衡。
可用性
初級工程師經常忽略的一個方面是MCU的預期和保證可用性。一個零件在項目開始時可以購買並不意味著它在最終產品銷售的整個過程中都可以使用。在消費類設備的情況下,這可能不是一個大問題。這是因為這些設備可能有極高的產量,但任何單一的修訂版只在有限的時間內(從幾個月到一兩年)進行生產。
將消費電子的計劃淘汰思維與工業、電信或航空航天方面的東西進行對比。在這些行業中,開發時間表可以用年來衡量,所需的支持期往往是十年或更長。這就是為什麼零件的可用性是一個非常現實的考慮。一定要調查製造商對可用性的保證,並根據他們的歷史、聲譽和對項目的風險進行權衡--在完成了80%的設計後,卻發現在預生產期間無法找到MCU,這不是一個令人愉快的經歷!
外圍設備
與CPU的桌面世界相比,處理器本身通常是關註的中心,由於範圍的增加,選擇合適的MCU更為複雜。許多不同的硬體都包含在同一個晶元上,這使我們能夠針對速度、功率、CPU利用率或BOM成本優化解決方案。在一個高度受限的設計中,所有這些因素都可能起作用,需要做出權衡。
本節將介紹一些基於Cortex-M的MCU上常見的硬體外設,旨在對它們進行極為簡要的介紹,目的是告訴你為什麼每種類型的外設在設計中都會有幫助。
連接性
在當今物聯網(IoT Internet of Things)不斷增長的連接生態系統中,MCU上的板載網路功能對項目來說是一個福音。...只要有合適的固件來驅動它。重要的是要認識到,擁有一個外設並不等同於擁有全部功能。例如,僅僅因為MCU支持縮小的媒體獨立介面(RMII reduced media independent interface)和網路中的物理層(PHY)並不意味著你可以立即獲得完整的TCP/IP協議棧--所有的固件功能都需要從某個地方來。植入設備的潛在連接性可以包括乙太網、RMII、802.11(WiFi)、802.15.1(藍牙)和802.15.4(Zigbee、HART等等)。
當涉及到無線通信時,事情就變得有點複雜了,因為產品將需要通過適當機構的批准程式,這取決於地理位置的不同。預先認證的射頻(RF)模塊可用於最大限度地減少開發適當認證的終端產品所需的努力和成本。
由於專門的PCB佈局、監管要求和複雜的網路堆棧,促進無線通信的板載MCU外設並不像它們對小批量產品首次出現時那樣有用。同樣,不要因為簡單地指定一個有硬體的部件而陷入虛假的成就感,因為無線通信堆棧可能非常複雜,無線認證測試也很昂貴。
記憶體保護單元
記憶體保護單元(MPU Memory protection units )是用來確保代碼只訪問它被允許的RAM範圍。如果使用得當,MPU可以確保更高的系統穩定性和更高的安全性,因為應用程式不太可能通過訪問它不應該訪問的記憶體而造成意外的後果。
硬體浮點單元
如果你的應用要計算大量的浮點數字,那麼硬體浮點單元(FPU hardware floating-point unit )會非常有用。直到過去十年左右,在大多數基於MCU的嵌入式系統中,浮點數字通常是最好避免的。更快的處理器的出現開始改變了這一點。現在,FPU通常在硬體中實現。由於有了FPU,許多不同的應用可以從使用浮點數學中受益,而不會產生通常與基於軟體的庫實現有關的CPU性能缺陷。
單精度(32位)FPU在Cortex-M4處理器上是可選的,而基於Cortex-M7的處理器增加了對雙精度(64位)浮點運算的可選硬體支持。
數字信號處理功能
除了基於硬體的浮點支持所帶來的性能提高外,基於Cortex-M4和Cortex-M7的MCU還在硬體中嵌入了可選的數字信號處理(DSP digital signal processing)功能,這可以大大加快一些複雜的演算法,並可能有助於減少固件工程師的編碼負擔。
直接記憶體訪問通道
直接記憶體訪問(DMA Direct memory access)在需要高帶寬或高度事件驅動代碼的各種情況下都非常有用。DMA控制器通常能夠與MCU外設以及RAM的不同部分互動。它們負責填充外設寄存器和RAM,完全不涉及CPU。這些自主傳輸可以通過大大減少中斷負荷和上下文切換來釋放大量的CPU時間。
關於DMA外設需要記住的一點是,所有通道並不總是映射到所有外設。某些通道的帶寬可能比其他通道高。這在需要多個高帶寬設備的系統中最為顯著。對於像這樣具有挑戰性的系統,固件和硬體工程師必須一起工作,以確保硬體設計不會給固件帶來障礙。
通信介面
我們已經介紹過相對於乙太網和無線技術的外部網路連接。有許多不同的通信介面,這些介面在傳統上與嵌入式設備有關,通常作為MCU上的硬體外設提供。用於與板上和板下的感測器和執行器進行通信的介面如下:
- IC間通信(I2C Inter-IC Communication)
- 串列外設介面(SPI Serial peripheral interface)
- 通用同步/非同步接收發射器(USART Serial peripheral interface)
以下外設經常被用於汽車和工業環境中的模塊間通信:
- USARTs
- 控制器區域網路(CAN Controller area network )
- 本地互連網路(LIN Local interconnect network)
硬體加密引擎
如果你的應用需要外部連接,那麼你的心思也應該集中在安全方面。就像FPU使浮點運算的CPU效率更高一樣,一些MCU上也有基於硬體的加密引擎,這將大大減少在公共網路上安全傳輸數據所需的CPU負擔。
計時硬體
一個MCU上通常包括幾個不同的定時外設。這些外設本身通常至少包括輸入捕捉、輸出比較和脈衝寬度調製(PWM pulse width modulation)功能。一些器件還包括與正交編碼器介面的定時硬體。
集成模擬
數模轉換器(DAC Digital to Analog Converters )和模數轉換器(ADC Analog to Digital Converters)在連續變化的模擬值和該值的相關數字表示之間進行轉換時使用。大多數情況下,這些類型的板載外設將比你發現的外部晶元的解析度和頻率更低。然而,根據你的系統的要求,它們可能是非常有用的。另一個有用的外設是板載比較器,當一個模擬值高於或低於一個給定的閾值時,它將向處理器發出信號。
一些更專業的器件(例如賽普拉斯PSoC)包括完全可重新配置的模擬外設(包括運算放大器、DAC和ADC)以及靈活的數字外設,靈活地將非常大的功能集集成到一個信號晶元中。Analog Devices和Maxim提供一些更奇特的混合信號MCU,這些MCU傾向於將特定應用的元件與MCU集成在同一晶元上,使特定終端產品的開發更加容易。你可以找到非常廣泛的特定應用MCU,其目標是工業過程式控制制、汽車距離感測、物聯網感測器到電視遙控應用。
如果有一個流行的混合信號問題的用例,很可能也有一個完全集成的矽片,將MCU與大部分所需的模擬前端集成在一起,以解決大部分的問題。那麼問題就變成了平衡BOM成本、詳細規格、尺寸、開發時間和長期採購風險的問題。
專用的觸摸介面
由於觸摸介面的日益普及,現在一些MCU上已經包含了觸摸控制器的完整實現。這可以大大減少擁有完整功能和強大的觸摸介面實現所需的專業知識和努力。
顯示界面
複雜的顯示介面,甚至是圖形加速,通常出現在引腳數更多的高性能器件中,變得相當普遍。期待在大量的部件上發現並行的LCD/TFT介面(例如6800和8080),MIPI DSI等介面能夠驅動廉價、高解析度的顯示器到只有幾行的顯示器。硬體協議轉換IC可以用來適應一些不同的顯示標準,如LVDS和HDMI。現在的MCU能夠提供豐富的用戶體驗,增加了硬體加速和高效編寫的中間件和驅動程式。CPU負載也是完全可以承受的。
外部存儲器支持
在較高引腳數的封裝中,預計會發現對靜態隨機存取存儲器(SRAM static random access memory)的支持。同步動態隨機存取存儲器(SDRAM Synchronous dynamic random access memory )支持,板載控制器負責處理嚴格的時間要求和刷新周期,可以在更高性能的設備中找到。以性能為目標的設備一般會支持四路SPI。通常情況下,外部RAM,甚至是四SPI設備,可以被記憶體映射,使用起來與內部存儲類似,儘管會有性能上的影響。許多設備也有多媒MultiMediaCard )和安全數字卡(SD卡 MultiMediaCard)控制器,因此,商品消費級可移動存儲很容易被添加。
實時時鐘
一些設備上也有硬體日曆;所需的只是一個32kHz的晶體和一個備用電源,如CR2032原生鋰電池。一般還提供這種能力的東西是有限的電池備份的RAM。
音頻支持
通過Inter-IC Sound (I2S)的高保真音頻支持通常是可用的。期待發現連接到I2S外設的DMA通道,以最大限度地減少在這些匯流排上為數據饑渴的DAC供貨和從ADC收集數據所需的CPU干預量。
功率消耗
十多年來,低功耗MCU一直是一種趨勢。然而,由於市場上出現了大量基於電池供電的物聯網設備,歷史上專門的使用案例和有限的選擇(如16位MSP430)現在已經成為主流。現在,有了完整的32位MCU,它們可以在低速深度睡眠和高時鐘速率、數據緊縮的運行模式之間快速迴圈。
電源效率
這聽起來很簡單,但確保某樣東西少耗電的一個相當好的方法是將其關閉(不要笑--由於各種漏電流的存在,這可能出乎意料地複雜,取決於所涉及的部件!)。如果有幾十個外設的複雜的MCU有希望實現節能,就需要有一種方法來關閉任何不需要的功能,以儘量減少浪費的電力。這通常是通過關閉不使用的外設的時鐘和確保基於CMOS的I/O引腳不浮動來實現的(記住,CMOS設備中的轉換是最耗電的)。
數據表中常見的另一個規格是每MHz的CPU時鐘消耗多少功率--通常以μA/MHz為單位。如果每個喚醒期的處理量是相當恆定的,這就提供了另一個衡量標準來比較不同的MCU型號。
低功耗模式
針對低功率應用的設備通常會有一些不同級別的關機狀態可供選擇。這些狀態將允許程式員在電流消耗、可用功能(如保持RAM內容完整和一些外設開啟)、可用於觸發喚醒事件的中斷數量和喚醒時間之間進行權衡。值得慶幸的是,許多低功耗的物聯網應用的操作範圍相當有限,所以有時某個MCU的新功能的組合將被證明是非常適合特定的應用。
喚醒時間
如果一個設備具有驚人的低關機電流,但需要異常長的時間來喚醒並使自己進入可用的運行狀態,那麼它可能不是需要相當頻繁喚醒的應用的最佳選擇,因為大量的時間將被用於使系統啟動和運行,而不是讓它執行必要的處理,然後再回到睡眠。
電源電壓
較低的電源電壓通常會導致較低的電流消耗。根據設計,可以在消除電源調節電路(由於效率低於100%而消耗電流)和擴大特定電池單元的可用工作電壓範圍之間進行權衡。MCU的電壓要求(以及任何輔助電路)將是調節方面有多少靈活性的驅動因素。另外,要註意最大的時鐘通常也會隨著電源電壓的變化而變化,所以不要期望能夠以最大的指定頻率和儘可能低的電源電壓來驅動CPU。
項目中期遷移MCU
偶爾,100%的項目需求不會在前期就被知曉,或者每個人都可能沒有100%的信心在第一天就確切地解決每個細節問題。如果你碰巧幸運地知道有高度的不確定性,那麼最好的辦法是為它做計劃,而不是被嚇一跳。這裡有幾個領域,選擇一個屬於更大的家族或生態系統的MCU可以幫助減輕與項目不確定性相關的一些風險。
引腳相容性的重要性
在計劃潛在的MCU轉變時,如果可能的話,提前確定引腳相容的替代MCU。例如,恩智浦LPC1850的部件與LPC 4350 MCU引腳相容。STM32器件在一個系列(和封裝)中都是引腳相容的,但偶爾也會與其他系列(例如STM32M4和STM32M7)幾乎引腳相容。意法半導體定期發佈遷移指南,供那些已經超越了一個MCU系列並需要更多能力的工程師使用。如果事先選擇了一些可能的候選產品和替代產品,那麼PCB上一些簡單的跳線可能會促進具有明顯不同性能(和成本)的不同MCU之間的遷移,有助於消除項目中期所需的PCB返工時間。
周邊相似性
在一個特定的系列中,大多數MCU將繼承相同的外圍IP。晶元供應商不一定在每次創建新的MCU系列時都會從頭開始重新設計外設,因此,屬於某個供應商的外設的寄存器映射和行為通常會有大量的重疊現象。通常情況下,如果你的應用程式只使用最基本的外設功能的子集,那麼你可能會幸運地使用基本相同的驅動程式,即使供應商決定在MCU系列之間大幅改變其API。具有諷刺意味的是,有時原始硬體被證明比它上面的抽象層更具有一致性。
MCU系列的概念
許多晶元供應商都有器件家族的概念,意法半導體(STM)也不例外--數據手冊通常是為整個器件家族編寫的。STM系列器件之間最明顯的差別通常是RAM/ROM和封裝尺寸。然而,更多的外設也被添加到更有能力的器件中--例如,更大的封裝將開始包括並行RAM控制器。具有更多RAM/ROM的器件將包括能力更強的定時器外設、更多的通信外設或特定領域的外設,如加密模塊。
在一個給定的設備系列中的設備之間移動應該是很容易做到的,所以建議從該系列的一端開始(通常建議從高處開始),看看項目的發展。如果範圍內的蠕變保持在最低限度,那麼在所有的主要功能開發完成後,就有可能無痛地降低MCU的等級,從而節省一些BOM成本。
開發板的考慮
開發板是工程師在項目的早期開發階段使用的任何硬體。開發板不僅僅適用於MCU;它們對許多不同類型的硬體都很有用--從運算放大器到現場可編程門陣列(FPGA field-programmable gat arrays)的任何東西。
單片機開發板應提供幾個關鍵功能:
- 輔助電路,為MCU供電和運行所需。
- MCU編程並通信
- 方便與外部電路連接的連接器
- 連接外設。
開發平臺及其重要性
開發平臺是一個產品的生態系統,允許跨多個供應商的高度抽象。平臺的主要重點是以最小的努力提供大量的功能,當主要目的是儘快創建原型時,這是很好的。
為了在多個供應商之間提供大量的功能,標準化的介面、易用性和靈活性往往會被強調。有了這些價值,平臺本身就是焦點(因為它應該是),而特定設備的個別差異化特征往往在很大程度上沒有被註意到,也就是說,除非你對專門的編碼感興趣,這需要額外的時間,最終要求你把更多的註意力放在為平臺開發上,而不是與平臺一起。
生態系統圍繞著平臺發展,溫和地引導平臺用戶使用工具、工作流程、最小公分母功能集和可用硬體。如果目標是在儘可能短的時間內產生概念驗證,這一切都很好。然而,如果要使用平臺方法找到一個長期的開發和值得生產的解決方案,該平臺可能需要高質量、極其完善和穩定。這通常意味著使用基於多個供應商提供的工業標準的平臺(如SMARC、QSeven和COM Express)。
通常情況下,平臺特定的功能是如此重要,以至於平臺代碼將簡單地虛擬化介面以使它們更容易被訪問,通常要付出非常大的代價(也就是說,對PWM或SPI進行比特化處理,以便將它們分配給特定的預定引腳)。因此,如果你選擇使用一個平臺來評估硬體(或具體地說,一個MCU),你應該意識到你可能是在評估平臺和它在特定硬體上的實現,而不是硬體本身。
評估套件(eval kit)
評估套件(eval kit)在涉及到標準化腳印與關註硬體本身時處於另一個極端。評估套件通常配備了最大的、功能最豐富的MCU模型,其唯一目的是為了展示該硬體。這意味著它們通常不會在不同的目標MCU之間共用腳印或連接器(參考下圖),因為每個MCU都有不同的主要功能,並且針對不同的市場。評估板將有儘可能多的外設被分解成實際的連接器(如串列、乙太網、SD卡、CAN匯流排和多個USB)。它們通常還包括一系列的外圍硬體,如RAM、eMMC、按鈕、滑塊、電位器、顯示器和驅動揚聲器的音頻編解碼器。他們幾乎總是將所有有趣的MCU引腳分解到容易訪問的頭端,因此開發人員能夠快速嘗試他們能夠夢想的任何特定硬體配置。製造商通常也會在評估套件板上展示他們的其他非MCU硅產品,以努力推動與他們自己的產品有關的更多銷售:
為了最好地展示設備的能力,評估套件還將提供大量的工作示例代碼,使工程師能夠與所有的外設進行互動。與一般基於平臺的實現方式不同,這些例子是為展示待評估的目標設備的獨特差異化功能而定製的。在本章的第一部分,我們討論了根據具體的使用情況來選擇硬體。如果你正在為設計中具有挑戰性的方面尋求具體的解決方案,那麼與必須自己從頭開始實現所有這些功能相比,有指導性的例子來演示MCU的關鍵差異化方面的工作代碼的重要性可以大大節省時間(和開眼界)。
所有這些功能都是有代價的--完整的評估套件通常需要幾百美元。然而,如果你的目標是快速評估有特定目的的潛在MCU,它們可以通過節省工程時間和減少風險來快速地支付自己的費用。
低成本示範板
近年來,低成本的示範板已經真正進入了他們的視野。價格已經大幅下降;製造商有時會以與放置在上面的裸體IC相同的價格出售示範板(有時,它們實際上比購買單個IC的價格更低!)。與硬體平臺不同,這些板子往往會有類似的腳印,但不一定有相同的連接器或引腳。
最近,更多模糊了平臺和示範板之間界限的低成本示範板(也叫演示板)已經出現在市場上。由於Arduino®無處不在,大多數低成本的板子至少會有一組Arduino引腳相容的接頭。然而,是否有相容的針座和擁有完全擁抱生態系統的開發板是非常不同的事情。演示板可能沒有任何軟體來配合這些針座;僅僅因為硬體存在並且可以插入板子,並不自動意味著你會得到目標MCU的相容庫來驅動硬體。這並不意味著它們是不相容的,但要讓一些東西啟動和運行所需的努力要比簡單地插入板子和跟著 "hello world "演示走要大得多。
一些製造商也在創建他們自己的標準化頭,這些頭在演示板之間是通用的,這在不同產品系列之間遷移時至少是有幫助的(但顯然只限於該製造商)。ST Nucleo和NXP Freedom的標準化頭文件就是一些例子。為了使用戶更加方便,這些板子通常也會具有mBed相容性。
STM32產品系列
在過去的幾年裡,STM已經開發了相當廣泛的MCU。在這裡,我們將討論該產品組合中的幾個主要部分是如何相對於本章MCU考慮因素部分所討論的。大多數其他供應商也將他們的產品分為主要部分,這往往會使選擇過程更容易一些。
主流產品
STM32產品線從2007年的STM32F1開始,這是一款基於Cortex-M3的MCU。該產品線的這一部分旨在為大多數大批量應用提供服務,在這些應用中,成本和性能必須得到平衡,而複雜的應用卻很少。該產品線的STM32F0和STM32G0部分是基於Cortex-M0和Cortex-M0+的器件,主要面向低成本應用。最初的STM32F1基於Cortex-M3,具有非常廣泛的功能集,但與其他器件相比,其性能已經開始顯老。
STM32F3是STM在提供集成的、更高精度的模擬外設方面的首次嘗試(其他供應商提供比STM更高精度的模擬元件);然而,該系列沒有提供真正的高性能模擬。它包括一個16位sigma delta ADC,但有效位數(ENOB)據說只有14位,比STM的12位逐次逼近(SAR)ADC外設稍好,而這是最常包括的。較新的基於Cortex-M4+的STM32G4系列擁有最多的模擬外設,包括許多實例的可編程增益運算放大器(PGA)、DAC、ADC和幾個比較器,但在撰寫本文時,還沒有集成的高精度ADC。
到2020年,STM32G0和STM32G4系列將增加其產品的廣度--它們都是較新的產品線,STM可能會開始用更多的器件來填補這些產品線。
高性能
STM的高性能MCU始於基於Cortex-M4的STM32F4。Cortex-M4與Cortex-M3非常相似,但它包括(可選)硬體32位FPU和DSP指令,這在所有STM3F4器件上都有。只要有所需的RAM(通常是MCU的外部),高性能系列中的所有器件都能夠舒適地驅動無控制器顯示器上非常有吸引力的GUI。各種硬體外設提供的加速(如MIPI顯示串列介面(DSI),通過FMC和DMA的記憶體傳輸,以及使用Chrom-Adaptive Real-Time(Chrom-ART)加速器的一些基本圖形加速),使得與顯示器通信所涉及的相當多的工作可以卸載到各種外設上,以便CPU可以花時間執行其他任務。
下麵是對該家族兩個主要成員和一些顯著特征的快速分解:
這類MCU可以被認為是交叉型MCU。它們的功能足夠強大,可以用於一些傳統上保留給完整的CPU的應用任務,但它們仍然具有MCU的易用性。
異構多核
2019年,意法半導體推出了STM32MP系列,這是該公司首次進入應用處理器領域。這個系列提供650MHz的單核或雙核Cortex-A7,以及運行在209MHz的單核Cortex-M4。意法半導體公司的這些解決方案似乎是針對大批量、低成本的市場,專註於較少的內核數和需要較少PCB層的封裝,使用較少的製造技術。
從軟體角度看,意法半導體的MCU產品與新的微處理器單元(MPU)之間的主要區別是,由於MPU有記憶體管理單元(MMU),它們能夠通過主線Linux內核運行完整的操作系統,這就開啟了完全不同的開源軟體生態系統(你不需要親自編寫)。
異構多核方法允許設計者將設計的一部分分割開來,在它們最適合的領域中解決。例如,一個具有GUI和網路功能的專用過程式控制制器可以使用Cortex-A7來利用Linux並獲得Qt框架和複雜的網路堆棧,同時使用Cortex-M4來處理所有的實時控制方面的問題。
μClinux的實現已經在STM32F4和STM32F7 MCU上使用多年,但由於這些器件上缺乏MMU,通常會有相當大的性能損失。
當然,隨著功能的增加,複雜性也隨之增加。與MCU不同,STM32MP系列沒有辦法集成外部RAM,所以要準備好一些相當複雜的PCB佈局(與獨立的MCU解決方案相比)。
低功率
意法半導體的低功率產品線主要針對電池供電的設備。下麵是所有不同家族成員之間的快速比較:
根據特定物聯網應用的具體工作負荷,使用低功耗的32位MCU可能是有意義的,比如前述表格中的那些。然而,對於非常簡單的應用,也應考慮使用低功耗的8位和16位MCU。
無線
STM32WB實現了一個帶有專用Cortex-M0+的Cortex-M4,以運行藍牙BLE協議棧。該系列提供了大量的集成,從大型快閃記憶體和RAM到混合信號模擬外設,包括觸摸感測器和小段LCD。各種安全功能,如加密演算法和隨機數字發生器,也都存在。由於使用該系列器件的產品需要FCC認證,因此它們對大批量應用最有意義。
如何選擇開發板
STM是我們評估的唯一製造商,以便將例子限制在容易消化的範圍內。在實際的產品工程工作中,設計者有必要對所有可能的供應商進行重新審視。雖然每個人都有自己喜歡的方法來完成跨供應商的搜索,但一個簡單的方法是使用分銷商的網站。
由於有精心策劃的面向原型設計的分銷商網站(如Digikey和Mouser),工程師能夠在許多不同的供應商之間進行參數搜索和比較。這種方法的一個缺點是,搜索僅限於特定的分銷商所經營的任何產品系列。另一個潛在的缺點是,參數化搜索結果受制於分銷商的數據輸入準確性和分類。直接使用分銷商網站的好處是,許多不同的供應商都在一個地方,可以立即檢查產品的可用性,而且半真實世界的價格很容易看到和過濾。
以原型為導向的分銷商的定價被認為是半真實的,因為通常情況下,在產品進入全面生產後,使用以數量為導向的分銷商或直接向供應商購買大批量的產品會更經濟。
要求
到此為止,我們已經涵蓋了在理論層面上為項目選擇MCU的所有考慮。現在,是時候將所有這些付諸行動並選擇將用於所有實際操作練習的MCU了。需要記住的幾件事如下:
- 我們將選擇一個開發板和MCU--因此,一些要求將針對開發板,如果你正在製作一個需要長期生產的產品,這通常不是一個好主意。
- 要求將是針對這本書的--使某些東西成為一本書的好選擇的要求可能不會轉化為你正在進行的項目。很明顯,你的選擇標准將為你的項目量身定做。
必須具備的條件,也就是要求,如下所示:
- 基於STM32 Cortex-M的CPU。
- 記憶體保護單元(MPU)。
- 顯示狀態的可見手段。
- 相對較低的成本(如<50美元)。
好的方面,也就是需要的條件,如下:
- 多功能性: 如果開發板能與其他硬體一起使用就更好了。
- 通過USB的虛擬通信可作為調試埠。
- 多核心。
要求的理由
我們將把搜索範圍限制在STM32部件上,因為這就是我們在本書中使用的例子系列。在第15章,FreeRTOS記憶體管理中,我們將介紹如何防止任務訪問他們不應該訪問的記憶體,這將要求我們利用具有記憶體保護單元的部件。本書的目標之一是儘可能保持硬體交互的可訪問性,這導致了下兩個要求:狀態顯示和成本。
一些顯示狀態的手段可能會轉化為簡單的LED(最好是多個)。應該有某種形式的反饋,使程式員能夠一目瞭然地看到正在發生的事情,以確保代碼確實在做什麼。在真正的嵌入式環境中,這可能會採取額外儀器的形式,如示波器、邏輯分析儀和DMMs。為了使儘可能多的人能夠使用這些工具,我們將明確地避免使用這些工具。因此,我們不是僅僅依靠外部工具和調試器,而是要尋找板載指標。
這些好的東西並不是硬性要求,但它們是系統在完美世界中所擁有的理想品質。理想情況下,目標開發板也將是更大的硬體生態系統的一部分,這將使人們能夠使用他們可能已經擁有的現有硬體來進一步探索本書的概念。連接到目標MCU上的USB埠也是很好的選擇--這樣的話,我們就可以使用一個虛擬的通訊埠來輸出調試,而不是只使用調試器。最後,在第16章 "多處理器和多核系統 "中,我們將看一下關於用多CPU開發板的簡要介紹和一些提示。儘管這個主題值得自己寫一本書(已經有很多人從架構的角度寫了),但如果有一些我們可以在實際硬體上付諸行動的代碼就更好了。
選擇開發板
下麵是一個例子,說明我們使用美國一個受歡迎的分銷商DigiKey來縮小搜索範圍的步驟:
- 在DigiKey的主頁上,https://www.digikey.com/,我們開始搜索STM32,並從選擇中選擇MCU和DSP的評估板。
- 我們只對目前可用的零件感興趣(不是過期的)。
- 開發套件也必須是有庫存的。
下麵是結果:
根據我們對STM32產品系列的瞭解,我們選擇了帶有記憶體保護單元的MCU。目前,這個標準提供了73個可用的開發平臺,範圍從9-550美元不等,範圍相當大。我們已經滿足了大部分的硬性要求--除了板載指示器,它不可能出現在搜索中。讓我們看看我們是否可以通過包括一些願望來縮小這個領域。
意法半導體將他們的微處理器稱為微處理器單元(MPU),這就造成了一個過載的術語,而且在談論記憶體保護單元(MPU)時也有一些歧義。在瀏覽網站和文檔時,你可能會碰到這個縮寫的兩種用法。
如果我們正在尋找多核,那麼STM32H7和STM32MP1系列是有效的選擇。事實證明,有一些帶有這些部件的發現板,其成本相對合理(就其包含的內容而言)為80美元,但我們最好是尋找接近20美元範圍的硬體--讓我們不要讓欲望干擾硬性要求!"!
把重點縮小到不違反<50美元定價要求的處理器,我們就可以看到STM Nucleo系列的開發板。所有的Nucleo系列都是與mBed相容的,如果我們選擇使用它,就可以使用整個生態系統。STM對Nucleo的另一個認識是,支持現有的流行平臺是一個好主意--因此,除了將幾乎所有更相關的MCU引腳放在一個專有的接頭上之外,Nucleo板還提供各種Arduino風格的接頭。所有的Nucleo板還包括一個ST-Link板載編程器,其中一些可以重新刷新,看起來與SEGGER J-Link相同,這是一個巨大的優勢,將消除購買一個額外硬體的需要:
我們的目標平臺將是Nucleo-F767ZI,它集成了最廣泛的連接,包括最靈活的調試。我們將在第6章 "實時系統的調試工具 "中介紹重新刷新板載ST-Link以使用SEGGER J-Link固件。由於不需要配置額外的介面,三個用戶LED燈將使交流固件狀態反饋變得非常簡單。內置的乙太網允許開髮網絡化的應用。對於我們的目標平臺來說,如果有多核MCU是很方便的,但沒有一個符合我們成本要求的MCU:
儘管在選擇MCU或開發板時有很多選擇,但這不需要是令人生畏的過程,特別是當你知道你的要求和要做的權衡時。
釘釘或微信號: pythontesting 微信公眾號:pythontesting