一種C55x DSP的串行引導(dǎo)與程序加密方法
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要 以TI公司的TMS320VC5509A和SST公司的SST25LF080A為例,介紹了一種通過(guò)串口模式對(duì)Flash中的程序進(jìn)行二次加載和加密方法。文中還給出了相關(guān)硬件連接、自舉表的建立。實(shí)驗(yàn)證明,采用該引導(dǎo)裝載系統(tǒng)具有較強(qiáng)的實(shí)用性,可以提高DSP軟件的保密性。
關(guān)鍵詞 TMS320VC5509A;SST25LF080A;串行引導(dǎo)
隨著數(shù)字信號(hào)處理技術(shù)的發(fā)展,數(shù)字信號(hào)處理器(DSP)以其卓越的性能、獨(dú)有的特點(diǎn),成為通信、計(jì)算機(jī)、消費(fèi)類電了產(chǎn)品等領(lǐng)域的基礎(chǔ)器件,被廣泛地應(yīng)用于各種數(shù)字信號(hào)處理系統(tǒng)中。由于數(shù)字信號(hào)處理器(DSP)內(nèi)部的ROM需要在生產(chǎn)時(shí)寫入程序,所以多數(shù)場(chǎng)合下,系統(tǒng)加電后,DSP需要將一段存儲(chǔ)在外部非易失性存儲(chǔ)器的代碼轉(zhuǎn)移到內(nèi)部高速存儲(chǔ)器單元中執(zhí)行,這樣既利用了外部的存儲(chǔ)單元擴(kuò)展了DSP本身有限的ROM資源,又充分發(fā)揮了DSP內(nèi)部資源的效能。目前Flash存儲(chǔ)器應(yīng)用最為廣泛,其兼有存取快速、電可擦除、可在線編程、大容量、低功耗、小尺寸、以及價(jià)格低廉等優(yōu)點(diǎn),已成為新一代數(shù)字信號(hào)處理系統(tǒng)中的重要組成部分。但是,由于外部Flash存儲(chǔ)器中的內(nèi)容易被他人讀取,因此在利用DSP進(jìn)行產(chǎn)品設(shè)計(jì)時(shí),如何保護(hù)自己的成果,防止被竊取盜用,成為了設(shè)計(jì)工作的重要方面。本文基于TI公司的TMS320VC550 9A實(shí)現(xiàn)一種加解密體制,利用加密算法來(lái)保護(hù)DSP程序。
1 TMS320VC5509A的自舉引導(dǎo)
1.1 TMS320VC5509A介紹及其Bootloader
TMS320VC5509A是TI公司推出的一款高性能DSP,最高工作在可以200 MHz主頻,IO供電電壓3.3 V;核電壓1.2~1.6V。支持DMA操作、支持多媒體卡(MultiMedia Card,MMC)、安全數(shù)字卡(signal data converter,SDC)的讀寫;集成了USB控制器、I2C總線控制器、MCBSP口、實(shí)時(shí)時(shí)鐘RTC,以及多路A/D轉(zhuǎn)換器;具有PGE和BGA兩種封裝形式。片內(nèi)具有64 Byte ROM和128 Byte高速靜態(tài)RAM,內(nèi)部只讀ROM中固化了引導(dǎo)加載程序(Bootloader),該程序在系統(tǒng)上電或復(fù)位后可以將用戶代碼自動(dòng)搬移到片內(nèi)RAM運(yùn)行。
1.2 自舉加載模式選擇
TMS320VC5509A每次上電復(fù)位后,在執(zhí)行完一系列初始化(配置堆棧寄存器、關(guān)閉中斷、程序臨時(shí)入口、符號(hào)擴(kuò)展、兼容性配置)工作后,根據(jù)預(yù)先配置的自舉模式,通過(guò)固化在ROM內(nèi)的Bootloader程序進(jìn)行程序引導(dǎo)。引導(dǎo)模式選擇是根據(jù)4個(gè)引腳BOOTM[0:3]配置完成的。BOOTM 0~3引腳分別與GPIO 1、2、3、0相連。BOOTM[0:3]在實(shí)際的電路連接是將芯片引腳通過(guò)上拉或下拉電阻接地或接電源來(lái)實(shí)現(xiàn)。系統(tǒng)中采用Flash存儲(chǔ)器完成串行引導(dǎo),只需將BOOTM[3:0]設(shè)置成0100即可。
1.3 TMS320VC5509A引導(dǎo)表
Bootloader允許應(yīng)用代碼存放在慢速非易失性的外部存儲(chǔ)器中,再將代碼搬移到高速的片內(nèi)存儲(chǔ)器中執(zhí)行。應(yīng)用代碼以一種Bootloader能夠理解的特殊格式編碼,這種格式就是自舉加載表。Bootloader在引導(dǎo)程序時(shí),程序代碼是以自舉加載表形式加載。自舉加載表包含了將要搬移的代碼段、程序段,以及這些段將要被搬移到的地址、加載完成后程序要執(zhí)行的地址f即程序入口地址和其他配置信息。TMS320VC55x系列DSP的自舉加載表結(jié)構(gòu)如表1所示。
其中,程序入口地址是自舉加載表加載結(jié)束后,用戶程序開始執(zhí)行的地址;待配置寄存器數(shù)目決定了后面有多少個(gè)寄存器需要配置;只有當(dāng)延時(shí)標(biāo)志為OxFFFF時(shí),延時(shí)才被執(zhí)行;延時(shí)長(zhǎng)度決定了在寄存器配置后,延時(shí)多少個(gè)CPU周期才進(jìn)行下一個(gè)動(dòng)作:段長(zhǎng)度、段起始地址和數(shù)據(jù)則為用戶程序中定義的各個(gè)段的內(nèi)容,并且可以重復(fù)添加;最后以32個(gè)0作為引導(dǎo)表的結(jié)束標(biāo)志。若需要生成引導(dǎo)表,可用CCS最終編譯生成的.out文件,通過(guò)CCS自帶的hex55.exe轉(zhuǎn)換程序得到。
[!--empirenews.page--]
2 自舉和加解密實(shí)現(xiàn)
2.1 硬件設(shè)計(jì)
SST25LF080A是SST公司生產(chǎn)的SPI串口8 MbitFlash,支持SPI的Mode0和Mode1方式,其可靠性高,最大時(shí)鐘頻率為33 MHz,供電電壓為3.3 V,可重復(fù)寫10萬(wàn)次以上。采用8腳SOIC封裝形式,與TMS320VC5509A的硬件連接如圖1所示。
2.2 二次引導(dǎo)技術(shù)
DSP本身所帶的Bootloader不能實(shí)現(xiàn)加密功能,因此對(duì)于Flash里的程序無(wú)法起到保護(hù)作用。所以在Bootloader的基礎(chǔ)上,還需要進(jìn)行二次引導(dǎo),即通過(guò)DSP內(nèi)部ROM同化Bootloader,首先引導(dǎo)另一個(gè)引導(dǎo)程序,該程序是由用戶自行編寫,功能與ROM固化的Bootloader類似,但增加了對(duì)程序代碼加解密和校驗(yàn)等功能,并在加載結(jié)束后,把PC值置于實(shí)際程序的入口地址,使程序轉(zhuǎn)至實(shí)際程序。
2.3 程序加密與解密
對(duì)程序的初始保護(hù),即把最終運(yùn)行的程序代碼寫入Flash芯片之前,對(duì)代碼進(jìn)行加密處理。過(guò)程如下,DSP的一次引導(dǎo)過(guò)程只加載儲(chǔ)存在SST25LF080A中的加解密程序,需要向Flash寫入時(shí),讀取DSP自身的ID號(hào)作為密鑰,通過(guò)一定的加密算法將二次引導(dǎo)的程序進(jìn)行加密處理后再寫入,這樣,SST25LF080A中就不存在明文形式的代碼。
DSP的一次引導(dǎo)過(guò)程只加載儲(chǔ)存在SST25LF080A中的加解密程序,二次引導(dǎo)則加載SST25LF080A中已經(jīng)加密的代碼,然后讀取DSP自身的ID號(hào)作為密鑰進(jìn)行解密,加載結(jié)束和完成解密后再繼續(xù)運(yùn)行。
為防止破譯者直接修改讀取ID部分的引導(dǎo)代碼,改為使用固定ID,還必須基于數(shù)據(jù)驅(qū)動(dòng)進(jìn)行連續(xù)二次保護(hù)。它的處理對(duì)象是一些重要參數(shù)或變量,通過(guò)讀取引導(dǎo)程序的校驗(yàn)值和DSP本身ID,完成對(duì)這些參數(shù)或變量“加鎖”,讓它們以密文形式存在于程序中。這樣即使完成了對(duì)引導(dǎo)程序的簡(jiǎn)單破譯,也無(wú)法使程序正常運(yùn)行。
經(jīng)過(guò)處理,可以有效地避免通過(guò)讀取Flash內(nèi)容直接破譯,或者直接讀取Flash內(nèi)容后在不同產(chǎn)品中反復(fù)利用的做法,對(duì)保護(hù)知識(shí)產(chǎn)權(quán)有著重要的意義。對(duì)于DSP代碼加密,可以根據(jù)需要的加密復(fù)雜程度進(jìn)行算法選擇,實(shí)現(xiàn)框圖如圖2所示。
3 結(jié)束語(yǔ)
針對(duì)TMS320VC5509A和SST25LF080A,使用串行方式實(shí)現(xiàn)程序自舉引導(dǎo)的二次引導(dǎo)加載,提出基于該方式的程序加密方法。該方法不僅可用于TMS320VC5509ADSP中,其他類似高速微處理器系統(tǒng)的引導(dǎo)加載方案中也可得到應(yīng)用,實(shí)現(xiàn)了靈活的程序加載。