<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í)間:2009-01-08 來源:網(wǎng)絡(luò) 收藏

          3.2 與目標(biāo)板的通信
          通過SPI總線與目標(biāo)板建立連接。當(dāng)進(jìn)行目標(biāo)板的編程時(shí),首先編程目標(biāo)板的區(qū)引導(dǎo)程序。引導(dǎo)區(qū)程序編程完畢后,與目標(biāo)板進(jìn)行通信,將數(shù)據(jù)傳送給目標(biāo)板。目標(biāo)板的程序接收到數(shù)據(jù)后進(jìn)行CRC校驗(yàn)。如果校驗(yàn)失敗,Boot―Loader要求編程器重新發(fā)送數(shù)據(jù);如果校驗(yàn)通過,對(duì)數(shù)據(jù)進(jìn)行解密,然后寫入Flash。編程器與目標(biāo)板通信流程如圖4所示。

          4 編程設(shè)計(jì)
          4.1 BootLoader。介紹

          BootLoader區(qū)位于內(nèi)部Flash的最高地址,BootLoader存儲(chǔ)器空間的大小可以通過熔絲位進(jìn)行配置。BootLoader為通過MCU本身來下載和上載程序代碼提供了一個(gè)真正的同時(shí)讀一寫自編程機(jī)制(Read―While―Write,RWW)。這一特點(diǎn)使得系統(tǒng)可以在MCU的控制下,通過駐留于程序Flash的BootLoader,靈活地進(jìn)行應(yīng)用軟件升級(jí)。BootLoader可以使用任何器件具有的數(shù)據(jù)接口和相關(guān)的協(xié)議獲得代碼并把代碼(程序)寫入閃存,或者是從程序存儲(chǔ)器讀取代碼。BootLoader區(qū)的程序可以操作整個(gè)閃存,包括BootLoader區(qū),因而BootLoader可以對(duì)其自身進(jìn)行修改,甚至將自己擦除。如果系統(tǒng)已經(jīng)不再需要BootLoader,則可以通過指令控制BootLoader程序,將BootLoader區(qū)擦除。
          4.2 BootLoader區(qū)程序的設(shè)計(jì)思想
          由于目標(biāo)板上AVR種類的不同,所包含的頭文件也不盡相同,而且BootLoader區(qū)的大小也是根據(jù)目標(biāo)板的不同而不同,所以存儲(chǔ)芯片中BootLoader程序代碼要滿足當(dāng)前主流的AVR的需求。另外由于存儲(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ū)的大?。?p align="center">

          ②配置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í)際的程序。


          首先對(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)試和更新的場(chǎng)所。離線加密編程器的設(shè)計(jì)避免了這種場(chǎng)所的限制。編程器只有普通的火柴盒大小,功能完善且攜帶方便,這樣可以將已編寫好的程序存儲(chǔ)在編程器中,然后將編程器帶到所需場(chǎng)所(特別是在惡劣的工業(yè)現(xiàn)場(chǎng)和野外)對(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 下一頁

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