一种C55x DSP的串行引导与程序加密方法
扫描二维码
随时随地手机看文章
摘要 以TI公司的TMS320VC5509A和SST公司的SST25LF080A为例,介绍了一种通过串口模式对Flash中的程序进行二次加载和加密方法。文中还给出了相关硬件连接、自举表的建立。实验证明,采用该引导装载系统具有较强的实用性,可以提高DSP软件的保密性。
关键词 TMS320VC5509A;SST25LF080A;串行引导
随着数字信号处理技术的发展,数字信号处理器(DSP)以其卓越的性能、独有的特点,成为通信、计算机、消费类电了产品等领域的基础器件,被广泛地应用于各种数字信号处理系统中。由于数字信号处理器(DSP)内部的ROM需要在生产时写入程序,所以多数场合下,系统加电后,DSP需要将一段存储在外部非易失性存储器的代码转移到内部高速存储器单元中执行,这样既利用了外部的存储单元扩展了DSP本身有限的ROM资源,又充分发挥了DSP内部资源的效能。目前Flash存储器应用最为广泛,其兼有存取快速、电可擦除、可在线编程、大容量、低功耗、小尺寸、以及价格低廉等优点,已成为新一代数字信号处理系统中的重要组成部分。但是,由于外部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高速静态RAM,内部只读ROM中固化了引导加载程序(Bootloader),该程序在系统上电或复位后可以将用户代码自动搬移到片内RAM运行。
1.2 自举加载模式选择
TMS320VC5509A每次上电复位后,在执行完一系列初始化(配置堆栈寄存器、关闭中断、程序临时入口、符号扩展、兼容性配置)工作后,根据预先配置的自举模式,通过固化在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允许应用代码存放在慢速非易失性的外部存储器中,再将代码搬移到高速的片内存储器中执行。应用代码以一种Bootloader能够理解的特殊格式编码,这种格式就是自举加载表。Bootloader在引导程序时,程序代码是以自举加载表形式加载。自举加载表包含了将要搬移的代码段、程序段,以及这些段将要被搬移到的地址、加载完成后程序要执行的地址f即程序入口地址和其他配置信息。TMS320VC55x系列DSP的自举加载表结构如表1所示。
其中,程序入口地址是自举加载表加载结束后,用户程序开始执行的地址;待配置寄存器数目决定了后面有多少个寄存器需要配置;只有当延时标志为OxFFFF时,延时才被执行;延时长度决定了在寄存器配置后,延时多少个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号作为密钥进行解密,加载结束和完成解密后再继续运行。
为防止破译者直接修改读取ID部分的引导代码,改为使用固定ID,还必须基于数据驱动进行连续二次保护。它的处理对象是一些重要参数或变量,通过读取引导程序的校验值和DSP本身ID,完成对这些参数或变量“加锁”,让它们以密文形式存在于程序中。这样即使完成了对引导程序的简单破译,也无法使程序正常运行。
经过处理,可以有效地避免通过读取Flash内容直接破译,或者直接读取Flash内容后在不同产品中反复利用的做法,对保护知识产权有着重要的意义。对于DSP代码加密,可以根据需要的加密复杂程度进行算法选择,实现框图如图2所示。
3 结束语
针对TMS320VC5509A和SST25LF080A,使用串行方式实现程序自举引导的二次引导加载,提出基于该方式的程序加密方法。该方法不仅可用于TMS320VC5509ADSP中,其他类似高速微处理器系统的引导加载方案中也可得到应用,实现了灵活的程序加载。