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