單片機應用系統(tǒng)由硬件和軟件組成,軟件的載體是硬件的程序存儲器,程序存儲器采用只讀存儲器,這種存儲器在電源關閉后,仍能保存程序,在系統(tǒng)上電后,CPU可取出這些指令重新執(zhí)行。只讀存儲器(Read Only Memory,ROM)中的信息一旦寫入,就不能隨意更改,特別是不能在程序運行過程中寫入新的內(nèi)容,
故稱只讀存儲器。向ROM中寫入信息稱為ROM編程。根據(jù)編程方式不同,
掩模ROM.
在制造過程中編程,是以掩模工藝實現(xiàn)的,因此稱為掩模ROM。這種芯片存儲結(jié)構(gòu)簡單,集成度高,但是由于掩模工藝成本較高,只適合于大批量生產(chǎn)。可編程ROM(PROM).
芯片出廠時沒有任何程序信息,用獨立的編程器寫入。但是PROM只能寫一次,寫入內(nèi)容后,就不能再修改。EPROM.
用紫外線擦除,用電信號編程。在芯片外殼的中間位置有一個圓形窗口,對該窗口照射紫外線就可擦除原有的信息,使用編程器可將調(diào)試完畢的程序?qū)懭搿?/p>E2PROM(EEPROM).
用電信號擦除,用電信號編程。對E2PROM的讀寫操作與RAM存儲器幾乎沒什么差別,只是寫入速度慢一些,但斷電后仍能保存信息。Flash ROM.
閃速存儲器(簡稱閃存),是在EPROM和E2PROM的基礎上發(fā)展起來的一種電擦除型只讀存儲器。特點是可快速在線修改其存儲單元中的數(shù)據(jù),改寫次數(shù)達一萬次(ROM都有改寫次數(shù)),讀寫速度快,存取時間可達70ns,而成本比E2PROM低得多,因此正逐步取代E2PROM。
注意:更多存儲器內(nèi)容請參考,《電子技術基礎》數(shù)字部分(第五版) 主編 康華光. 第七章,或者 電工學(第七版)(下冊) 主編 秦曾煌 第22章.
燒寫器、燒錄器、編程器、下載器、仿真器、調(diào)試器單片機編程器(燒寫器、燒錄器)是用來將程序代碼寫入存儲器芯片或者單片機內(nèi)部的工具。編程器主要修改只讀存儲器中的程序,編程器通常與計算機連接,再配合編程軟件使用。如下圖所示是一個典型的編程器外形。圖中黑色的是集成電路插座(也有下載編程器,不用取下芯片,涉及ISP、ICP,后面有介紹),通過撥動手柄可以將置于其中的集成電路芯片鎖緊或松開。編程時鎖緊以保證接觸好,編程完畢松開,可以更換下一片芯片。
當芯片是雙列直插形式時,直接插在座子上就可以燒寫了,但是如果遇到下圖所示的各種封裝形式的芯片,又如何燒寫呢?一種方法是使用適配器,下圖是各種封裝芯片所使用的適配器。
下載器(下載線)是將編譯好的機器碼寫進單片機的工具。程序經(jīng)過編譯生成目標代碼,然后通過下載軟件和下載器下載到單片機的ROM或者Flash中。下載器主要來控制編程時序等。
仿真器(調(diào)試器)指以調(diào)試單片機軟件為目的而專門設計制作的一套專用的硬件裝置。單片機在體系結(jié)構(gòu)上與PC機是完全相同的,也包括中央處理器,輸入輸出接口,存儲器等基本單元,因而與PC機等設備的軟件結(jié)構(gòu)也是類似的。因為單片機在軟件開發(fā)的過程中需要對軟件進行調(diào)試,觀察其中間結(jié)果,排除軟件中存在的問題。但是由于單片機的應用場合問題,其不具備標準的輸入輸出裝置,受存儲空間限制,也難以容納用于調(diào)試程序的專用軟件,因此要對單片機軟件進行調(diào)試,就必須使用單片機仿真器。單片機仿真器具有基本的輸入輸出裝置,具備支持程序調(diào)試的軟件,使得單片機開發(fā)人員可以通過單片機仿真器輸入和修改程序,觀察程序運行結(jié)果與中間值,同時對與單片機配套的硬件進行檢測與觀察,可以大大提高單片機的編程效率和效果。(許多仿真器具有下載器的功能)
片內(nèi)Flash存儲器的編程器Flash存儲器是一種電擦除型只讀存儲器。它的主要特點是在不加電的情況下能長期保持存儲的信息,又可快速在線修改其存儲單元中的數(shù)據(jù),其在線改寫功能使單片機的程序改寫和固化過程更加簡便。目前很多單片機都用Flash作為片內(nèi)程序存儲器。當片內(nèi)的Flash存儲器滿足要求時,不必擴展外部程序存儲器。
下面討論如何把已經(jīng)調(diào)試完畢的程序?qū)懭階T89S51單片機中的片內(nèi)Flash存儲器。
AT89S51單片機片內(nèi)4KB的Flash存儲器的特點:
可擦寫壽命10,000次
數(shù)據(jù)保存時間10年
最大讀取時間150ns,頁編程時間10ns
具有3級加密算法,使得AT89S系列單片機的解密變得不可能,程序的加密性大大加強
AT89S51出廠時,F(xiàn)lash存儲器處于全部空白狀態(tài)(各單元均為FFH),可直接進行編程。若不全為空白狀態(tài)(單元中有不是FFH的),應首先將芯片擦除后,方可寫入程序。(某些單片機出廠前會固化在ROM中一段Bootloader代碼,其作用就是在啟動操作系統(tǒng)之前進行初始化并引導系統(tǒng),并能把我們下載在存儲器中的程序加載到RAM中運行然后把控制權(quán)交還給系統(tǒng)。就好比PC上的BIOS。ROM編程跟Bootloader沒有直接關系)
片內(nèi)Flash存儲器有低電壓編程(Vpp=5V)和高電壓編程(Vpp=12V)兩類芯片。低電壓編程可用于在線編程,高電壓編程與一般常用的EPROM編程器兼容。在AT89S51芯片的封裝面上標有低電壓編程還是高電壓編程的編程標志。不同的單片機的燒寫電壓,要視數(shù)據(jù)手冊來定。
應用程序在PC中與在線仿真器以及用戶目標板一起調(diào)試通過后,PC中調(diào)試完畢的程序代碼文件(.HEX目標文件),必須寫入到AT89S51片內(nèi)的Flash存儲器中。目前常用的編程方法主要有兩種:一種是使用通用編程器編程,另一種是使用下載型編程器進行編程。
通用編程器通用編程器即不同的器件(比如不同的公司生產(chǎn),不同架構(gòu))能普遍使用的編程器,它是編程器的功能分類下的一個子類,與之相對的是專用編程器。在硬件上,通用編程器的管腳驅(qū)動采用具有各種功能的通用結(jié)構(gòu),只需更新軟件就能支持新的器件,具有很好的靈活性,滿足目前和未來的器件需要。通常通用編程器鎖緊座的每一個管腳可以用作時鐘信號、數(shù)據(jù)總線、地址總線、控制總線、地線、電源線、VCCQ電壓、VPP編程電壓、管腳接觸不良測量專用總線等等。驅(qū)動電壓可以從1.8V-25.0V,起碼分256級可調(diào)。
下載型編程器 (自我理解)常見的下載型編程器
ISPro下載型編程器、ISP編程器、ICP編程器、ISP-ICP編程器…
幾種燒寫方式
ICP(In Circuit Programing):在電路編程(單片機通電即可寫入程序,包括bootloader)
ISP(In System Programing):在系統(tǒng)編程(單片機通電加上晶振,有bootloader引導的情況下,即可寫入應用程序)
IAP(In Application Programing):在應用編程(單片機在正常運行的程序中,內(nèi)部程序?qū)纹瑱C局部重寫數(shù)據(jù))
ICP、ISP、IAP詳細介紹
ISP是指可以在板級上進行編程,而不用把芯片拆下來放到燒寫器中,即不脫離系統(tǒng),所以稱作“在系統(tǒng)編程”,它是對整個程序的擦除和寫入,通過單片機專用的串行編程接口對單片機內(nèi)部的Flash存儲器進行編程。即使芯片焊接在電路板上,只要留出和上位機接口的串行口就能進行燒寫。(芯片一般固化了用來ISP升級的boot程序)
IAP同樣是在板級上進行編程,MCU獲取新代碼并對程序的某部分重新編程,即可用程序來改變程序,修改程序的一部分達到升級、消除bug的目的,而不影響系統(tǒng)的其它部分,燒寫過程中程序可以繼續(xù)運行,另外接口程序是自已寫的,這樣可以進行遠程升級而不影響應用。IAP的實現(xiàn)更加靈活,通??衫脝纹瑱C的串行口接到計算機的RS232口,通過專門設計的固件程序來編程內(nèi)部存儲器。(通常自己編寫一個bootloader程序) (注: 有時候, ISP/IAP的分別并不是那么清楚!)
ICP在電路編程,ICP (In-circuit programmer),在電路編程方法允許使用商業(yè)編程器來實現(xiàn)編程和擦除功能,而無需將微控制器從系統(tǒng)中移出,可完全由微控器硬件完成,不需要外部引導器。(百度)
ISP、IAP應用場合
1、ISP 程序升級需要到現(xiàn)場解決,不過好一點的是不必拆機器了。
2、IAP 如果有網(wǎng)管系統(tǒng)的話,用網(wǎng)管下載一切搞定,人不用跑來跑去。
在線編程目前有兩種實現(xiàn)方法:在系統(tǒng)編程(ISP)和在應用編程(IAP)。ISP一般是通過單片機專用的串行編程接口對單片機內(nèi)部的Flash存儲器進行編程,而IAP技術是從結(jié)構(gòu)上將Flash存儲器映射為兩個存儲體,當運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將控制從一個存儲體轉(zhuǎn)向另一個。ISP的實現(xiàn)一般需要很少的外部電路輔助實現(xiàn),而IAP的實現(xiàn)更加靈活,通??衫脝纹瑱C的串行口接到計算機的RS232口,通過專門設計的固件程序來編程內(nèi)部存儲器。 ISP和IAP很相似,都是不需要把芯片從板子上拔出來,就達到了用PC-MCU的編程接口(JTAG、串口、雙絞線、SPI等)搞定新版本的升級的目的。MCU內(nèi)部都是首先執(zhí)行一段獨立的Boot代碼(這段Boot代碼一般是出廠預置,或使用編程器燒錄的,通常只有1k或4k,SST通常是占用一塊獨立的Block,Philips通常是讓BootROM地址與其他Flash重疊,以達到隱藏的效果),Boot負責控制擦除程序存儲器及給程序存儲器編程的代碼(或是處理器外部提供的執(zhí)行代碼),然后通過某種與PC計算機的通信方式(如,ether網(wǎng)口),將用戶指定的某個在PC上