<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于自編程功能的MCU Bootloader設(shè)計(jì)

          基于自編程功能的MCU Bootloader設(shè)計(jì)

          作者: 時(shí)間:2011-01-25 來(lái)源:網(wǎng)絡(luò) 收藏


          1)舊的Boot程序首先將新的Boot程序編程到交換引導(dǎo)簇1(Boot cluster 1),然后設(shè)置啟動(dòng)交換標(biāo)志位,并強(qiáng)迫看門(mén)狗復(fù)位。
          2)復(fù)位啟動(dòng)后,MCU看到交換標(biāo)志位,便從交換引導(dǎo)簇1處開(kāi)始啟動(dòng)。交換引導(dǎo)簇1處的新Boot程序?qū)z查交換標(biāo)志位。如果交換標(biāo)志位被置1,則新的Boot程序?qū)⒉脸粨Q引導(dǎo)簇0(Boot cluster 0)區(qū)域,并將自身復(fù)制到交換引導(dǎo)簇O,然后將交換標(biāo)志位清零,強(qiáng)迫看門(mén)狗復(fù)位。
          3)復(fù)位啟動(dòng)后,MCU看到交換標(biāo)志位被清零。又從交換引導(dǎo)簇0處開(kāi)始執(zhí)行。這樣就完成了boot程序自身的升級(jí)。即使在升級(jí)過(guò)程中遇到斷電等異常情況,在重新上電后也能重新完成Boot程序升級(jí)。有效地防止在升級(jí)過(guò)程中出現(xiàn)斷電等等異常情況而導(dǎo)致升級(jí)失敗,MCU無(wú)法啟動(dòng)的問(wèn)題,使Boot程序的升級(jí)變得安全可靠。

          4 Bootloadler設(shè)計(jì)
          4.1 簡(jiǎn)單的Bootloader
          一個(gè)簡(jiǎn)單的Bootload包括5個(gè)元素。
          1)啟動(dòng) Bootloader的信號(hào) Bootloader程序是在執(zhí)行應(yīng)用程序之前所執(zhí)行的一小段程序,當(dāng)Bootloader程序把控制權(quán)轉(zhuǎn)交給應(yīng)用程序后,在MCU復(fù)位前,Bootloader程序?qū)⒉辉賵?zhí)行。因此,需要產(chǎn)生一個(gè)信號(hào)觸發(fā)MCU開(kāi)始Bootloader程序。該信號(hào)可以是中斷,也可以通過(guò)串口傳送的一條指令,或者是別的程序觸發(fā)的信號(hào)。
          2)執(zhí)行 Bootloader的信號(hào) 單片機(jī)程序啟動(dòng)時(shí),MCU是裝載新的應(yīng)用程序還是執(zhí)行已經(jīng)存在的程序取決于外部信號(hào)。該信號(hào)可以是上電時(shí)的一個(gè)端口信號(hào),用來(lái)控制MCU裝載新程序還是執(zhí)行舊程序,也可以是從串口接收到的指令等。
          3)將新的代碼傳送給MCU 通過(guò)RS485、I2C、CAN或者USB傳送新的應(yīng)用程序數(shù)據(jù)。因?yàn)橐獋魉偷拇a一般會(huì)超過(guò)MCU的RAM容量,因此需要一些控制數(shù)據(jù)流量的措施。一般使用XON/XOFF軟件握手協(xié)議,傳送代碼的格式一般選擇Intel hex格式。
          4)Flash新代碼的自動(dòng)編程 每次MCU接收到一批新的數(shù)據(jù),就要將其編程到正確的Flash地址。如果該地址非空白,MCU在編程前必須先擦除。一般在編程中或者編程后還需要檢查存儲(chǔ)器的內(nèi)容。
          5)將控制權(quán)轉(zhuǎn)移給有效的應(yīng)用程序 在接收和編程了新的代碼后,Bootloader寫(xiě)一個(gè)校驗(yàn)和或者其他唯一字節(jié)序列到一個(gè)固定的存儲(chǔ)單元。Bootloader檢測(cè)該值,如果該值存在,Bootloader就將控制權(quán)傳給應(yīng)用程序。
          4.2 Intelhex格式
          在線升級(jí)的程序代碼采用編譯器輸出的Intel hex格式文件。Intel hex文件常用來(lái)保存單片機(jī)或其他微處理器的程序代碼。它保存物理程序存儲(chǔ)區(qū)中的目標(biāo)代碼映象。一般的編程器都支持這種格式。Intel hex文件記錄中的數(shù)字都是十六進(jìn)制格式。在InteI hex文件中,每一行包含一個(gè)HEX記錄。Intel hex文件通常用于傳輸將被存于Flash或者EEPROM中的程序和數(shù)據(jù)。Intel hex由任意數(shù)量的十六進(jìn)制記錄組成。每個(gè)記錄包含5個(gè)域,它們按照?qǐng)D5所示格式排列。


          每一個(gè)部分至少由2個(gè)十六進(jìn)制編碼字符組成。它們構(gòu)成1個(gè)字節(jié)。每一個(gè)部分的意義如下所述:
          1)每個(gè)Intel hex記錄都由冒號(hào)開(kāi)頭,自編程的過(guò)程中以此判斷一個(gè)Intel hex記錄的開(kāi)始。
          2)數(shù)據(jù)長(zhǎng)度代表當(dāng)前記錄中數(shù)據(jù)字節(jié)的數(shù)量。
          3)地址代表當(dāng)前記錄中數(shù)據(jù)在存儲(chǔ)區(qū)域中的起始地址。
          4)HEX記錄類型有如下4種:00-數(shù)據(jù)記錄;01-文件結(jié)束記錄;02-擴(kuò)展段地址記錄;03-轉(zhuǎn)移地址記錄。NEC編譯器輸出的Intel hex文件中。只包含數(shù)據(jù)類型00和01。其中O1作為自編程過(guò)程中數(shù)據(jù)結(jié)束的判定標(biāo)志。
          5)數(shù)據(jù)域分用于存儲(chǔ)需要寫(xiě)入Flash中的內(nèi)容,一個(gè)記錄可以有許多數(shù)據(jù)字節(jié)。記錄中的數(shù)據(jù)字節(jié)數(shù)量必須與數(shù)據(jù)長(zhǎng)度中的值相符。
          6)校驗(yàn)和是取記錄中從數(shù)據(jù)長(zhǎng)度到數(shù)據(jù)域最后一個(gè)字節(jié)的所有字節(jié)總和的2的補(bǔ)碼。
          根據(jù)以上說(shuō)明,必須在程序中對(duì)接收到的Inter hex文件進(jìn)行解碼,獲取數(shù)據(jù)以及數(shù)據(jù)地址,并對(duì)收到的數(shù)據(jù)進(jìn)行校驗(yàn),然后將接收正確的數(shù)據(jù)編程到Flash相應(yīng)的地址上。
          4.3 Bootloader設(shè)計(jì)思路
          單片機(jī)收到啟動(dòng)信號(hào)后,重新啟動(dòng)程序。啟動(dòng)的時(shí)候首先執(zhí)行Boot代碼,Boot代碼檢查是否收到執(zhí)行升級(jí)信號(hào)。如果需要升級(jí)程序,則通過(guò)串口或者其他通信接口接收新的應(yīng)用程序,loader程序向單片機(jī)Flash中寫(xiě)入新的應(yīng)用程序代碼。最后通過(guò)檢查校驗(yàn)位檢測(cè)程序是否有效。如果有效,則Bootloader將CPUMCU控制權(quán)交給應(yīng)用程序。整個(gè)升級(jí)過(guò)程完成。Bootloader執(zhí)行過(guò)程如圖6所示。


          需要注意的是Bootloader自身的更新和應(yīng)用程序的更新還需區(qū)別處理。通過(guò)辨別接收到數(shù)據(jù)的編程地址來(lái)判斷是Bootloader更新還是應(yīng)用程序更新。若編程地址從0000H開(kāi)始,則為Bootloader更新。Bootloader更新則需要執(zhí)行引導(dǎo)交換(boot swap)功能;若為應(yīng)用程序更新,自編程結(jié)束后,直接將CPU交給應(yīng)用程序。

          5 結(jié)束語(yǔ)
          本文探討了78KO/FC2系列μPD78F0881單片機(jī)的自編程功能以及Bootloader的設(shè)計(jì)方法。具體描述了通過(guò)單片機(jī)串口對(duì)相應(yīng)的應(yīng)用程序通過(guò)Bootloader進(jìn)行升級(jí)。此版本的Bootloader使用晶振20 MHz,通過(guò)串口Uart60,設(shè)置波特率為115 200,在μPD78F0881單片機(jī)上成功實(shí)現(xiàn)了用戶應(yīng)用程序的升級(jí)更新。在接下來(lái)的工作中,Bootloader的設(shè)計(jì)應(yīng)當(dāng)面向更多的通信接口。例如,通過(guò)CAN總線接口升級(jí),通過(guò)USB接口升級(jí)等等。Bootloader技術(shù)的開(kāi)發(fā)和廣泛應(yīng)用,必將成為嵌入式產(chǎn)品開(kāi)發(fā)的重要部分,為網(wǎng)絡(luò)化產(chǎn)品的應(yīng)用和開(kāi)發(fā),特別是后期維護(hù)、升級(jí)帶來(lái)極大的便利。


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: 收發(fā)器

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();