新聞中心

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

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

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


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

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

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

BootLoader程序編程步驟:

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

本文引用地址:http://butianyuan.cn/article/151069.htm



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

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

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

5 BootLoader程序的下載

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

5.1 實(shí) 例

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

6.gif

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

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

①上電過(guò)程:在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)將被反饋回來(lái)。不論反饋的內(nèi)容正確與否,指令的4個(gè)字節(jié)必須全部傳輸。如果0x53未被反饋,則需要向RESET提供一個(gè)正脈沖以開(kāi)始新的編程使能指令。

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

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

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

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

結(jié)語(yǔ)

在一般的開(kāi)發(fā)過(guò)程中,每次進(jìn)行程序的調(diào)試和更新都要將產(chǎn)品與PC機(jī)直連,進(jìn)行在線操作,這樣就限制了程序調(diào)試和更新的場(chǎng)所。離線加密編程器的設(shè)計(jì)避免了這種場(chǎng)所的限制。編程器只有普通的火柴盒大小,功能完善且攜帶方便,這樣可以將已編寫(xiě)好的程序存儲(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)試和更新。


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

關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉