溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

站在2018看單片機和嵌入式芯片方案選型和發(fā)展趨勢

發(fā)布時間:2020-05-20 04:24:49 來源:網(wǎng)絡(luò) 閱讀:10783 作者:朱有鵬老師 欄目:系統(tǒng)運維

楔子

我時常在想,現(xiàn)代社會發(fā)展變化速度之快超越了很多人的認知。羅胖子說跟不上時代要交認知稅,很有道理。半導(dǎo)體和IT行業(yè)又是旋渦中心,發(fā)展更加快,其實想想其他行業(yè)的創(chuàng)新(美團外賣、滴滴打車、微信社交、淘寶京東電商,以及最新的新零售自動售貨機、自動駕駛汽車等)本質(zhì)上都是半導(dǎo)體行業(yè)的創(chuàng)新驅(qū)動的,都要靠先有芯片,先有配套的軟件資源和開發(fā)人才,才能有人在這些行業(yè)創(chuàng)新。

入坑嵌入式開發(fā)多年的我,面對芯片及其相關(guān)的軟件開發(fā)技術(shù)的快速發(fā)展變化,經(jīng)常會去思考,這些發(fā)展變化的內(nèi)在推動力和外在合理性在哪里,這些發(fā)展變化對我們有哪些啟發(fā)和引導(dǎo),身處旋渦中心應(yīng)該何去何從,才能保證自己不被歷史洪流沖走,才能不斷提升自己的價值。

單片機

單片機是中文名,對應(yīng)的英文名稱是“Single Chip Microomputer”,很多人可能奇怪平時不是都說MCU(Micro Control Unit)嗎?其實MCU準確翻譯過來應(yīng)該叫微控制器,現(xiàn)在很多中文書籍都用這個詞,不用單片機了。因為單片機這個詞是很多年前的概念了,在那個年代半導(dǎo)體工藝還在起步階段,集成能力很差,往往是CPU一個芯片,SRAM一個芯片,F(xiàn)lash一個芯片,需要中斷的話又得有個專門處理中斷的芯片,所以一個完整可用的計算機系統(tǒng)是很多個芯片(Chip)做在一個PCB板上構(gòu)成的。

單片機呢?就是在一個芯片(Chip)上集成了CPU、SRAM、Flash及其他需要模塊,在一個Chip上實現(xiàn)一個微型計算機系統(tǒng),所以就叫Single Chip Microcomputer,也就是單片機了。其實從這個角度來講,單片機這個詞現(xiàn)在已經(jīng)沒意義了,因為現(xiàn)在的半導(dǎo)體工藝早就很厲害了,現(xiàn)在你買到的所有都是“單片機”,根本不存在分離式的所謂“多片機”。而且現(xiàn)代的單片機不但集成了CPU、SRAM、Flash等微型計算機不可少的部件,而且大多集成了很多內(nèi)部外設(shè),如Nand控制器、LCD控制器、串口通信、定時器、RTC等等,所以現(xiàn)在的單片機其實應(yīng)該叫SoC(System on Chip)。

英文是很準確的。這里有好幾個詞你可以體會下各自含義:microcomputer、computer、system、microcontroller。不嚴格區(qū)分的話這些詞很多時候可以互相替換和通用的,但是嚴格說其實各自有不同代指的。譬如computer,指的就是電腦,你可以理解為就是電腦,譬如筆記本、臺式機這些。當(dāng)然很多年前的電腦很龐大很笨重,所以computer就是指的這種有機箱外殼,有鍵盤鼠標(biāo),很龐大笨重,通用性強的電腦。而microcomputer指的就是單片機這類東西,它也是一個獨立的電腦系統(tǒng),有CPU和內(nèi)存和外設(shè)這些,能跑計算機程序。但是他相對于computer來說體積很小,而且不是通用的而是專用的,所以叫microcomputer。system呢?更傾向于整個系統(tǒng),也就是說system=microcomputer+各種外設(shè)。簡單理解就是,當(dāng)串口、LCD控制器等模塊進入了Chip內(nèi)部時,整個microcomputer就成為system了。所以其實system才是更有意義,更適合現(xiàn)代單片機芯片的一個名字。所以現(xiàn)在我們都把芯片叫SoC,這個名字更有價值。那microcontroller呢?現(xiàn)在很多單片機廠商都把自己的單片機叫microcontroller(微控制器),其實我個人理解,覺得microcontroller的重點在于controller,也就是說他們想強調(diào)這個chip中集成的system是一個controller,擅長控制。而不是一個DSP(擅長運算)。

嵌入式

嵌入式的全稱是嵌入式系統(tǒng),英文是Embeded system,所以可以看出嵌入式是一個system。為什么叫嵌入式呢?這里的嵌入指的是我們把這個system(硬件上表現(xiàn)為一個Chip)嵌入到某個設(shè)備中去。譬如冰箱的板卡上的芯片就是一個嵌入到冰箱中的system,負責(zé)控制用戶按鍵、冰箱照明燈、制冷系統(tǒng)等。可以看出,嵌入式系統(tǒng)這個名字主要是從芯片在使用時的組織形態(tài)來命名的。所以從這個角度講,只要是被嵌入到設(shè)備中的芯片都可以被叫做嵌入式系統(tǒng)。

那這個范圍太寬了,說真的你很難找到不屬于嵌入式的system······所以我經(jīng)常覺得嵌入式這個名詞根本是廢話,根本沒意義。好在這個理解只是廣義上的嵌入式的定義,但是我們平時講嵌入式大多時候是從狹義上理解的。

狹義上講,嵌入式是為了區(qū)別于單片機。我們經(jīng)常把芯片中不帶MMU(memory management unit)從而不支持虛擬地址,只能跑裸機或RTOS(典型如ucos、華為LiteOS、RT-Thread、freertos等)的system叫單片機(典型如STM32、NXP LPC系列、新的NXP imxRT1052系列等),而把芯片自帶MMU可以支持虛擬地址,能夠跑Linux、Vxworks、WinCE、Android這樣的操作系統(tǒng)的system叫嵌入式。所以linux WinCE等也常被叫做嵌入式操作系統(tǒng),就是這么回事。你仔細回顧下,其實大部分人在講單片機和嵌入式時都是從狹義角度出發(fā)的,并非廣義。

單片機的技術(shù)和市場狀況

單片機是出貨量最大的一類計算機。這個很好理解,因為單片機用途太廣泛了,所有家電內(nèi)置的控制系統(tǒng)幾乎都是單片機的,這個數(shù)目就很驚人了。還有各種公共設(shè)施,工廠自動化設(shè)備等幾乎也都是單片機控制的。單片機的廠商和品類也是非常多,我下面列舉幾類常用的。

  • 8位和4位機。這類單片機性能低配置低,但是優(yōu)勢是價格便宜。所以很多低端家電產(chǎn)品都會用到,小家電是這類單片機最大的市場。為了降低成本,這類單片機很多只能用匯編編程(當(dāng)然近幾年很多也提供了C編譯器),很多芯片采用bounding封裝(就是芯片內(nèi)核直接貼在PCB上然后用黑乎乎硬膠黏住,大家玩過LCD1602的看那后面那個圓盤型黑色的就是)。做這類產(chǎn)品的以前都是臺灣一些小芯片廠商。這些年中國大陸也涌現(xiàn)了很多這類芯片廠商,這些單片機行業(yè)大多對標(biāo)某個具體應(yīng)用領(lǐng)域,對行業(yè)需求很熟悉,直接推出適用這個行業(yè)的解決方案。外行的人可能根本都沒聽說過這種單片機的型號和相關(guān)信息。總的來說,這屬于比較低端的行業(yè),不太建議大家學(xué)習(xí)和進入。尤其現(xiàn)在中國在搞產(chǎn)業(yè)升級,落后的傳統(tǒng)家電產(chǎn)品不斷降價還賣不出去,相反各種高端功能和外觀的“產(chǎn)業(yè)升級”型家電產(chǎn)品利潤很高。所以這種適用于傳統(tǒng)老舊電子產(chǎn)品的芯片和技術(shù)其實并不值得去投入。
  • 51單片機。其實51單片機也是8位機,之所以單獨拿出來說是因為51單片機實在太出名了。實際上當(dāng)年單片機百家爭鳴的時候(大約1980年代吧)51單片機只是其中一種,還有很多其他很厲害的,可惜都被時間給雨打風(fēng)吹去了。51單片機之所以出名并活到現(xiàn)在,是因為Intel后來開放了51內(nèi)核的版權(quán),所以很多公司很多人可以毫無顧忌的使用它而不擔(dān)心付費或版權(quán)風(fēng)險。實際上到了現(xiàn)在(2018年),51單片機已經(jīng)是很老很沒有技術(shù)優(yōu)勢的解決方案了,但是為什么還在大量使用?主要有以下幾個原因:一是大量存量項目和存量開發(fā)者,這些人很熟悉51單片機,甚至很多老工程師可能只會51單片機,很多老的項目也不可能再去重新開發(fā)所以沿用了51單片機。二是51單片機也夠便宜,很多對性能沒有過多要求的產(chǎn)品干脆就用51也挺好。三是51內(nèi)核開放,所以很多需要內(nèi)置單片機核的SoC(譬如很多電容觸摸屏芯片,很多指紋識別芯片等)就會選擇用51核,不要錢還夠用嘛,不選這個選誰。很多同學(xué)問我還要不要學(xué)51單片機?我認為還是要學(xué)。一個原因是51單片機的開發(fā)用到的技術(shù)技能在開發(fā)別的單片機時照樣有用,所以學(xué)了51將來再學(xué)其他的也會快很多,時間不會白花的。另一個原因是確實有時候?qū)嶋H開發(fā)也會遇到用到51單片機的,所以學(xué)會了也算是個拿得出手的技能。所以如果你要學(xué)習(xí)單片機開發(fā),從51單片機入手絕對不會錯。但是要記得不要沉迷于51了,要迅速學(xué)會51單片機后,迅速繼續(xù)學(xué)習(xí)更現(xiàn)代更實用的其他單片機(譬如stm32)。很多人學(xué)會51后就不動了,這就好像幼兒園畢業(yè)就不繼續(xù)讀書了一樣,是不對的。
  • STM32單片機。終于到了STM32這個當(dāng)紅辣子雞了,ST于2007年發(fā)布了第一款STM32,至今已經(jīng)11年了。STM32是ARM Cortex-M內(nèi)核的單片機,實際上同樣使用ARM Cortex-M系列內(nèi)核的單片機還有很多(譬如NXP的LPC系列,原Freescale的K60系列,臺灣新唐的M051系列,國內(nèi)如兆易創(chuàng)新的GD32系列等),STM32只是其中的代表作而已。ARM這些年風(fēng)頭很強,在application級別的SoC中大勝Intel,現(xiàn)在手機行業(yè)的芯片都被ARM吃掉了,MIPS之類的更是被壓的生不如死。在單片機領(lǐng)域,ARM的Cortex-M系列(M0、M3、M4、M7)也是大獲全勝,很多半導(dǎo)體廠商都放棄了自己原來的架構(gòu)轉(zhuǎn)而做ARM內(nèi)核的單片機了。怎么說呢,個人覺得ARM內(nèi)核的單片機很適合當(dāng)前時代,尤其STM32這種,不管硬件配置還是開發(fā)工具都深得市場認可,普及度越來越高。強烈建議大學(xué)學(xué)單片機就學(xué)STM32,會玩STM32很有價值。至于GD32之類國產(chǎn)的類似STM32的單片機,我認為后面會越來越強,甚至?xí)鲗?dǎo)市場把洋品牌趕出中國。這些芯片的開發(fā)方式也很類同于STM32,所以會了STM32開發(fā)很容易切過去,不用擔(dān)心。
  • 其他單片機。我指的是PIC、ATmega、MSP430、STM8之類的,這些不是很熟悉所以不予詳細論述??偟膩碚f,這些單片機性價比都不錯,在各自領(lǐng)域都有一定競爭力,但是還是不如STM32使用領(lǐng)域?qū)拸V。所以除非是公司研發(fā)用到,否則不建議主動學(xué)習(xí)。
  • 高性能高價格單片機。這里我特指的是如STM32F7、STM32H7、NXP imxRT1052之類的單片機。這類雖然是單片機,但是性能比一般單片機強勁很多,外設(shè)也復(fù)雜很多,甚至需要外接SDRAM來提供更大內(nèi)存,外接SLC Nand或Spiflash來提供存儲。同時從價格角度講這些單片機大多在人民幣30元以上,甚至高達100多元。這些真的是單片機中的戰(zhàn)斗機,價格都能嚇?biāo)廊肆恕τ谶@類單片機,我個人其實很不看好。其實寫這篇長文,就是想解釋我為什么不看好這類單片機。感興趣的同學(xué)可以繼續(xù)看下文分析。

    嵌入式的技術(shù)和市場狀況

    嵌入式領(lǐng)域目前最火的就是ARM+linux和ARM+android。
    芯片都是基于ARM的,低端的有ARM9、ARM11,高端的有Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A53、Cortex-A57等。從單核心到雙核心、四核心、八核心都有。廠商也一大堆,國產(chǎn)進口臺產(chǎn)等都有。覆蓋面也廣,消費級、工業(yè)級、車規(guī)級都有。

嵌入式級別的ARM因為有MMU所以可以很好的跑復(fù)雜OS,因此雖然芯片本身也可以裸機運行,但是基本沒有人用這類芯片來跑裸機或者RTOS的。都會上操作系統(tǒng)。簡單說,如果產(chǎn)品不需要華麗美觀的人機界面就上linux(譬如路由器、網(wǎng)絡(luò)攝像機),如果需要人機界面但是界面簡單注重功能和穩(wěn)定性,那就上linux+QT(譬如工控HMI、電動車充電樁、停車場顯示),如果產(chǎn)品很注重人機交互的用戶體驗,那就上Android(譬如智能手機、智能電視機、游戲機等)。

總的來說,嵌入式系統(tǒng)的復(fù)雜性高、開發(fā)難度大、學(xué)習(xí)曲線長。因為軟件上的復(fù)雜性,導(dǎo)致出bug的可能性大。一旦出bug查找起來也更加需要技巧和經(jīng)驗。所以很多公司用嵌入式linux或android做產(chǎn)品問題很多,這一方面和開發(fā)者的技術(shù)能力有關(guān),另一方面和公司不能花時間和成本去潛心把產(chǎn)品做穩(wěn)定做成熟有關(guān)。

嵌入式和單片機的真正區(qū)別

其實分析到這里,大家也知道了嵌入式和單片機的真正區(qū)別,那就是有沒有l(wèi)inux或android這類復(fù)雜操作系統(tǒng)。

單片機不是裸奔就是RTOS,其實玩過RTOS和linux的同學(xué)都知道,RTOS雖然也叫操作系統(tǒng),但是和linux這種根本不是一個級別。差遠了,更不用說android了,android里隨便拿出來一個模塊代碼量都比一個完整的RTOS都龐大,都要復(fù)雜。所以有沒有l(wèi)inux/android這類復(fù)雜OS對開發(fā)來說真的很不一樣。

譬如從C語言角度來講,我的《嵌入式linux核心課程》第4部分《4.C語言深度解析》這個課程,就是專門針對嵌入式linux開發(fā)中C語言功力不足的人推出的。很多做了多年單片機的同學(xué)看了后都感慨,真的是不做linux不知道C語言水深。結(jié)構(gòu)體和指針這些元素在單片機編程中完全體現(xiàn)不出來魅力,但是在linux內(nèi)核中卻得到了完美的發(fā)揮和釋放。不去真正研究,實在很難體會出那種美感和震撼。

嵌入式和單片機的交集

嵌入式和單片機有沒有交集呢?這里說的交集意思是:某些產(chǎn)品既可以用嵌入式來解決,也可以用單片機來解決。

以前是沒有的。你想想一般單片機幾塊錢十幾塊錢,而嵌入式系統(tǒng)SoC加上DDR和Flash至少幾十塊,怎么可能有交集。就算單片機能做的事你嵌入式也能做,但是我十幾塊錢能搞定的工作憑什么要花幾十塊上嵌入式呢?所以以前這2者沒交集。根本不是一個檔次范圍內(nèi)的事兒。

但是近兩年情況發(fā)生了變化。首先是很多高端單片機的配置和價格越來越高。譬如2017年10月發(fā)布的NXP imxRT1052系列單片機,號稱跨界處理器。為什么叫跨界?跨的是哪兩界?

我們知道單片機嘛,就要單芯片提供整個system,簡單說至少cpu、sram、flash這三大件不能少,要不然根本無法獨立運行嘛。所以你看不管是51單片機還是STM32都是內(nèi)部有CPU,有SRAM,有Flash的,這就是典型的單片機。而嵌入式SoC不同,譬如S5PV210內(nèi)部只有CPU和少量SRAM,它要正常工作需要外部集成DDR SDRAM和Flash(EMMC)。所以嵌入式的system不能在一個chip上,一般典型的嵌入式系統(tǒng)的system由一塊核心板構(gòu)成,這塊核心板上集成了SoC、DDR SDRAM、Flash、電源模塊等,這叫嵌入式系統(tǒng)。而所謂跨界處理器,跨的就是單片機和嵌入式這兩界。這個imxRT1052內(nèi)部集成了CPU和SRAM,但是沒有Flash,它需要外部提供獨立的Flash芯片才能組成一個system。所以這東西既不是典型的單片機也不是典型的嵌入式,但是既像單片機,又像嵌入式,所以NXP說這個是跨界處理器。甭管好不好用,名字聽起來酷酷的。

順便多說一句,NXP為什么這么設(shè)計?其實是因為單片機內(nèi)置Flash都很貴,imxRT1052為什么能比同樣性能的STM32便宜那么多,主要原因就是因為他沒有內(nèi)置Flash。所以很多人都說ST落后于NXP了,其實沒有。只能說NXP這個設(shè)計在單片機界是一種創(chuàng)新,對比來看顯得STM32F7、STM32H7性價比太差了。不過實話實說,STM32的F7和H7確實性價比很垃圾,我都不知道就一個單片機賣一百多是準備上天?誰給ST的勇氣這么定價的,梁靜茹嗎?

算了,懶得吐槽F7和H7了。就說這個跨界處理器imxRT1052吧,這東西主頻有600MHz,有消費級和工業(yè)級,帶各種外設(shè)(反正你能用到的基本都有了),可以帶最大分辨率1024*768的TFT LCD(當(dāng)然了需要外接SDRAM作為顯存)。這東西相對于普通單片機來說就是神一般的存在啊,一般玩單片機的看到這個數(shù)據(jù)嚇得直接就跪下叫爸爸了。再說價格,這東西官方公布的批量價格是人民幣30元左右。想一想感覺性價比爆棚啊。其實STM32也沒那么弱,F(xiàn)7和H7的主頻雖然沒有600MHz那么變態(tài),但是H7的性能整體比RT1052并沒有太大劣勢。就算不叫爸爸一聲大哥總逃不了。之所以F7和H7沒掀起大浪關(guān)鍵還是價格太嚇人了,一般人聽說100多直接心里罵娘轉(zhuǎn)身走人了,根本不想了解你的性能。而imxRT1052的30元確實很誘人,聽起來似乎真的是高性能低價格了,很多人甚至據(jù)此判斷NXP要“干死”ST了。

跨界處理器的尷尬

高性能跨界處理器初看似乎很不錯,實際上并沒有那么容易成功。原因就在于這種高性能單片機實際上和低性能高性價比的嵌入式linux解決方案比并沒有優(yōu)勢。

是的,很多人覺得600M主頻的單片機才30塊很便宜很厲害。那是因為你不熟悉嵌入式的解決方案。實際上imxRT1052單芯片是不能很好工作的,他要實現(xiàn)高性能至少需要外置Flash和SDRAM,就算只是1Gbit的SLC Nand和32MB 的SDRAM,再加上RT1052BOM成本也在50元左右了。再加上RT1052雖然號稱批量30元,但是實際上小批量拿貨價都在40-50元,所以目前市場上RT1052的核心板售價都在120-150元之間了。這個價格其實并不便宜,有很多嵌入式linux的解決方案都比這個性價比高。

譬如NXP的imx6ul,內(nèi)置Cortex-A7單核心,最高主頻1.2GHz,也是工業(yè)級,各種你能想到的外設(shè)都有了。標(biāo)配256MB SLC Nand和256MB DDR的核心板,市場最低售價119元,比RT1052還低一些。

實際上還有性價比更高的方案,譬如我們深創(chuàng)客推出的NUC972牛頓板中使用的新唐NUC972方案,內(nèi)置64MB DDR,外部配置1Gbit SLC Nand。主板批量可以做到100元內(nèi)。性價比完勝RT1052這類高性能單片機。

很多人可能會說,我不會嵌入式linux開發(fā),我只會單片機開發(fā)啊。所以你linux的方案性價比再高跟我沒關(guān)系,單片機的才跟我有關(guān)系。我想說這絕對是一種誤解,百分百的誤解。為什么?

單片機就三個字,你別覺得叫單片機的都是一種東西。單片機和單片機是不一樣的,你覺得主頻600MHz的單片機帶1024*768分辨率的TFT LCD,它的開發(fā)方式和難度會和10塊錢不到的STM32F103一樣?軟件開發(fā)是跟著硬件走的,什么樣性能的硬件就應(yīng)該配套什么樣的軟件開發(fā)方式和相應(yīng)資源,也會要求開發(fā)者具備某種相應(yīng)素質(zhì)。所以不要覺得都是單片機就親切,就能玩。實際上要把高端單片機完全發(fā)揮性能做出好看的GUI并且用到項目中解決掉所有的BUG并不是一件容易的事情。

結(jié)語

這篇文章寫的比較淺,主要是講了下單片機和嵌入式系統(tǒng)的由來和差異。引出了高端單片機(STM32H7、imxRT1052等)和高性價比嵌入式linux解決方案的的一個對比。主要是希望拋給大家一個思考點,引導(dǎo)大家去思考如何分析和評價一款芯片方案,從而在做項目時能夠更好的選型適合自己的芯片方案??偟膩碚f,我的觀點是:能用幾塊十幾塊的單片機就用單片機,如果這些高性價比的單片機不能滿足要求非要上幾十塊的高性能單片機,那你確實應(yīng)該考慮下是否應(yīng)該一步到位上高性價比的嵌入式linux解決方案。很多人擔(dān)心linux不會開發(fā),其實不應(yīng)該這么考慮。真正沉下去做項目,你會發(fā)現(xiàn)用嵌入式linux并沒有那么難,而且高端單片機加上RTOS和一堆框架、協(xié)議棧之后也不簡單。出了問題也不好找。而且嵌入式linux經(jīng)過多年積累,其方案穩(wěn)定性大多都不錯。而高端單片機的配套RTOS和框架協(xié)議棧等中間件往往處在發(fā)展初期,往往bug很多。因此,建議大家值得投入時間去學(xué)習(xí)嵌入式linux軟件開發(fā)的技能。

今天先講到這,后續(xù)有時間再繼續(xù)更深度來高性價比的嵌入式linux解決方案的各種技術(shù)細節(jié)。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI