历史上的今天
今天是:2025年03月02日(星期日)
2018年03月02日 | MAXQ1103破坏性复位诊断程序
2018-03-02 来源:eefocus
引言
MAXQ1103 安全微控制器具有很多重要功能,能够防止物理篡改事件并保护有价值的数据。破坏性复位数据源(DRS)是这些功能中关键的一个,DRS允许多个自毁输入(SDI)立即擦除程序和数据密匙以及内部静态RAM的内容。如果应用程序存储在内部程序闪存的加密区内,擦除程序密钥后将使微控制器处于无效状态。
早期的Maxim产品,例如:DS5250,集成了DRS功能。而MAXQ1103能够在破坏性复位之后执行未经加密的诊断程序。这个诊断程序可以执行任何内部未经加密的程序,不需要访问外部存储器总线(该总线在重新上电复位之前处于禁止状态)。
例如,诊断程序可以用于系统维护告警,通过一个调制解调器向控制中心报告“运行故障”,提示用户系统发生问题。该程序可以执行擦除功能并可重新编程内部闪存。
DRS诊断程序配置
DRS诊断程序由DIAE的DRSRS寄存器位使能,DRSRS寄存器位DIAS[3:0]指定程序代码的位置,确定SDI清零后微控制器的向量映射位置。如果诊断向量的地址指针指向加密存储区,微控制器ROM在复位后将简单地中断处理器操作,这是DIAE=0时的默认状态(没有使能诊断程序)。
可以在正常运行程序的任何时间写入DRSRS寄存器,这个寄存器还将保留破坏性复位源的指示标志,这些标志可供诊断程序使用或记录到非易失存储器。
应用举例:加密时钟
为了演示MAXQ1103的DRS诊断程序,采用Rowley CrossWorks编译器编写了一段C语言小程序。该程序利用MAXQ1103评估板(Rev D)构建一个简单的实时时钟(RTC)。
日期和时间持续显示在评估板的LCD上,每秒钟更新一次。利用评估板数字键盘上的ENT键,用户可直接设置日期和时间;指针自动跟着日期和时间字段刷新,图1给出了一个简单的示例。
如果任意一个SDI输入引脚拉高(至VDDIO)并随后释放,微控制器将执行一次破坏性复位。这一复位动作会擦除程序密钥,主程序将停止运行。此时,LCD会显示一个信息,指示发生了DRS,DRSRS寄存器内容将被显示到显示器上,见图2。
DRSRS寄存器的标志指示导致破坏性复位的SDI源。另外,最近一次DRS的时间和日期将被显示在LCD上。这项功能并非DRS诊断程序严格要求的部分,但DRS记录器所捕获的SDI触发时刻的RTS (RTC秒计数器)寄存器值的确为DRS诊断程序的关键。
详细说明
RTC“主程序”的源代码非常简单,本应用笔记将不再详述,但这个源程序很重要,可能作为RTC例程被重复使用。这部分代码储存在CODE存储器段,始于程序存储器地址0x000600。MAXQ30_Target.js包含预装载程序命令,使能带有PMAC和PMSZ寄存器的64k字加密区域,该区域采用3DES加密,存储CODE程序。
为了执行DRS恢复向量,必须保留一定的空间不被主程序使用。MAXQ1103.xml文件中声明一个存储器段,始于0x3C600,长度为16k字,声明存储器段名为RESERVE。由此,我们可以使用Rowley汇编指示CSEG RECOVERY在适当地址存放我们的DRS诊断程序,该地址由DRSRS寄存器的DIAS[3:0]位指定。
函数enable_drs_diag()在DRSRS寄存器写入0x00001E01值。这个数值能够使能诊断向量,选择0x3C600诊断向量位置。
发生破坏性复位后(例如,导致自毁的输入状态已解除),DRS诊断程序将被ROM调用。这个程序不会调用任何位于加密区(由PMAC/PMSZ定义)的程序,程序须避开加密区,否则会导致所不希望的系统操作。
恢复程序包含在drs.asm文件内,说明存储在RECOVERY区域的CSEG的使用。
诊断向量可能调用内部程序存储器中未经加密的C程序,程序调用之前必须安装C运行环境,请参考Rowley编译器的crt0.asm文件决定需要安装的内容。
结论
MAXQ1103诊断程序为程序设计人员提供了一个在与安全有关的破坏性复位之后执行代码的方法。它清晰地划分了加密程序和非加密恢复程序。诊断程序能够记录威胁安全性的攻击,在自毁操作后采取适当的措施,例如:远程报警或进一步擦除内部存储器。
上一篇:一种高可靠性的复位电路
下一篇:上电复位与相关监控功能
史海拾趣
|
哥们今天刚画的16口以太网交换机的原理图(改进过)哥们今天刚画的16口以太网交换机的原理图(PROTEL99SE格式),改进过的,朋友们辛苦啦! [ 本帖最后由 西门 于 2009-5-12 18:50 编辑 ]… 查看全部问答> |
|
LM3S系列单片机采用的是结构简单、性能出众的ARM Cortex-M3处理器内核。Luminary官方(已被TI收购)免费公开地提供了基于C语言(符合ANSI C标准)的驱动库软件包,并且源代码是公开的。因此用户完全可以摒弃晦涩难懂的汇编语言,也不需要掌握底层寄 ...… 查看全部问答> |
|
这是一本关于Intel 80C51 以及广大的51 系列单片机的书 这本书介绍给读者一些新的技术使你的8051 工程和开发过程变得简单 请注意这本书的目的可不是教你各种8051 嵌入式系统的解决方法。 周立功… 查看全部问答> |
|
想用2262,2272做遥控小车,怎样才能使小车前进的同时转弯? 想用2262,2272做个遥控小车,可这个芯片在同一时段只能有一个端口输出,前进时就不能转弯了,不知道该怎样解决,请大家想想,给点思路,用单片机控制也行。… 查看全部问答> |
|
请教如何在Win CE 下开发Driver【或寻北京兼职人员】 想请教一下如何开发Win CE 下的Dirver。 开发流程,用到的技术,是怎么样子的。 希望能帮忙找点例子和相关的文档。 我这边有个嵌入式的项目,目前准备自学后再做。 也希望能得到嵌入式工程师的帮助,大家一起接下这个单子。 如果有兴趣的可以 ...… 查看全部问答> |
|
我把nboot烧写到FLASH的BL0块中,然后把EBOOT烧写到BL2块中,然后通过EBOOT把NK.BIN再下载到FLASH中, 问题一: 那么这个NK.BIN是被EBOOT下载到FLASH哪个地方的呢?是不是代码在EBOOT哪个地方?还是在别的地方?能否告诉下小弟! 问题二: 为什么EBOOT非 ...… 查看全部问答> |




