概述
高速微控制器系列的一些成員集成了內(nèi)部EPROM或ROM用于程序存儲。但是,某些應(yīng)用需要程序存儲器的系統(tǒng)內(nèi)重新編程。使用帶有內(nèi)部程序存儲器的Maxim高速微控制器重新加載閃存或NV RAM等外部非易失性存儲器,可以輕松實現(xiàn)這種系統(tǒng)。與使用具有內(nèi)部NV RAM程序存儲器或昂貴的引導塊閃存的設(shè)備相比,使用內(nèi)部程序存儲器作為引導加載程序可以獲得的低成本解決方案。
最常見的引導加載程序配置包含兩個元素:使用引導加載程序或引導加載程序編程的微控制器,以及用于保存用戶應(yīng)用軟件的外部存儲設(shè)備(如NV RAM或閃存)。當系統(tǒng)在上電或外部復位后復位時,它將開始從微控制器的內(nèi)部程序存儲器中執(zhí)行指令。微控制器內(nèi)的引導加載程序代碼首先檢查“加載器/無加載程序”;激勵,例如特定端口引腳上的邏輯低電平、串行端口字符等。這允許系統(tǒng)決定是否應(yīng)加載新的用戶程序,或者是否應(yīng)使用現(xiàn)有用戶程序開始執(zhí)行。如果未收到激勵,表示不需要負載,則器件將通過ROMSIZE功能禁用內(nèi)部程序存儲器,并從外部存儲器開始執(zhí)行。如果存在刺激,器件將執(zhí)行引導加載程序例程并開始重新編程外部存儲器。
本應(yīng)用筆記將舉例說明設(shè)計人員如何使用外部閃存或NV RAM為基于高速微控制器的設(shè)計增加系統(tǒng)內(nèi)可重編程性。介紹了一般的硬件和軟件設(shè)計指南。支持本文所述技術(shù)的軟件示例可通過Maxim的匿名FTP站點(互聯(lián)網(wǎng))或BBS以電子格式提供。
調(diào)用引導加載程序
有幾種方法可以調(diào)用加載程序。最簡單的方法是專用于一個通用I/O引腳,作為高速微控制器內(nèi)部復位例程的一部分進行采樣。本應(yīng)用筆記中的示例使用P1.7和INT5,因為它對現(xiàn)有8051代碼設(shè)計的干擾最小。復位后,器件將開始從內(nèi)部 EPROM 執(zhí)行代碼。內(nèi)部程序?qū)σ_執(zhí)行快速測試,以確定是否應(yīng)調(diào)用加載程序。由于此引腳在重置后默認為高狀態(tài),因此建議將此引腳上的低條件用作調(diào)用加載器的信號。使用中斷引腳還允許器件在通過中斷服務(wù)例程重置以外的時間調(diào)用加載程序。用于斷位邏輯低電平的方法可以像專用開關(guān)一樣簡單,也可以通過RS-232電纜從主機進行更復雜的連接,在連接時將引腳拉低。
另一種方法是使用串行端口調(diào)用引導加載程序。重置后,設(shè)備可以連續(xù)輪詢串行端口以查找字符。如果在指定的時間段內(nèi)未收到字符,程序?qū)⑼顺黾虞d程序并開始從外部存儲器執(zhí)行。這種方法的優(yōu)點是不需要通用端口引腳。它的主要缺點是,設(shè)備在運行用戶應(yīng)用程序之前每次重置時都會遇到固定的延遲。
退出引導加載程序
將新軟件加載到外部存儲器后,或者如果不需要加載程序操作,系統(tǒng)將需要退出加載程序并開始從外部程序存儲器執(zhí)行。ROMSIZE 功能提供了一種快速方便的方法。ROMSIZE 寄存器允許軟件“關(guān)閉”;內(nèi)部程序存儲器并強制所有程序在外部執(zhí)行,類似于將/EA引腳拉低。然后,軟件應(yīng)在 0000h 對復位矢量執(zhí)行 LJMP。
必須從內(nèi)部存儲器存儲器范圍之外的外部存儲器位置修改ROMSIZE寄存器。例如,DS87C520包含16kB的EPROM。修改ROMsize寄存器的指令應(yīng)位于外部存儲器中4000h或更大的地址。如果不這樣做,如果內(nèi)存映射在指令中間切換,則可能導致代碼執(zhí)行失敗。
最簡單的方法是在內(nèi)存的高端映射一個短例程(~16 字節(jié))。如果使用 64kB 的內(nèi)存空間,則可能是 FFF0h。這提供了干擾用戶應(yīng)用程序代碼的最小機會。完成加載程序例程后,軟件將跳轉(zhuǎn)到外部存儲器(本例中位置FFF0h),修改ROMsize寄存器以禁用內(nèi)部程序存儲器,然后跳轉(zhuǎn)到位置0000h。這將模擬用戶應(yīng)用程序代碼的重置。在修改ROMSIZE寄存器之后,必須包括NOP或其他虛擬指令,以允許存儲器選擇電路的一個機器周期來禁用內(nèi)部程序存儲器。建議使用以下例程:
CSEG at 0FFF0h MOV TA, #0AAh MOV TA, #55h MOV ROMSIZE, #0h NOP LJMP 0000h
引導加載程序軟件
引導加載程序可以包含許多不同的功能,這些功能因使用的特定存儲設(shè)備而異。通常,這些應(yīng)包括加載、驗證和 CRC 命令。閃存設(shè)備將需要芯片擦除命令,NV RAM可能會發(fā)現(xiàn)填充命令很有用。
圖 1 說明了引導加載程序的基本操作。軟件首先檢查啟動加載器的信號。如果存在,設(shè)備將執(zhí)行用戶請求的引導加載程序功能。完成后,或者如果未檢測到加載器激勵,器件將跳轉(zhuǎn)到位置FFF0h,修改ROMsize寄存器以禁用內(nèi)部EPROM,然后跳回到重新啟動矢量。這模擬設(shè)備在重置后在地址 0000h 開始執(zhí)行。
圖1.引導加載程序流程圖。
Maxim提供高速微控制器系列的引導加載程序示例。本應(yīng)用筆記中引用的所有軟件均可下載(ZIP)。程序集語言源文件HSM_LOAD。ASM 包含可選的包含文件,以支持多種不同的內(nèi)存類型,包括閃存和 NV RAM。以下是支持的一些命令的列表:
將英特爾十六進制文件加載到內(nèi)存?
根據(jù)內(nèi)存驗證十六進制文件
擦除芯片(僅限閃存)
用數(shù)據(jù)填充內(nèi)存范圍(僅限 NV RAM)
計算CRC
修改和讀取端口值
轉(zhuǎn)儲英特爾十六進制格式的內(nèi)存內(nèi)容
出口裝載機
硬件
圖 2 說明了在引導加載程序設(shè)計中使用 29F010 5.0V 閃存。盡管此配置旨在與文件HSM_LOAD中顯示的軟件兼容。ASM,它可以很容易地適應(yīng)其他閃存或NV RAM設(shè)備。某些閃存設(shè)備(如 28Fxxx 系列)需要外部 12V V聚丙烯用于編程。包含這些器件的設(shè)計需要包括電壓源。
圖2.引導加載程序硬件。
盡管 29F010 是 128kB 設(shè)備,但此示例僅通過將 A64 地址線設(shè)置為低電平來使用 16kB。這不會影響閃存命令功能,因為大多數(shù)設(shè)備在其編程算法期間設(shè)計為忽略A16。要使用 A16,請將其連接到未使用的通用端口引腳。請注意,端口引腳將默認為邏輯高電平狀態(tài),選擇閃存的上限 64kB??梢栽陂W存器件的端口引腳和A16之間使用逆變器,使其在上電時選擇較低的64kB。這將簡化代碼放置?!癙”;引導加載程序的命令可用于在加載過程中操縱閃存的 A16 引腳,以加載器件的上部和下部 64kB 組。有關(guān)組切換的更多信息,請參見應(yīng)用筆記81:“高速微控制器系列的存儲器擴展”。
DS87C520和DS87C530器件版本A4及更早版本包含與/PSEN信號有關(guān)的勘誤表,需要對上述硬件進行細微更改。在這些器件上,無論器件是使用內(nèi)部還是外部程序存儲器工作,/PSEN信號都會切換。這將在寫入閃存設(shè)備期間導致沖突。圖 3 說明了一種臨時解決方法。此配置限制在從外部存儲器開始操作之前必須刪除 P1.7 上的負載信號。這是一個小問題,因為大多數(shù)應(yīng)用程序?qū)⒃趩为毜牟襟E中對閃存進行編程,重置設(shè)備,然后開始操作。此錯誤將在設(shè)備的后續(xù)修訂版中得到糾正。
圖3.DS87C520/DS87C530 修訂版 A4 的引導加載程序硬件。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7542瀏覽量
151314 -
存儲器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163761 -
EPROM
+關(guān)注
關(guān)注
3文章
124瀏覽量
54406
發(fā)布評論請先 登錄
相關(guān)推薦
評論