




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Electronic Component &Device Applications 2008年 1月 0引言RTU (Remote Terminal Unit 在水情、電力、石化等行業(yè)發(fā)揮了非常重要的作用。隨著工業(yè)自 動化水平的不斷提高 , 人們對 RTU 不斷提出更高 的 要 求 , 而 為 了 滿 足 一 些 最 新 需 求 , 就 必 須 對RTU 的程序進行升級。目前對這類終端設(shè)備的程序維護大多采用開發(fā)或工程人員攜帶專用編程工 具到現(xiàn)場進行更新的方式。這樣做工作量極大 , 費資費時費力 , 對整個系統(tǒng)的統(tǒng)一管理和維護造 成很大困難 , 同時也給系統(tǒng)運行帶來較大影響。利 用 在
2、應(yīng) 用 編 程 (IAP , In Application Pro-gram 技術(shù) , 用戶可在數(shù)據(jù)采集中心對遠程 RTU進行升級 , 而且更新時間快 , 基本不會影響系統(tǒng) 運 行 。 此 外 , 當(dāng) 在 單 片 機 中 燒 入 這 樣 一 個 Bootloader 程序并建立 IAP 后 , 其最基本的開發(fā)環(huán)境就簡化成了 “ PC+RS232電纜 +目標板”。 IAP 的本質(zhì)是使 MCU 靈活運行一個常駐 Flash的 引 導(dǎo) 加 載 程 序 (Boot Loader Program , 從 而 實 現(xiàn)對用戶應(yīng)用程序的在線自編程更新?,F(xiàn)在 , 許 多單片機都具備 Boot Loader 功能
3、 , 雖然各廠家的Boot Loader 可能不盡相同 , 但基本原理一樣 , 本文 將 以 MEGA128單 片 機 為 例 來 簡 要 介 紹 BootLoader 的原理、設(shè)計方法及其設(shè)計注意事項。1Boot Load 的原理Boot Loader 實際上就是駐留在 Flash 中的一段代碼 , 它可為 MCU 下載和上傳程序代碼提供一個真 正 的 同 時 讀 -寫 (Read-While-Write , RWW自編程機制。這一特點使得系統(tǒng)可以在 MCU 的 控制下 , 通過駐留于程序 Flash 的 Boot Loader , 來 靈活地進行應(yīng)用軟件升級。2MEGA128的 Boot
4、Loader 設(shè)計目前 , 很多單片機都有 Boot Loader 功能 , 有些是出廠前就寫好了的 , 單片機從上電或復(fù)位開 始便運行這段程序代碼 , 以判斷當(dāng)前是否需要進 入升級狀態(tài)。如果不需要升級 , 就直接運行 Flash 中的原有程序 ; 如果需要升級 , 則通過某種通信 方式接收新的程序文件 , 并將原有程序用新文件 覆蓋。而有些單片機本身并不提供 Boot Loader 功 能 , 但提供 Boot Loader 區(qū) , 以便用戶根據(jù)需求編 寫自己的 Boot Loader 程序 , 從而實現(xiàn)更為靈活的Boot Loader 功能。 ATMEL 公司推出的 MEGA128則將這種
5、靈活性發(fā)揮的淋漓盡致。2.1Boot Loader 區(qū)大小的選擇MEGA128的 Boot Loader 區(qū)大小可以由 BOOT-SZ 熔絲位來配置 , 這給用戶帶來了很大的選擇靈活 性 。 在 出 廠 默 認 配 置 下 , BOOTSZ=00, 也 即Boot Loader 區(qū)為從 ¥F000開始的 4K 字。用戶可以通過改寫 BOOTSZ 來更改其大小。如果 boot loader 區(qū)程序非常小 , 用戶甚至可以將 Boot Loader 區(qū)設(shè) 定 為 512字 以 擴 大 應(yīng) 用 程 序 的 空 間 。 筆 者 認 為 , 如果應(yīng)用程序不是非常大 , 最好能保留其 4K 字的 配 置
6、, 這 一 方 面 可 減 少 一 步 改 寫 熔 絲 位 的 工 作 量 , 另一方面也預(yù)留了 Boot Loader 的擴展能力。編 譯 Boot Loader 程 序 必 須 根 據(jù) BOOTSZ 熔 絲收稿日期 :2007-06-22BOOTLOADER 的原理及設(shè)計要點曹翊軍 , 薛升寧 , 郭保龍(南京自動化研究院 , 江蘇南京210003摘要 :介紹了通用引導(dǎo)裝載程序的原理。以美國 ATMEL 公司的 MEGA128單片機為例 , 給出了在 AVR 系列單片機中通過編寫 boot loader 來實現(xiàn)程序的本地及遠程下載的方法及要點。 關(guān)鍵詞 :boot loader ; MEG
7、A128; RTU ; IAP ; CVAVR ; 遠程下載位的設(shè)置來將 Project-Configure-C Compiler 選項中 的 程 序 類 型 (Program Type 更 改 為 Boot Loader-xxxxw , 其 中 , xxxx 為 BOOTSZ 設(shè) 定 的 Boot Loader 區(qū)的大小。2.2Boot Loader 程序進入方式的選擇Boot Loader 的本質(zhì)就是駐留在 FLASH 中的一 段程序。要進入 Boot Loader 程序 , 程序指針 PC 必 須指向該程序的起始位置。用戶可以通過在應(yīng)用 程序接收到特殊指令后 , 通過 JMP 語句直接跳
8、轉(zhuǎn) 到 Boot Loader 程序的開始位置去執(zhí) 行 更 新 流 程 。 此外 , MEGA128還 可 通 過 更 改 BOOTRST 熔 絲 位 來將復(fù)位向量直接指向 Boot Loader 程 序 , 這 樣 , 每次 MEGA128復(fù)位時 , 都將直接運行 Boot Loader 流程。但用戶在 Boot Loader 中必須判斷是否需要 更新應(yīng)用程序 , 如果不需要 , 經(jīng)過超時時間后則 退出 Boot Loader , 接著進入應(yīng)用程序。后一種方式的優(yōu)點是應(yīng)用程序與 Boot Loader 完 全 隔 離 , 沒 有 相 關(guān) 性 , 不 會 出 現(xiàn) 應(yīng) 用 程 序 與 Boot
9、Loader 程序不匹配的情況 , 也不會出現(xiàn)應(yīng)用 程序出現(xiàn)故障而無法進入 Boot Loader 的情況。但 這種方式不太可取的原因是現(xiàn)場環(huán)境一般比較惡 劣 , 如果遇到強干擾或程序跑飛 , 就很可能導(dǎo)致 程序復(fù)位 , 這樣 , 程序就會進入 Boot Loader 流程 , 而在超時退出的這段時間內(nèi)極有可能丟掉重要的 數(shù)據(jù) , 而且這個時間還不能太短 , 因為太短有可 能導(dǎo)致正常的更新操作無法完成。因此 , 筆者更 傾向于采用第一種方式。2.3數(shù)據(jù)接口方式及協(xié)議的選擇Boot Loader 程序可以使用任何器件所具有的 數(shù) 據(jù) 接 口 來 獲 取 數(shù) 據(jù) , 包 括 串 口 、 并 口 、
10、 I2C 、 SPI 、 USB 等 ; 但從實際使用來看 , 使用串口無疑 是最方便的。這一方面是幾乎所有的單片機都集 成了 UART 接口 , 要進行 RS232通信只需要增加一 個 RS232/TTL 電平轉(zhuǎn)換芯片就可以了 ; 另一方面 , 大多數(shù)通信終端都具有 RS232接口 , 這也為遠程 更新提供了有利條件。因此 , 利用串口進行更新 也成為目前應(yīng)用最多的方案。Boot Loader 程序可使用任何協(xié)議來傳輸數(shù)據(jù)。 目前 , 比較常見的是采用標準 XMODEM 協(xié)議來進 行 數(shù) 據(jù) 的 傳 輸 , 采 用 這 種 方 式 的 優(yōu) 點 是 比 較 簡 單、不需要另外編寫專門的上位機程
11、序 , 只需要 使用 PC 機自帶的超級終端軟件并 使 用 XMODEM 傳輸文件即可。但這種方式的軟件界面不夠人性 化 , 缺乏交互性 , 沒有進程指示 , 下載過程中出 現(xiàn)錯誤也不能停止下來 , 而且 , 在使用最常用的 三線方式通信時 (沒有控制信號 , 超級終端采用 的是比較保守的方式發(fā)送數(shù)據(jù) , 發(fā)送一包數(shù)據(jù)后 會等待較長時間再發(fā)下一包數(shù)據(jù) , 這樣會使更新 程序的速度比較慢。尤其是在遠程更新程序時 , 速度較慢對遠程更新的可靠性是致命的打擊。因 此 , 筆者拋棄了采用超級終端進行升級的方式 , 而是將 Boot Loader 命令嵌入到自己的本地和遠程 通信協(xié)議中 , 然后利用專門
12、編寫的上位機軟件來 進行數(shù)據(jù)的傳輸。3MEGA128的 Boot Loader 具體實現(xiàn)完成了以上各項選擇工作 , 接下來就可以開 始進行實際的 Boot Loader 程序設(shè)計了。由于本設(shè)計選擇從應(yīng)用程序跳轉(zhuǎn)的方式進入 Boot Loader , 因此 , 該 Boot Loader 的設(shè) 計 應(yīng) 包 括 應(yīng)用程序和 Boot Loader 區(qū)的設(shè)計兩部分。3.1應(yīng)用程序的設(shè)計應(yīng)用程序的設(shè)計相對比較簡單 , 只需在應(yīng)用 程序中嵌入一條特殊的指令識別語句 , 這樣 , 當(dāng) 接收到這一特殊指令后 , 系統(tǒng)將執(zhí)行以下語句以 跳轉(zhuǎn)到 Boot Loader :#asm (" jmp 0xf
13、000" ;其中 , 0xf000為 Boot Loader 的首地址。 3.2Boot Loader 區(qū)的設(shè)計Boot Loader 區(qū) 的 程 序 一 般 可 分 為 兩 個 部 分 , 一部分是與硬件單片機相關(guān)的 FLASH 擦寫功能模 塊函數(shù) , 一般用匯編語言編寫 , 這也是整個 Boot Loader 的核心模塊 ; 另一部分為應(yīng)用程序 模 塊 , 一般用 C 語言編寫 , 以增強程序的可讀性。MEGA128中 的 Flash 被 分 成 兩 個 固 定 的 區(qū) :同時讀寫區(qū) (RWW 和非同時讀寫區(qū) (NRWW 。 Boot Loader 軟件工作時 , 用戶軟件不能讀
14、取位于 RWW 區(qū)內(nèi)的任何代碼。如果用戶軟件在編程過 程中試圖讀取位于 RWW 區(qū)的代碼 , 軟件可能會 終 止 于 一 個 未 知 狀 態(tài) 。 為 了 避 免 這 種 情 況 的 發(fā)設(shè)計參考 生 , 首先需要禁止中斷或?qū)⑵滢D(zhuǎn)移到 Boot Loader 區(qū)。本文采用禁止中斷的方案。程序存儲器的更新以頁的方式進行。在用臨 時 頁 緩 沖 區(qū) 存 儲 的 數(shù) 據(jù) 對 一 頁 存 儲 器 進 行 編 程 時 , 首先要將這一頁擦除。通過 SPM 指令以一次 一個字的方式將數(shù)據(jù)寫入臨時頁緩沖區(qū)。臨時頁 緩沖區(qū)的寫入可以在頁擦除命令之前完成 , 也可 以在頁擦除和頁寫操作之間完成。由于在頁擦除 之 前
15、 寫 臨 時 頁 緩 沖 區(qū) 可 以 把 要 擦 除 的 內(nèi) 容 先 讀 出 , 因而可以在原有內(nèi)容下改寫某幾個字節(jié) , 因 此 , 在這里采用這種方式。最后 , 程序必須能自動執(zhí)行應(yīng)用程序 , 這可 以通過執(zhí)行以下語句來實現(xiàn) :#asm (“ jmp 0x0000” ;另外 , 在退出之前 , 還需完成幾個初始化工 作。首先 , 由于某些編譯器會自動將中斷向量轉(zhuǎn) 移到 Boot Loader 區(qū) , 因此 , 必須在以上語句前將 中斷向量重新搬移到應(yīng)用程序區(qū)的頭部 , 這可 通過以下兩條語句來完成 :MCUCR =0x01;MCUCR =0x00;而 在 改 寫 0X8000以 上 地 址
16、的 內(nèi) 容 時 , 應(yīng) 將 RAMPZ 的內(nèi)容改寫為 1, 且在跳轉(zhuǎn)到應(yīng)用程序前 還必須將其清零。 Boot Loader 區(qū)程序的整個流程 如圖 1所示。4Boot Loader 的設(shè)計要點Boot Loader 本身是個錦上添花的設(shè)計 , 因而 必須避免其成為雞肋。 Boot Loader 程序應(yīng)該具有 很好的可維護性和可靠性 , 并應(yīng)能正確處理異常 情況 , 而不會因為意外情況而引起系統(tǒng)的損壞或 崩潰。其可靠性可以從以下三方面去考慮 :(1 避免應(yīng)用程序錯誤進入 Boot Loader 程序 Boot Loader 是進行程序更新的流程 . 它有可能 改 寫 應(yīng) 用 程 序 , 所 以
17、一 定 要 盡 量 避 免 錯 誤 進 入 Boot Loader 流程 , 這也是筆者不建議使用復(fù)位進 入 Boot Loader 流程的原因。(2 合理選擇進入 Boot Loader 程序的時間點 Boot Loader 包括程序文件的接收和 FLASH 的 改寫兩個部分。目前 , 很多 Boot Loader 的設(shè)計都 采用邊接收文件邊改寫 FLASH 的方法 , 這種方式 在本地更新的時候危害不大 , 一般來說本地數(shù)據(jù) 傳輸?shù)目煽啃员容^高。然而 , 如果是采用遠程更 新的方式 , 遠程傳輸?shù)目煽啃詴蟠蠼档?。如?遠程傳輸失敗 , 將直接導(dǎo)致 Boot Loader 失敗 , 而 這
18、種失敗則可能是致命的 , 因為應(yīng)用程序有可能 被改寫了一部分 , 這時候的程序?qū)⑻幱谝环N不可 預(yù)知的狀態(tài) , 而要恢復(fù)這種狀態(tài)只能到現(xiàn)場使用 專用工具來進行串行或并行編程。因 此 , 筆 者 采 用 了 將 文 件 接 收 和 單 片 機 FLASH 改寫分為兩步走的方式。一般情況下 , 應(yīng) 用程序?qū)⒄_\行 , 而在接收到特殊指令后 , 則 將進入更新文件接收流程 , 其接收到的文件將放 在外部的串行 FLASH 中 , 更新文件接收成功后再 通 過 JMP 指 令 跳 轉(zhuǎn) 到 Boot Loader 程 序 , 并 在 Boot Loader 程序中只執(zhí)行從串行 FLASH 中讀出的程序
19、內(nèi)容來改寫單片機上 FLASH 的工作 , 改寫完成后 再自動跳轉(zhuǎn)到應(yīng)用程序。這種方式的最差情況也 只會導(dǎo)致程序更新失敗 , 而不會導(dǎo)致應(yīng)用程序的 崩潰。這樣 , 在信道恢復(fù)正常后 , 仍可進行程序 更新工作 , 因而大大提高了可靠性。(3 盡量提高更新速度速度的提高首先需要從數(shù)據(jù)源開始。目前有 的設(shè)計采用的是直接傳輸 HEX 文件的方式 , 但這 種方式是不可取的 , 因為 HEX 文件一般會比 BIN 文件大三倍以上 , 而且 HEX 文件不能直接寫入單 片機 , 還必須經(jīng)過一個轉(zhuǎn)換的過程 , 這又增加了 一點時間消耗。因此 , 筆者建議在程序更新前 , 先通過 hextobin 軟件將
20、HEX 文件轉(zhuǎn)換成 BIN 文件。 更新時間主要取決于文件的傳輸時間 , 在本 地更新過程中 , 提高本地 RS232圖 1Boot Loader 區(qū)的程序流程(下轉(zhuǎn)第 66頁 其 它 特 定 占 空 比 (D =5%, 20%, 40%,60%, 80%, 95% 的仿真記錄數(shù)據(jù)如表 1所列。圖 7所示是該調(diào)壓電路的 PWM 信號占空比與 V s 調(diào) 壓偏移量的變化曲線。由圖可見 , 該變化呈線性 關(guān)系。6結(jié)束語本文通過提高 PWM 調(diào)制信號的頻率 , 再結(jié)合二階有源濾波電路 , 實現(xiàn)了頻率到電壓的一種轉(zhuǎn) 換。該轉(zhuǎn)換可在 40Vdc 60Vdc 范圍內(nèi) , 對 ZXC10通信電源的輸出電壓通過 PWM 信號進 行 線 性 調(diào) 節(jié) , 這種方法可以避免使用較貴的 D/A 轉(zhuǎn)換模塊 , 因而可以節(jié)省成本 , 同時也提高了該電源的工程 使用價值。參考文獻1STC12C2052AD 系列單片機器件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城市地下空間使用權(quán)出讓合同
- 2025年度機械制造企業(yè)機械裝配工用工協(xié)議
- 二零二五年度林木買賣及林業(yè)生態(tài)補償與生態(tài)修復(fù)合同
- 二零二五年度立體停車設(shè)備車位物業(yè)管理服務(wù)合同
- 2025年度民營企業(yè)退休專業(yè)技術(shù)人員續(xù)聘協(xié)議
- 2025至2030年中國糯米食品數(shù)據(jù)監(jiān)測研究報告
- 二零二五年度高新技術(shù)企業(yè)員工解除勞動合同及培訓(xùn)補償協(xié)議
- 2025至2030年中國離合器分泵總成數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國硬齒面圓柱圓錐齒輪減速機數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國石材AB干掛膠數(shù)據(jù)監(jiān)測研究報告
- 水力學(xué)電子教案
- 國家重點保護古生物化石及產(chǎn)地名錄(2011年)
- 校園超市經(jīng)營投標方案(完整技術(shù)標)
- 第三單元《手拉手》大單元(教學(xué)設(shè)計)人音版音樂一年級下冊
- 《義務(wù)教育數(shù)學(xué)課程標準(2022年版)》解讀
- 如何做好一名IPQC課件
- 《廣東省高級會計師資格評審表填表范例》
- 文物保護概論教學(xué)課件
- 2021年杭州市中考英語試題及答案
- 安徽藥都銀行2023年員工招聘考試參考題庫含答案詳解
- 白金五星級酒店餐飲部員工操作手冊(sop)宴會部(doc-66)
評論
0/150
提交評論