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