当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]一种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中,其他类似高速微处理器系统的引导加载方案中也可得到应用,实现了灵活的程序加载。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭