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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 離線加密編程器中的BootLoader程序設(shè)計(jì)

          離線加密編程器中的BootLoader程序設(shè)計(jì)

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


          4.2 BootLoader區(qū)程序的設(shè)計(jì)思想

          由于目標(biāo)板上AVR單片機(jī)種類的不同,所包含的頭文件也不盡相同,而且BootLoader區(qū)的大小也是根據(jù)目標(biāo)板的不同而不同,所以存儲(chǔ)芯片中 BootLoader程序代碼要滿足當(dāng)前主流的AVR單片機(jī)的需求。另外由于存儲(chǔ)芯片容量大小的限制,要求引導(dǎo)程序要短小精煉。

          編程BootLoader區(qū)的一個(gè)重要的內(nèi)容是熔絲位的編程,熔絲位編程出錯(cuò)可能導(dǎo)致編程的失敗。寫SPIEN為“1”,導(dǎo)致編程器與目標(biāo)板無法建立連接;寫RSTDISBL為“O”,將導(dǎo)致復(fù)位引腳失效;寫CKSEL熔絲位出錯(cuò),將導(dǎo)致內(nèi)外部晶振的選擇混亂,從而導(dǎo)致編程失敗。

          BootLoader程序編程步驟:

          ①配置BOOTSZl和B00TSZ0熔絲位,設(shè)定Boot—Loader區(qū)的大?。?br />
          5.gif

          本文引用地址:http://www.ex-cimer.com/article/151069.htm



          ②配置BOOTRST熔絲位,芯片上電啟動(dòng)的設(shè)定從BootLoader區(qū)的起始地址處開始,即每次上電復(fù)位后,首先從BootLoader區(qū)起始位置開始運(yùn)行。

          ③下載BootLoader程序的HEX文件。下載時(shí)要注意BootLoader區(qū)的起始位置。

          ④設(shè)置的Boot鎖定位,保護(hù)BootLoader不被破壞,使其只能通過芯片擦除命令清除BootLoader區(qū)的程序。

          5 BootLoader程序的下載

          編程器外存中存儲(chǔ)適合各種型號(hào)AVR單片機(jī)的BootLoader源代碼。在下載BootLoader程序之前,首先在編程器外存中找到適合目標(biāo)板單片機(jī)型號(hào)的Boot—Loader程序,然后下載到目標(biāo)板。主要設(shè)計(jì)問題是數(shù)據(jù)的傳輸、熔絲位和鎖定位的編程、Flash的讀寫。

          5.1 實(shí) 例

          本設(shè)計(jì)采用串行編程模式,串行接口包括RESET、SCK、MOSI(輸入)及MISO(輸出)四條線。當(dāng)RESET為低電平時(shí),可以通過串行 SPI總線對(duì)Flash進(jìn)行編程,應(yīng)在執(zhí)行編程或擦除操作之前執(zhí)行編程使能指令。下面以ATmegal69為例,給出一個(gè)實(shí)際的程序。

          6.gif

          首先對(duì)SPI接口進(jìn)行初始化SPI_MasterInit(),并使能操作SPI_Enable(),然后擦除Flash頁SPI_Erase(),進(jìn)行 Flash的頁寫操作program_bootloader(),再寫熔絲位SPI_WriteFuse和寫鎖定位SPI_WriteLock,最后進(jìn)行復(fù)位操作SPI_Over()。

          5.2 串行編程應(yīng)遵循的步驟

          ①上電過程:在RESET及SCK為0時(shí),向VCC及GND供電。在一些系統(tǒng)中,編程器不能保證在上電時(shí)SCK保持為低。在這種情況下,SCK拉低之后應(yīng)在RESET加一正脈沖,而且這個(gè)脈沖至少要維持2個(gè)CPU時(shí)鐘周期。

          ②上電之后等待至少20 ms,然后向MOSI引腳輸入串行編程使能指令以使能串行編程。

          ③通信不同步將造成串行編程失敗。同步之后,在發(fā)送編程使能指令的第3個(gè)字節(jié)時(shí),第2個(gè)字節(jié)的內(nèi)容(0x53)將被反饋回來。不論反饋的內(nèi)容正確與否,指令的4個(gè)字節(jié)必須全部傳輸。如果0x53未被反饋,則需要向RESET提供一個(gè)正脈沖以開始新的編程使能指令。

          ④Flash的編程以一次一頁的方式進(jìn)行。頁的大小為128字節(jié)。在執(zhí)行加載程序存儲(chǔ)頁指令時(shí),通過6位的地址信息,數(shù)據(jù)以字節(jié)為單位加載到存儲(chǔ)頁。為保證加載的正確性,應(yīng)先向給定地址傳送數(shù)據(jù)低字節(jié),之后是高字節(jié)。程序存儲(chǔ)頁通過地址的高8位以及寫程序存儲(chǔ)器頁指令獲得數(shù)據(jù)。如果不使用查詢的方式,那么在操作下一頁數(shù)據(jù)之前應(yīng)等待至少4.5 ms。在Flash寫操作完成之前訪問串行編程接口,會(huì)導(dǎo)致編程錯(cuò)誤。

          ⑤可通過讀指令來校驗(yàn)任何一個(gè)存儲(chǔ)單元的內(nèi)容。數(shù)據(jù)從串行輸出口MISO輸出。

          ⑥編程結(jié)束后可以將RESET拉高,開始正常操作。

          ⑦下電序列:將RESET置“1”。

          結(jié)語

          在一般的開發(fā)過程中,每次進(jìn)行程序的調(diào)試和更新都要將產(chǎn)品與PC機(jī)直連,進(jìn)行在線操作,這樣就限制了程序調(diào)試和更新的場所。離線加密編程器的設(shè)計(jì)避免了這種場所的限制。編程器只有普通的火柴盒大小,功能完善且攜帶方便,這樣可以將已編寫好的程序存儲(chǔ)在編程器中,然后將編程器帶到所需場所(特別是在惡劣的工業(yè)現(xiàn)場和野外)對(duì)產(chǎn)品進(jìn)行再編程。本設(shè)計(jì)采用 BootLoader引導(dǎo)區(qū)程序進(jìn)行數(shù)據(jù)的解密和編程操作,既達(dá)到了對(duì)知識(shí)產(chǎn)權(quán)進(jìn)行保護(hù)的目的,又方便了程序的調(diào)試和更新。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞:

          評(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); })();