国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2010-5-31 19:06    發(fā)布者:李寬
關(guān)鍵詞: bootloader , 加密
引言

離線(xiàn)加密編程器是一種獨(dú)立于PC機(jī),并通過(guò)SPI接口直接對(duì)ATmega系列單片機(jī)進(jìn)行編程操作的設(shè)備。在整個(gè)系統(tǒng)中,編程器與目標(biāo)板之間的結(jié)合部分是一個(gè)最可能被解密的地方,因?yàn)榭梢酝ㄟ^(guò)抓取SPI總線(xiàn)上的時(shí)序得到所傳輸?shù)臄?shù)據(jù),因此編程器與目標(biāo)板之間傳輸?shù)臄?shù)據(jù)必須是經(jīng)過(guò)加密的。而有效的編程數(shù)據(jù)不能為加密數(shù)據(jù),所以加密數(shù)據(jù)需要經(jīng)過(guò)解密還原才能用于單片機(jī)的編程。本設(shè)計(jì)中BootLoader程序的作用就是接收離線(xiàn)加密編程器的加密數(shù)據(jù),對(duì)加密數(shù)據(jù)進(jìn)行解密,然后完成目標(biāo)板的編程操作。首先編程目標(biāo)板單片機(jī)的BootLoaoler引導(dǎo)程序,最后與BootLoacler程序建立連接。編程器將加密數(shù)據(jù)傳送給。BootLoader程序,由BootLoacler程序?qū)用軘?shù)據(jù)進(jìn)行解密,然后完成編程操作。這樣做既可以確保數(shù)據(jù)不被外界破解,又能方便程序的升級(jí)操作。BootLoader程序的下載對(duì)具有知識(shí)產(chǎn)權(quán)保護(hù)要求的離線(xiàn)編程器設(shè)計(jì)是一個(gè)關(guān)鍵步驟,它的成功與否直接決定離線(xiàn)編程器設(shè)計(jì)能否成功。本文將以ATmegal69為例進(jìn)行BootLoader程序下載的介紹。

1 系統(tǒng)硬件設(shè)計(jì)

本系統(tǒng)主要由單片機(jī)、顯示部分、按鍵開(kāi)關(guān)、存儲(chǔ)部分和串行通信部分等組成,硬件結(jié)構(gòu)框圖如圖1所示。



圖1中,AVR ATmegal69P(V)單片機(jī)是一種高性能、低功耗的8位微處理器,采用先進(jìn)的RISC結(jié)構(gòu),130條指令大多數(shù)可以在1個(gè)時(shí)鐘周期內(nèi)完成,滿(mǎn)足了本系統(tǒng)對(duì)執(zhí)行速度的要求。它具有非易失性的程序和數(shù)據(jù)存儲(chǔ)器,16 KB的系統(tǒng)內(nèi)可編程Flash,具有4×25段的LCD驅(qū)動(dòng)器的ATmegal69P(V),輸入電壓3.3 V,串行US—ART,可工作于主機(jī)/從機(jī)模式的SPI串行接口;存儲(chǔ)部分采用ATmel公司8個(gè)引腳的串口存儲(chǔ)芯片AT45DB041B,主存容量大小為528 KB,一共2 048頁(yè),每頁(yè)264B,具有2個(gè)大小為265B的數(shù)據(jù)緩存,允許通知對(duì)存儲(chǔ)芯片進(jìn)行讀寫(xiě),工作電壓為3.3 V。由于系統(tǒng)單片機(jī)的SPI通信口用來(lái)對(duì)目標(biāo)板進(jìn)行編程,所以采用軟件模擬SPI對(duì)AT45DB041B進(jìn)行讀寫(xiě);其通信部分分為與PC機(jī)的通信和與目標(biāo)板的通信。與PC機(jī)的通信采用USB接口,編程器內(nèi)部采用UART—USB轉(zhuǎn)換橋芯片PL一2303,在編程方式上等同于一個(gè)普通的UART接口,非常方便;與目標(biāo)板的通信是通過(guò)高速的SPI接口,達(dá)到對(duì)目標(biāo)板的編程操作;采用雙鍵制按鍵開(kāi)關(guān),其中按鍵之一用來(lái)查詢(xún)下載器的各種信息,另外一個(gè)按鍵用來(lái)啟動(dòng)對(duì)目標(biāo)板的下載操作;為了充分利用ATmegal69P(V)具有LCD驅(qū)動(dòng)器的特點(diǎn),采用段式LCD屏,可以縮小下載器的體積,操作方便。



2 工作原理

2.1 幾個(gè)概念

    ①開(kāi)發(fā)方:設(shè)計(jì)IP的開(kāi)發(fā)單位或個(gè)人。
    ②IP擁有方:擁有離線(xiàn)加密編程器的知識(shí)產(chǎn)權(quán)方。
    ③客戶(hù):離線(xiàn)加密編程器的使用者,需向IP擁有方購(gòu)買(mǎi)離線(xiàn)加密編程器的各種軟硬件資源。

2.2 三方關(guān)系

開(kāi)發(fā)方負(fù)責(zé)開(kāi)發(fā)離線(xiàn)加密編程器的各種軟硬件,然后向IP擁有方提供各種所需的軟硬件資源,包括編程器硬件、上位機(jī)軟件,并且根據(jù)IP擁有方的要求編寫(xiě)目標(biāo)板的程序。IP擁有方將軟硬件賣(mài)給客戶(hù),客戶(hù)使用IP擁有方提供的與編程器相關(guān)的軟硬件對(duì)目標(biāo)板進(jìn)行編程操作。開(kāi)發(fā)方提供給IP擁有方的適合目標(biāo)板的程序是未經(jīng)過(guò)加密的,IP擁有方通過(guò)上位機(jī)軟件,自由選擇加密參數(shù),對(duì)未經(jīng)過(guò)加密的程序進(jìn)行加密。客戶(hù)購(gòu)買(mǎi)到離線(xiàn)加密編程器后,可以選擇某一IP擁有方,并在選擇的IP擁有方處進(jìn)行注冊(cè)。購(gòu)買(mǎi)授權(quán)下載次數(shù),通過(guò)客戶(hù)端軟件將加密編程器進(jìn)行授權(quán),此時(shí),加密編程器具備了下載功能。客戶(hù)根據(jù)自己的要求向自己注冊(cè)過(guò)的IP擁有方提出目標(biāo)板軟件購(gòu)買(mǎi)意向,IP擁有方將客戶(hù)要求告知開(kāi)發(fā)方,開(kāi)發(fā)方根據(jù)要求進(jìn)行軟件的編寫(xiě)。軟件編寫(xiě)成功后,開(kāi)發(fā)方將軟件交給IP擁有方,IP擁有方將軟件進(jìn)行加密,并交給客戶(hù),客戶(hù)通過(guò)客戶(hù)端軟件將加密過(guò)的程序存儲(chǔ)到加密編程器。此時(shí),客戶(hù)手中的加密編程器可以脫離PC機(jī)。客戶(hù)將編程器帶到現(xiàn)場(chǎng)對(duì)目標(biāo)板進(jìn)行編程,直到授權(quán)下載次數(shù)用完為止。授權(quán)次數(shù)使用完畢后,客戶(hù)可以通過(guò)客戶(hù)端軟件提取加密編程器的授權(quán)購(gòu)買(mǎi)請(qǐng)求文件,通過(guò)網(wǎng)絡(luò)將文件傳給IP擁有方,IP擁有方根據(jù)文件的內(nèi)容進(jìn)行相應(yīng)的授權(quán)操作,然后將生成的授權(quán)文件通過(guò)網(wǎng)絡(luò)回傳給客戶(hù),客戶(hù)通過(guò)客戶(hù)端軟件將授權(quán)文件下載到加密編程器,如果授權(quán)成功,那么編程器可以繼續(xù)使用。

2.3 文件類(lèi)型

整個(gè)工作過(guò)程涉及以下幾種文件:

    ①加密下載文件:該文件是HEX文件經(jīng)過(guò)加密后得到的文件,其中包含密鑰信息和編程數(shù)據(jù)。
    ②注冊(cè)申請(qǐng)文件:該文件包含申請(qǐng)注冊(cè)所需編程器的內(nèi)部信息及客戶(hù)信息。
    ③注冊(cè)文件:該文件是在注冊(cè)申請(qǐng)文件的基礎(chǔ)上,IP擁有方添加注冊(cè)信息,包括各種參數(shù)。
    ④授權(quán)申請(qǐng)文件:該文件用來(lái)向IP擁有方購(gòu)買(mǎi)授權(quán)下載次數(shù),內(nèi)容包括編程器信息、客戶(hù)信息,以及交易達(dá)成的各種協(xié)議。
    ⑤授權(quán)文件:該文件在授權(quán)申請(qǐng)文件的基礎(chǔ)上添加授權(quán)次數(shù)及說(shuō)明。
    注:其中注冊(cè)申請(qǐng)文件、授權(quán)申請(qǐng)文件是通過(guò)客戶(hù)端軟件從編程器中提取的;注冊(cè)文件、授權(quán)文件通過(guò)客戶(hù)端軟件下載到編程器。

3 編程器工作流程

編程器的工作流程如圖2所示。下載到編程器的加密數(shù)據(jù)需要存入具有SPI接口的大容量外存AT45DB041B 中,然而Atmegal69P(V)的SPI接口需要用來(lái)對(duì)目標(biāo)板進(jìn)行編程,所以只能采用軟件模擬SPI接口來(lái)對(duì)AT45DB041B進(jìn)行讀寫(xiě)操作。對(duì)目標(biāo)板進(jìn)行編程時(shí),為了防止通過(guò)抓取SPI接口的時(shí)序來(lái)得到有效的編程數(shù)據(jù),首先編程目標(biāo)板的引導(dǎo)程序,然后對(duì)目標(biāo)板下載加密數(shù)據(jù),通過(guò)引導(dǎo)程序?qū)?shù)據(jù)進(jìn)行解密后再進(jìn)行目標(biāo)板的編程操作。這樣做的好處是,通過(guò)數(shù)據(jù)加密,使得SPI總線(xiàn)上傳輸?shù)臄?shù)據(jù)均為加密信息,即使得到SPI總線(xiàn)上的時(shí)序,也不能使用。目標(biāo)板的BootLoader程序?qū)⒔邮盏降募用軘?shù)據(jù)進(jìn)行解密,然后將數(shù)據(jù)存儲(chǔ)。這些操作都在單片機(jī)內(nèi)部進(jìn)行,不會(huì)被破解。

3.1 主程序

主程序要完成系統(tǒng)的初始化、中斷設(shè)置、全局變量設(shè)置等。在初始化結(jié)束后,系統(tǒng)進(jìn)入主查詢(xún)循環(huán)過(guò)程以判斷當(dāng)前進(jìn)行的操作,并進(jìn)入相應(yīng)的功能模塊。系統(tǒng)主程序流程如圖3所示。



3.2 編程器與目標(biāo)板的通信

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



4 BootLoader編程設(shè)計(jì)

4.1 BootLoader。介紹

BootLoader區(qū)位于單片機(jī)內(nèi)部Flash的最高地址,BootLoader存儲(chǔ)器空間的大小可以通過(guò)熔絲位進(jìn)行配置。BootLoader為通過(guò) MCU本身來(lái)下載和上載程序代碼提供了一個(gè)真正的同時(shí)讀一寫(xiě)自編程機(jī)制(Read—While—Write,RWW)。這一特點(diǎn)使得系統(tǒng)可以在MCU的控制下,通過(guò)駐留于程序Flash的BootLoader,靈活地進(jìn)行應(yīng)用軟件升級(jí)。BootLoader可以使用任何器件具有的數(shù)據(jù)接口和相關(guān)的協(xié)議獲得代碼并把代碼(程序)寫(xiě)入閃存,或者是從程序存儲(chǔ)器讀取代碼。BootLoader區(qū)的程序可以操作整個(gè)閃存,包括BootLoader區(qū),因而 BootLoader可以對(duì)其自身進(jìn)行修改,甚至將自己擦除。如果系統(tǒng)已經(jīng)不再需要BootLoader,則可以通過(guò)指令控制BootLoader程序,將BootLoader區(qū)擦除。

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

由于目標(biāo)板上AVR單片機(jī)種類(lèi)的不同,所包含的頭文件也不盡相同,而且BootLoader區(qū)的大小也是根據(jù)目標(biāo)板的不同而不同,所以存儲(chǔ)芯片中 BootLoader程序代碼要滿(mǎn)足當(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ū)的大小:



    ②配置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(輸出)四條線(xiàn)。當(dāng)RESET為低電平時(shí),可以通過(guò)串行 SPI總線(xiàn)對(duì)Flash進(jìn)行編程,應(yīng)在執(zhí)行編程或擦除操作之前執(zhí)行編程使能指令。下面以ATmegal69為例,給出一個(gè)實(shí)際的程序。



首先對(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ù)。如果不使用查詢(xún)的方式,那么在操作下一頁(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)行在線(xiàn)操作,這樣就限制了程序調(diào)試和更新的場(chǎng)所。離線(xiàn)加密編程器的設(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)試和更新。

參考文獻(xiàn)

   1. 沈文.Eagle lee.詹衛(wèi)前 AVR 單片機(jī)C語(yǔ)言開(kāi)發(fā)入門(mén)指導(dǎo) 2005
   2. 陳冬云.杜敬倉(cāng).任柯燕 ATmega128 單片機(jī)原理與開(kāi)發(fā)指導(dǎo) 2006
   3. 曹?chē)?guó)華.高藝.姜濤 高速嵌入式單片機(jī)原理與接口技術(shù) 2004
   4. Atmega169 datasheet

作者:中國(guó)海洋大學(xué) 綦聲波  馬秀明
來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用  2008 (10)
本文地址:http://m.qingdxww.cn/thread-11771-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
hotpower 發(fā)表于 2010-6-1 06:07:39
菜農(nóng)非常關(guān)心和研究此類(lèi)事宜~~~

這歸結(jié)為FLASH的ISP+IAP問(wèn)題。

實(shí)際保密應(yīng)該由BootLoader的ISP和“加密”后的程序的IAP這兩個(gè)環(huán)節(jié)構(gòu)成。

重點(diǎn)是破解前者,那么后者不攻自破。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • FPGA設(shè)計(jì)流程培訓(xùn)教程
  • Chiptorials ——使用ATECC608 TrustFLEX實(shí)現(xiàn)基本非對(duì)稱(chēng)身份驗(yàn)證
  • Chiptorials——如何使用ATECC608 TrustFLEX實(shí)現(xiàn)公鑰輪換
  • 無(wú)線(xiàn)充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 六月婷婷久久 | 手机看片1204日韩一区二区 | 成人性生免费视频 | 青青草成人免费在线视频 | 日韩a一级欧美一级在线播放 | 免费看国产黄色片 | 精品视频免费播放 | 91入口 | 护士白浆20p | 一区二区三区在线观看视频 | 91青青青| 人妖大乳 | 日韩成人中文字幕 | 国产自产2023最新麻豆 | 两个人免费完整高清视频中国 | 黄色免费网站在线观看 | 日韩第四页 | 高清欧美一区二区三区 | 黄色成人在线视频 | 青青在线免费 | 欧洲成人爽视频在线观看 | 女人张开腿让男人桶免费最新 | 欧美日韩色黄大片在线视频 | 免费精品99久久国产综合精品 | 四虎影视精品永久免费 | 淫五月天 | 日本不卡在线观看免费v | 一级毛片在线全部免费播放 | 99久久国产| 日韩大片免费观看 | 欧美成人中文字幕 | 丁香六月婷婷综合激情动漫 | 国产日本欧美在线观看 | 日日摸夜夜欧美一区二区 | 日韩高清免费观看 | 日本成人免费网站 | 日本高清视频网址 | 羞羞色男人的天堂伊人久久 | 黄色网页在线 | 国产成人福利在线视频下载 | 精品三级国产精品经典三 |