基于串口的通用的單片機在系統編程設計及實(shí)現
一般來(lái)說(shuō),在系統編程(ISP)是指依靠某種外部工具(除了常規的并行編程器以外)直接給處理器內部集成的程序存儲器編程。這里所指的外部工具常見(jiàn)的有很多種,不同的處理器供應廠(chǎng)商可能提供不同的方案。例如,根據編程接口的不同,就有JTAG、單線(xiàn)、串口、SPI口等多種方式。盡管編程方式有所不同,但其原理都是類(lèi)似的,就是依靠外部條件觸發(fā)處理器,令其脫離正常執行的內部常規用戶(hù)應用程序代碼的進(jìn)程,轉而執行保存在其程序存儲空間內某個(gè)固定位置處的控制擦除程序存儲器及給程序存儲器編程的代碼(或是處理器外部提供的執行代碼),然后通過(guò)某種與PC計算機的通信方式,將用戶(hù)指定的某個(gè)在PC上編譯完成的嵌入式處理器可運行的二進(jìn)制代碼文件編程人嵌入式處理器內的程序存儲器。這種編程方式只需要常規的硬件配置(某些處理器可能需要某些叫作下載線(xiàn)的簡(jiǎn)單硬件電路)支持,而不需要特別的編程器(指并行編程器)支持,所以即使處理器芯片已經(jīng)焊接到了電路板上也可以實(shí)現編程,這也就是ISP的真實(shí)含義。
1 通用的在系統編程方法
隨著(zhù)嵌入式系統技術(shù)的發(fā)展,電可擦除的FLASH芯片以容量大,價(jià)格低,編程方便等優(yōu)勢得到了廣泛的應用。用一片FLASH作為程序存儲器的系統無(wú)法直接實(shí)現在系統編程(ISP),為了方便現場(chǎng)調試和程序升級,可以采用集成ISP功能的MCU(如AVR、部分ARM芯片等),或者采用雙FLASH設計等方法實(shí)現ISP功能。但有不少系統仍然使用不具備直接ISP功能的MCU(如M68K、N80C196等),同時(shí)因印制版面積、成本等原因的考慮也沒(méi)有采用雙FLASH芯片,此類(lèi)系統在程序升級時(shí)通常需要編程器、仿真器等特定工具,在現場(chǎng)調試時(shí)很不方便。
針對使用不具備ISP功能的MCU系統,只要滿(mǎn)足以下四個(gè)條件,就可以按照本文的方法進(jìn)行ISP設計??紤]自編程過(guò)程中文件出錯、斷電等特殊情況,此方案可實(shí)現故障保護。
(1)程序空間和數據空間統一編址,程序可以在RAM中運行;
(2)FLASH芯片正確連接了寫(xiě)信號;
(3)擁有能放下Update程序并讓其正常工作的額外程序/數據空間;
(4)具備某種通信能力(例如以太網(wǎng)、串口、CAN、MODEM等)。
程序分布如圖1所示。這種情況下需要把整個(gè)工作分為三部分完成。第一是引導程序(稱(chēng)為Boot程序);第二是升級程序(Update程序);第三是正常程序(Normal程序)。Boot程序負責控制程序的運行模式:升級模式、正常模式。如果進(jìn)入升級模式,Boot程序需要將Update程序復制到指定的運行空間,并轉入執行Update程序;如果進(jìn)入正常模式,Boot需要做的工作就十分簡(jiǎn)單,可以直接把控制權交給正常程序。要注意Update在自編程時(shí)不能破壞Boot程序。此時(shí)Normal程序不再負有復制Update程序到指定運行空間的任務(wù),完全按照正常的模式運行。
按照這種方案,Boot程序和Update程序是自編程設計的核心內容,只要保證這部分程序代碼的完整性,就能擁有在線(xiàn)編程的能力。要對這部分程序代碼區進(jìn)行保護,保證在第一次寫(xiě)入程序存儲器后就不會(huì )再被擦除。這樣即使在自編程時(shí)發(fā)生災難性故障,Boot程序和Update程序是不會(huì )被破壞的,仍然可以繼續運行,保證下次仍然可以進(jìn)行自編程。程序完成后必須分別固化到程序存儲器的指定空間,以保證程序的正常運行。
2 80C196KC ISP的通信模塊設計
實(shí)現80C196KC ISP的核心思想即用AT29C256代替常用的M27C256做程序存儲器與80C196KC相接,區別在于前者1引腳接/WR,后者1腳懸空;再用一片DS1230Y(NV SRAM)做中轉。AT29C256分三個(gè)空間存放引導程序、更新程序和正??刂瞥绦?;其中引導程序用于80C196KC和上位機進(jìn)行串口通信,接收上位機編譯好的更新程序(.Hex文件),并把它放到DS1230Y中,在下載完成后把其中接收的程序代碼發(fā)回上位機進(jìn)行校驗,校驗無(wú)誤后跳轉去運行更新程序;更新程序用于將DS1230Y中校驗無(wú)誤的新程序復制到AT29C256的正??刂瞥绦蚩臻g;正??刂瞥绦蚣创禄蛞呀?jīng)更新的系統程序。每次系統上電后由鍵盤(pán)判斷是否需要在系統編程,如果需要,則經(jīng)過(guò)引導程序和更新程序執行后,跳轉到正??刂瞥绦蚩臻g運行更新了的程序。如果不需要,則直接跳轉到正??刂瞥绦蚩臻g運行。在從AT29C256取指令時(shí),注意WE腳保持高電平。
2.1 通信協(xié)議
目前微機的串行通信口都是基于RS 232協(xié)議的,但因其傳送速率較低、抗干擾能力較差、傳送距離太近等缺點(diǎn),該系統采用RS 422通信方式。RS 422每個(gè)通道通過(guò)二條信號線(xiàn)進(jìn)行傳輸,采用平衡驅動(dòng)、差分接收形式,對在接收器輸入端出現的共模噪聲起到了抑制作用,可以允許較大的信號衰減。另外由于兩者之間不共地,不存在回路之間的電位差,徹底消除了遠距離信號傳輸中因地電位不等造成的影響,從而有很強的抗干擾能力,并且可獲得較長(cháng)的傳輸距離。
2.2 通信接口電路
鑒于篇幅,這里只給出串口通信中PC端硬件接口部分。
首先由一塊MAX232芯片把PC機串行口的RS 232電平轉換為T(mén)TL電平,然后通過(guò)6N137的光電隔離模塊進(jìn)行隔離,再通過(guò)MAX 487芯片完成RS 232協(xié)議到RS 422協(xié)議的轉換。其實(shí)也就是一個(gè)電平被轉換為兩個(gè)壓差電平的過(guò)程,如圖2所示。
2.3 通信軟件設計
單片機(下位機)軟件開(kāi)發(fā)采用PL/M語(yǔ)言。主要由更新程序和通信程序組成,通信程序又包括通信主程序、接收、發(fā)送和定時(shí)中斷程序等。其中通信主程序是不斷循環(huán)執行的,如果上位機發(fā)送了數據則進(jìn)入接收中斷處理程序,并同時(shí)在定時(shí)中斷中設置一個(gè)在接收中斷中被清零的計數器,當定時(shí)器溢出某個(gè)時(shí)間范圍時(shí),說(shuō)明接收完畢。這時(shí)觸發(fā)發(fā)送中斷,上發(fā)接收到的整個(gè)文件內容用于校驗。這里僅給出部分更新程序代碼。
p2p機相關(guān)文章:p2p原理
評論