MCU定義:
微控制單元(Microcontroller Unit;MCU) ,又稱單片微型計算機(jī)(Single Chip Microcomputer )或者單片機(jī),是把中央處理器(Central Process Unit;CPU)的頻率與規(guī)格做適當(dāng)縮減,并將內(nèi)存(memory)、計數(shù)器(Timer)、USB、A/D轉(zhuǎn)換、UART、PLC、DMA等周邊接口,甚至LCD驅(qū)動電路都整合在單一芯片上,形成芯片級的計算機(jī),為不同的應(yīng)用場合做不同組合控制。諸如手機(jī)、PC外圍、遙控器,至汽車電子、工業(yè)上的步進(jìn)馬達(dá)、機(jī)器手臂的控制等,都可見到MCU的身影。
主要分類
按用途分類:
通用型:將可開發(fā)的資源(ROM、RAM、I/O、 EPROM)等全部提供給用戶。
專用型:其硬件及指令是按照某種特定用途而設(shè)計,例如錄音機(jī)機(jī)芯控制器、打印機(jī)控制器、電機(jī)控制器等。
按其基本操作處理的數(shù)據(jù)位數(shù)分類:
根據(jù)總線或數(shù)據(jù)暫存器的寬度,單片機(jī)又分為1位、4位、8位、16位、32位甚至64位單片機(jī)。4位MCU大部份應(yīng)用在計算器、車用儀表、車用防盜裝置、呼叫器、無線電話、CD播放器、LCD驅(qū)動控制器、LCD游戲機(jī)、兒童玩具、磅秤、充電器、胎壓計、溫濕度計、遙控器及傻瓜相機(jī)等;8位MCU大部份應(yīng)用在電表、馬達(dá)控制器、電動玩具機(jī)、變頻式冷氣機(jī)、呼叫器、傳真機(jī)、來電辨識器(CallerID)、電話錄音機(jī)、CRT顯示器、鍵盤及USB等;8位、16位單片機(jī)主要用于一般的控制領(lǐng)域,一般不使用操作系統(tǒng), 16位MCU大部份應(yīng)用在行動電話、數(shù)字相機(jī)及攝錄放影機(jī)等;32位MCU大部份應(yīng)用在Modem、GPS、PDA、HPC、STB、Hub、Bridge、Router、工作站、ISDN電話、激光打印機(jī)與彩色傳真機(jī); 32位用于網(wǎng)絡(luò)操作、多媒體處理等復(fù)雜處理的場合,一般要使用嵌入式操作系統(tǒng)。64位MCU大部份應(yīng)用在高階工作站、多媒體互動系統(tǒng)、高級電視游樂器(如SEGA的Dreamcast及Nintendo的GameBoy)及高級終端機(jī)等。
8位MCU工作頻率在16~50MHz之間,強(qiáng)調(diào)簡單效能、低成本應(yīng)用,在目前MCU市場總值仍有一定地位,而不少M(fèi)CU業(yè)者也持續(xù)為8bit MCU開發(fā)頻率調(diào)節(jié)的節(jié)能設(shè)計,以因應(yīng)綠色時代的產(chǎn)品開發(fā)需求。
16位MCU,則以16位運(yùn)算、16/24位尋址能力及頻率在24~100MHz為主流規(guī)格,部分16bit MCU額外提供32位加/減/乘/除的特殊指令。由于32bit MCU出現(xiàn)并持續(xù)降價及8bit MCU簡單耐用又便宜的低價優(yōu)勢下,夾在中間的16bit MCU市場不斷被擠壓,成為出貨比例中最低的產(chǎn)品。
32位MCU可說是MCU市場主流,單顆報價在1.5~4美元之間,工作頻率大多在100~350MHz之間,執(zhí)行效能更佳,應(yīng)用類型也相當(dāng)多元。但32位MCU會因為操作數(shù)與內(nèi)存長度的增加,相同功能的程序代碼長度較8/16bit MCU增加30~40%,這導(dǎo)致內(nèi)嵌OTP/FlashROM內(nèi)存容量不能太小,而芯片對外腳位數(shù)量暴增,進(jìn)一步局限32bit MCU的成本縮減能力。
內(nèi)嵌程序存儲器類型
下面以51單片機(jī)為例(MCS-51系列MCU是我國使用最多的單片機(jī)),根據(jù)其內(nèi)部存儲器的類型不同可以分為以下幾個基本型:
1.無ROM型 :8031
2.ROM型:8051
3.EPROM型:8751
4.EEPROM 型:8951
5.增強(qiáng)型:8032/8052/8752/8952/C8051F
MCU按其存儲器類型可分為無片內(nèi)ROM型和帶片內(nèi)ROM型兩種。對于無片內(nèi)ROM型的芯片,必須外接EPROM才能應(yīng)用(典型芯片為8031)。帶片內(nèi)ROM型的芯片又分為片內(nèi)EPROM型(典型芯片為87C51)、MASK片內(nèi)掩模ROM型(典型芯片為8051)、片內(nèi)FLASH型(典型芯片為89C51)等類型,一些公司還推出帶有片內(nèi)一次性可編程ROM(One Time Programming, OTP)的芯片(典型芯片為97C51)。MASKROM的MCU價格便宜,但程序在出廠時已經(jīng)固化,適合程序固定不變的應(yīng)用場合;FLASH ROM的MCU程序可以反復(fù)擦寫,靈活性很強(qiáng),但價格較高,適合對價格不敏感的應(yīng)用場合或做開發(fā)用途;OTPROM的MCU價格介于前兩者之間,同時又擁有一次性可編程能力,適合既要求一定靈活性,又要求低成本的應(yīng)用場合,尤其是功能不斷翻新、需要迅速量產(chǎn)的電子產(chǎn)品。
由于MCU強(qiáng)調(diào)是最大密集度與最小芯片面積,以有限的程序代碼達(dá)成控制功能,因此當(dāng)今MCU多半使用內(nèi)建的MaskROM、OTP ROM、EEPROM或Flash內(nèi)存來儲存韌體碼,MCU內(nèi)建Flash內(nèi)存容量從低階4~64KB到最高階512KB~2MB不等。
存儲器結(jié)構(gòu)
MCU根據(jù)其存儲器結(jié)構(gòu)可分為哈佛(Harvard)結(jié)構(gòu)和馮?諾依曼(Von Neumann)結(jié)構(gòu)。現(xiàn)在的單片機(jī)絕大多數(shù)都是基于馮·諾伊曼結(jié)構(gòu)的,這種結(jié)構(gòu)清楚地定義了嵌入式系統(tǒng)所必需的四個基本部分:一個中央處理器核心,程序存儲器(只讀存儲器或者閃存)、數(shù)據(jù)存儲器(隨機(jī)存儲器)、一個或者更多的定時/計時器,還有用來與外圍設(shè)備以及擴(kuò)展資源進(jìn)行通信的輸入/輸出端口,所有這些都被集成在單個集成電路芯片上。
指令結(jié)構(gòu)
MCU根據(jù)指令結(jié)構(gòu)又可分為CISC(Complex Instruction Set Computer,復(fù)雜指令集計算機(jī))和RISC(Reduced Instruction Set Comuter,精簡指令集計算機(jī)微控制器)
技術(shù)原理
MCU同溫度傳感器之間通過I2C總線連接。I2C總線占用2條MCU輸入輸出口線,二者之間的通信完全依靠軟件完成。溫度傳感器的地址可以通過2根地址引腳設(shè)定,這使得一根I2C總線上可以同時連接8個這樣的傳感器。本方案中,傳感器的7位地址已經(jīng)設(shè)定為1001000。MCU需要訪問傳感器時,先要發(fā)出一個8位的寄存器指針,然后再發(fā)出傳感器的地址(7位地址,低位是WR信號)。傳感器中有3個寄存器可供MCU使用,8位寄存器指針就是用來確定MCU究竟要使用哪個寄存器的。本方案中,主程序會不斷更新傳感器的配置寄存器,這會使傳感器工作于單步模式,每更新一次就會測量一次溫度。
要讀取傳感器測量值寄存器的內(nèi)容,MCU必須首先發(fā)送傳感器地址和寄存器指針。MCU發(fā)出一個啟動信號,接著發(fā)出傳感器地址,然后將RD/WR管腳設(shè)為高電平,就可以讀取測量值寄存器。
為了讀出傳感器測量值寄存器中的16位數(shù)據(jù),MCU必須與傳感器進(jìn)行兩次8位數(shù)據(jù)通信。當(dāng)傳感器上電工作時,默認(rèn)的測量精度為9位,分辨力為0.5 C/LSB(量程為-128.5 C至128.5 C)。本方案采用默認(rèn)測量精度,根據(jù)需要,可以重新設(shè)置傳感器,將測量精度提高到12位。如果只要求作一般的溫度指示,比如自動調(diào)溫器,那么分辨力達(dá)到1 C就可以滿足要求了。這種情況下,傳感器的低8位數(shù)據(jù)可以忽略,只用高8位數(shù)據(jù)就可以達(dá)到分辨力1 C的設(shè)計要求。由于讀取寄存器時是按先高8位后低8位的順序,所以低8位數(shù)據(jù)既可以讀,也可以不讀。只讀取高8位數(shù)據(jù)的好處有二,第一是可以縮短MCU和傳感器的工作時間,降低功耗;第二是不影響分辨力指標(biāo)。
MCU讀取傳感器的測量值后,接下來就要進(jìn)行換算并將結(jié)果顯示在LCD上。整個處理過程包括:判斷顯示結(jié)果的正負(fù)號,進(jìn)行二進(jìn)制碼到BCD碼的轉(zhuǎn)換,將數(shù)據(jù)傳到LCD的相關(guān)寄存器中。
數(shù)據(jù)處理完畢并顯示結(jié)果之后,MCU會向傳感器發(fā)出一個單步指令。單步指令會讓傳感器啟動一次溫度測試,然后自動進(jìn)入等待模式,直到模數(shù)轉(zhuǎn)換完畢。MCU發(fā)出單步指令后,就進(jìn)入LPM3模式,這時MCU系統(tǒng)時鐘繼續(xù)工作,產(chǎn)生定時中斷喚醒CPU。定時的長短可以通過編程調(diào)整,以便適應(yīng)具體應(yīng)用的需要。
主要區(qū)別
在20世紀(jì)最值得人們稱道的成就中,就有集成電路和電子計算機(jī)的發(fā)展。20世紀(jì)70年代出現(xiàn)的微型計算機(jī),在科學(xué)技術(shù)界引起了影響深遠(yuǎn)的變革。在70年代中期,微型計算機(jī)家族中又分裂出一個小小的派系--單片機(jī)。隨著4位單片機(jī)出現(xiàn)之后,又推出了8位的單片機(jī)。MCS48系列,特別是MCS51系列單片機(jī)的出現(xiàn),確立了單片機(jī)作為微控制器(MCU)的地位,引起了微型計算機(jī)領(lǐng)域新的變革。在當(dāng)今世界上,微處理器(MPU)和微控制器(MCU)形成了各具特色的兩個分支。它們互相區(qū)別,但又互相融合、互相促進(jìn)。與微處理器(MPU)以運(yùn)算性能和速度為特征的飛速發(fā)展不同,微控制器(MCU)則是以其控制功能的不斷完善為發(fā)展標(biāo)志的。
CPU(Central Processing Unit,中央處理器)發(fā)展出來三個分枝,一個是DSP(Digital Signal Processing/Processor,數(shù)字信號處理),另外兩個是MCU(Micro Control Unit,微控制器單元)和MPU(Micro Processor Unit,微處理器單元)。
MCU集成了片上外圍器件;MPU不帶外圍器件(例如存儲器陣列),是高度集成的通用結(jié)構(gòu)的處理器,是去除了集成外設(shè)的MCU;DSP運(yùn)算能力強(qiáng),擅長很多的重復(fù)數(shù)據(jù)運(yùn)算,而MCU則適合不同信息源的多種數(shù)據(jù)的處理診斷和運(yùn)算,側(cè)重于控制,速度并不如DSP。MCU區(qū)別于DSP的最大特點在于它的通用性,反應(yīng)在指令集和尋址模式中。DSP與MCU的結(jié)合是DSC,它終將取代這兩種芯片。
1.對密集的乘法運(yùn)算的支持
GPP不是設(shè)計來做密集乘法任務(wù)的,即使是一些現(xiàn)代的GPP,也要求多個指令周期來做一次乘法。而DSP處理器使用專門的硬件來實現(xiàn)單周期乘 法。DSP處理器還增加了累加器寄存器來處理多個乘積的和。累加器寄存器通常比其他寄存器寬,增加稱為結(jié)果bits的額外bits來避免溢出。同時,為了 充分體現(xiàn)專門的乘法-累加硬件的好處,幾乎所有的DSP的指令集都包含有顯式的MAC指令。
2. 存儲器結(jié)構(gòu)
傳統(tǒng)上,GPP使用馮.諾依曼存儲器結(jié)構(gòu)。這種結(jié)構(gòu)中,只有一個存儲器空間通過一組總線(一個地址總線和一個數(shù)據(jù)總線)連接到處理器核。通常,做一次乘法會發(fā)生4次存儲器訪問,用掉至少四個指令周期。
大多數(shù)DSP采用了哈佛結(jié)構(gòu),將存儲器空間劃分成兩個,分別存儲程序和數(shù)據(jù)。它們有兩組總線連接到處理器核,允許同時對它們進(jìn)行訪問。這種安排將處理器存儲器的帶寬加倍,更重要的是同時為處理器核提供數(shù)據(jù)與指令。在這種布局下,DSP得以實現(xiàn)單周期的MAC指令。
典型的高性能GPP實際上已包含兩個片內(nèi)高速緩存,一個是數(shù)據(jù),一個是指令,它們直接連接到處理器核,以加快運(yùn)行時的訪問速度。從物理上說,這種片內(nèi)的雙存儲器和總線的結(jié)構(gòu)幾乎與哈佛結(jié)構(gòu)的一樣了。然而從邏輯上說,兩者還是有重要的區(qū)別。
GPP使用控制邏輯來決定哪些數(shù)據(jù)和指令字存儲在片內(nèi)的高速緩存里,其程序員并不加以指定(也可能根本不知道)。與此相反,DSP使用多個片內(nèi) 存儲器和多組總線來保證每個指令周期內(nèi)存儲器的多次訪問。在使用DSP時,程序員要明確地控制哪些數(shù)據(jù)和指令要存儲在片內(nèi)存儲器中。程序員在寫程序時,必 須保證處理器能夠有效地使用其雙總線。
此外,DSP處理器幾乎都不具備數(shù)據(jù)高速緩存。這是因為DSP的典型數(shù)據(jù)是數(shù)據(jù)流。也就是說,DSP處理器對每個數(shù)據(jù)樣本做計算后,就丟棄了,幾乎不再重復(fù)使用。
3.零開銷循環(huán)
如果了解到DSP算法的一個共同的特點,即大多數(shù)的處理時間是花在執(zhí)行較小的循環(huán)上,也就容易理解,為什么大多數(shù)的DSP都有專門的硬件,用于 零開銷循環(huán)。所謂零開銷循環(huán)是指處理器在執(zhí)行循環(huán)時,不用花時間去檢查循環(huán)計數(shù)器的值、條件轉(zhuǎn)移到循環(huán)的頂部、將循環(huán)計數(shù)器減1。
與此相反,GPP的循環(huán)使用軟件來實現(xiàn)。某些高性能的GPP使用轉(zhuǎn)移預(yù)報硬件,幾乎達(dá)到與硬件支持的零開銷循環(huán)同樣的效果。
4.定點計算
大多數(shù)DSP使用定點計算,而不是使用浮點。雖然DSP的應(yīng)用必須十分注意數(shù)字的精確,用浮點來做應(yīng)該容易的多,但是對DSP來說,廉價也是非 常重要的。定點機(jī)器比起相應(yīng)的浮點機(jī)器來要便宜(而且更快)。為了不使用浮點機(jī)器而又保證數(shù)字的準(zhǔn)確,DSP處理器在指令集和硬件方面都支持飽和計算、舍 入和移位。
5.專門的尋址方式
DSP處理器往往都支持專門的尋址模式,它們對通常的信號處理操作和算法是很有用的。例如,模塊(循環(huán))尋址(對實現(xiàn)數(shù)字濾波器延時線很有用)、位倒序?qū)ぶ罚▽FT很有用)。這些非常專門的尋址模式在GPP中是不常使用的,只有用軟件來實現(xiàn)。
6.執(zhí)行時間的預(yù)測
大多數(shù)的DSP應(yīng)用(如蜂窩電話和調(diào)制解調(diào)器)都是嚴(yán)格的實時應(yīng)用,所有的處理必須在指定的時間內(nèi)完成。這就要求程序員準(zhǔn)確地確定每個樣本需要多少處理時間,或者,至少要知道,在最壞的情況下,需要多少時間。如果打算用低成本的GPP去完成實時信號處理的任務(wù),執(zhí)行時間的預(yù)測大概不會成為什么問題,應(yīng)為低成本GPP具有相對直接的結(jié)構(gòu),比較容易預(yù)測執(zhí)行時間。然而,大多數(shù)實時DSP應(yīng)用所要求的處理能力是低成本GPP所不能提供的。 這時候,DSP對高性能GPP的優(yōu)勢在于,即便是使用了高速緩存的DSP,哪些指令會放進(jìn)去也是由程序員(而不是處理器)來決定的,因此很容易判斷指令是從高速緩存還是從存儲器中讀取。DSP一般不使用動態(tài)特性,如轉(zhuǎn)移預(yù)測和推理執(zhí)行等。因此,由一段給定的代碼來預(yù)測所要求的執(zhí)行時間是完全直截了當(dāng)?shù)?。從而使程序員得以確定芯片的性能限制。
7.定點DSP指令集
定點DSP指令集是按兩個目標(biāo)來設(shè)計的:使處理器能夠在每個指令周期內(nèi)完成多個操作,從而提高每個指令周期的計算效率。將存貯DSP程序的存儲器空間減到最?。ㄓ捎诖鎯ζ鲗φ麄€系統(tǒng)的成本影響甚大,該問題在對成本敏感的DSP應(yīng)用中尤為重要)。為了實現(xiàn)這些目標(biāo),DSP處理器的指令集通常都允許程序員在一個指令內(nèi)說明若干個并行的操作。例如,在一條指令包含了MAC操作,即同時的一個或兩個數(shù)據(jù)移動。在典型的例子里,一條指令就包含了計算FIR濾波器的一節(jié)所需要的所有操作。這種高效率付出的代價是,其指令集既不直觀,也不容易使用(與GPP的指令集相比)。 GPP的程序通常并不在意處理器的指令集是否容易使用,因為他們一般使用象C或C++等高級語言。而對于DSP的程序員來說,不幸的是主要的DSP應(yīng)用程序都是用匯編語言寫的(至少部分是匯編語言優(yōu)化的)。這里有兩個理由:首先,大多數(shù)廣泛使用的高級語言,例如C,并不適合于描述典型的DSP算法。其次, DSP結(jié)構(gòu)的復(fù)雜性,如多存儲器空間、多總線、不規(guī)則的指令集、高度專門化的硬件等,使得難于為其編寫高效率的編譯器。 即便用編譯器將C源代碼編譯成為DSP的匯編代碼,優(yōu)化的任務(wù)仍然很重。典型的DSP應(yīng)用都具有大量計算的要求,并有嚴(yán)格的開銷限制,使得程序的優(yōu)化必不可少(至少是對程序的最關(guān)鍵部分)。因此,考慮選用DSP的一個關(guān)鍵因素是,是否存在足夠的能夠較好地適應(yīng)DSP處理器指令集的程序員。
8.開發(fā)工具的要求
因為DSP應(yīng)用要求高度優(yōu)化的代碼,大多數(shù)DSP廠商都提供一些開發(fā)工具,以幫助程序員完成其優(yōu)化工作。例如,大多數(shù)廠商都提供處理器的仿真工具,以準(zhǔn)確地仿真每個指令周期內(nèi)處理器的活動。無論對于確保實時操作還是代碼的優(yōu)化,這些都是很有用的工具。 GPP廠商通常并不提供這樣的工具,主要是因為GPP程序員通常并不需要詳細(xì)到這一層的信息。GPP缺乏精確到指令周期的仿真工具,是DSP應(yīng)用開發(fā)者所面臨的的大問題:由于幾乎不可能預(yù)測高性能GPP對于給定任務(wù)所需要的周期數(shù),從而無法說明如何去改善代碼的性能。