微控制器實時操作系統實踐4選擇正確的MCU

来源:https://www.cnblogs.com/testing-/archive/2023/06/12/17466755.html
-Advertisement-
Play Games

目錄 一、免交互概念 二、基本免交互例子 三、expect 四、實驗演示 一、免交互概念 概念:對於shell腳本的自動化運維,就要實現免交互來達到自動化運維的效果 二、基本免交互例子 可以免交互統計出行號 1.命令行免交互統計 2.使用腳本免交互統計 3.使用免交互命令列印 4.免交互修改密碼 5 ...


4選擇正確的MCU

本章是關於微控制器單元(MCU)選擇的速成課程,主要針對那些沒有深厚硬體背景的工程師。它並不試圖成為一份詳盡的清單,列出你在為新項目選擇硬體時需要知道和考慮的一切。它確實提供了關於區分和選擇MCU設備的許多因素的介紹。最後,你將瞭解足夠多的關鍵考慮因素,以便有效地研究MCU並與團隊中的硬體工程師討論潛在的候選人。通過加強硬體/固件合作,併在第一時間為項目選擇合適的MCU,你將避免硬體重新設計和進度延誤。

我們將首先介紹為你的項目選擇一個合適的MCU所要考慮的廣泛因素。之後,我們將討論不同開發硬體之間的權衡。對STM32系列進行簡短的介紹,以顯示供應商如何傾向於對其產品系列進行分組。在本章的最後,我們將比較幾個以STM32 MCU為核心的不同開發板(dev board),以說明為什麼我們要使用這樣的開發板。

參考資料

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來縮小搜索範圍的步驟:

根據我們對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
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 簡介 猜拳小游戲是一個經典的小游戲項目,也是初學者學習編程的必要練手題目之一。在 Python 中,我們可以使用多種方式來實現一個簡單的猜拳小游戲。 本文將依次介紹六種Python實現猜拳小游戲的方法,包括:使用 `if-else` 條件語句、使用 `random` 模塊、使用字典映射勝負關係 ...
  • 在分散式環境中,當需要控制對某一資源的不同進程併發訪問時就需要使用分散式鎖;可以使用 ZooKeeper + Curator 來實現分散式鎖,本文主要介紹 Curator 中分散式鎖的使用,文中所使用到的軟體版本:Java 1.8.0_341、Zookeeper 3.7.1、curator 5.4. ...
  • 馬哥原創,淄博燒烤分析大屏,含:詞雲圖、玫瑰圖、柱形圖、折線圖、地圖等圖表,jieba分詞、snownlp情感分析、stopwords停用詞、flask網頁服務等技術。 ...
  • 最近需要在計算大文件的 MD5 值時顯示進度,於是我寫瞭如下的代碼: ``` cs public long Length {get; private set; } public long Position { get; private set; } public async Task Compute ...
  • ## 硬碟壞道概念新知 現在一般很少提到硬碟壞道這個概念,硬碟無非壞了或者沒壞兩個狀態。玩NAS一段時間,就會遇到其中的中間狀態——“壞道”。本文僅就**機械硬碟**的“壞道”進行分析。 目前遇到過幾次文件系統損壞掛載不上。因為好玩,嘗試了多種文件系統。 1. ext4的硬碟斷電壞了,掛載提示nee ...
  • 大家好,我是 god23bin。今天我給大家帶來的是 Linux 命令系列,每天只需一分鐘,記住一個 Linux 命令不成問題。今天,需要你花費兩分鐘時間,因為我們要介紹的是兩個常用的查看文件內容的命令:cat 和 tail 命令。 ...
  • 問題 在系統日誌中(/var/log/messages),有時會看到大面積的下麵的報錯: nf_conntrack: table full, dropping packet 這說明系統接到了大量的連接請求,但是系統的連接跟蹤表已經滿了,無法再記錄新的連接了。這時候,系統會丟棄新的連接請求。 在 Ce ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...