应用笔记 4273

采用DeepCover安全微控制器(MAXQ1103)评估套件和面向MAXQ30的CrossWorks编译器进行设计


摘要 : 本应用笔记介绍怎样针对DeepCover®安全微控制器(MAXQ1103)开发、构建并调试应用程序。这本应用笔记使用了Rowley Associates为MAXQ30平台提供的CrossWorks C编译器。

引言

DeepCover®安全微控制器(MAXQ1103)设计用于金融终端。它运行16位指令,提供一个32位数据通道。微控制器在一个机器周期中执行完成指令,是性能非常高的RISC机。MAXQ1103还具有很多重要的安全特性,包括:
  • 支持DES、3DES、SHA-1、SHA-224、SHA-256、RSA、DSA和ECDSA的密码加速器
  • 真正的硬件随机数发生器
  • 1KB低泄漏电池备电NVSRAM
  • 与外部电路连接的7个防篡改探测输入
  • 环境传感器,例如温度和电压超范围探测器
MAXQ1103评估(EV)套件是安全应用原型开发的理想平台。套件提供两个串口,两个智能卡插槽(一个全尺寸,一个SIM卡),一个USB连接器,一个LCD屏,一个16按键键盘以及原型区。

设置MAXQ1103评估套件

MAXQ1103评估套件如图1所示。需要采用下面列出的硬件元件来完成本应用笔记所讨论的工作:
  1. MAXQ1103评估套件电路板
  2. JTAG电路板
  3. JTAG电缆(连接MAXQ1103评估套件电路板和JTAG电路板)
  4. 9针串行电缆
  5. 稳压电源(5V、±5%、300mA、中心正极)
图1. MAXQ1103评估套件
详细电路图
(PDF, 14.4MB)
图1. MAXQ1103评估套件

MAXQ1103评估套件电路板和JTAG电路板都有很多跳线需要进行配置。如果需要了解跳线及其功能的详细信息,请参考各自的数据手册。对于本应用笔记,请按照以下要求来配置跳线:
  • 在MAXQ1103评估套件电路板上,短接跳线JU1,连接JU5上面的两个引脚(最靠近JU5标签的两个引脚)。现在,所有其他跳线应打开。如果,JU6到JU18的所有跳线都短接,那就OK。这是智能卡通信需要的配置,本应用笔记不涉及。
  • 在JTAG电路板,短接JH1和JH2,打开JH3。
在JTAG电路板和MAXQ1103套件电路板之间连接JTAG电缆。在JTAG电路板上,红色电缆应连接至标有引脚1和引脚2的一侧,以及MAXQ1103套件电路板的TCK-GND一侧。

注意,在早期的MAXQ1103评估套件中,MAXQ1103 IC可能采用了插槽。如果是这样,把MAXQ1103插入到IC标记向下的插槽中(无铅指示符“+”应在右上侧)。

在您的PC和JTAG电路板之间连接9针串行电缆。不要将其连接至MAXQ1103评估套件电路板。将电源连接至这两块电路板。

采用CrossWorks编译器进行设计:Blinky

我们不以“Hello World”开始,而是构建一个简单的应用程序,该应用程序使MAXQ103套件电路板上的一个LED闪烁。

我们使用的工具包是Rowley Associates公司提供的CrossStudio。现在,工具包当前版本是面向MAXQ30的CrossWorks (2.0.0.2008063000.2293版),可用于产生本文档的截屏显示。为确定是否是最新版本,请在线访问Rowley Associates网站,或者通过Maxim支持中心,与我们取得联系。

在建立新方案时,点击File New New Project。在New Project弹出框中,填写底部的Name和Location框,从Project Templates窗口中选择“A C executable” (图2)。我们调用工程BlinkyDemo,将其放到目录C:\work\maxq\maxq1103\blinky中。

图2. 选择“A C executable”,填写工程名称和位置
图2. 选择“A C executable”,填写工程名称和位置

单击Next继续,您将看到Project Properties弹出框。选择默认值即可,单击Finish,建立工程(您可以单击Next,选择其他的选项;本工程在这些选项中使用所有默认值)。

在建立工程时,Project Explorer框中会出现一个新工程(图3),通常位于应用程序窗口的右上。打开它,您将看到两个文件夹,Source Files和System Files。打开Source Files,将看到main.c,这是您的应用程序源代码。双击它,打开。

图3. Project Explorer窗口
图3. Project Explorer窗口

自动生成的源代码非常简单,我们只需要加入几行就可以使我们的闪烁应用程序工作。复制以下应用程序代码(替换main.c文件中当前的所有内容)。
#include <maxq1103.h>
#include <inmaxq.h>

void delayms(unsigned long count)
{
  unsigned int x;
  while (count > 0)
  {
    for (x=0;x<2500;x++)
    {
      __no_operation();
    }
    count--;
  }
}

void main(void)
{
  // set port 0 to all output
  PD0 = 0xff;
  while (1)
  {
    // toggle bits 0, 1, 7
    PO0 = PO0 ^ 0x83;
    delayms(500);
  }
}
当我们运行这一应用程序时,会看到LED DS1、DS2和DS3 (位于套件电路板MAXQ1103的左下侧)闪烁,接通0.5s,关断0.5s。注意,“delayms”函数并不恰好是一毫秒,而是非常接近,达到了blinky应用程序的目的。

在运行演示实例前,必须首先构建它。选择Build Build BlinkyDemo。或者按下F7来构建。如果一切都正确构建,您将在Output窗口看到消息“Build complete”,它旁边有一个对勾(图4)。如果有错,请确定您输入的代码是否正确。

图4. 工程构建后的输出
图4. 工程构建后的输出

运行应用程序时,单击Debug Step Over。也可以按下F10,或者单击带有向下箭头工具条中的图标(图5)。

图5. Step Over按钮
图5. Step Over按钮

CrossStudio通过JTAG电路板把应用程序下载到MAXQ1103中,Output窗口显示状态消息。应用程序将开始运行,然后,在代码第一行停止(左侧空白区显示黄色箭头)。运行应用程序时,单击“Play”按钮(或者选择Debug Go)。现在,请确定MAXQ1103电路板上的LED正在闪烁。您可能希望能够在一定程度上修改应用程序。使LED按顺序闪烁,或者改变点亮时间,更快或者更慢的闪烁。

使用CrossStudio调试应用程序

现在,让我们了解一下MAXQ1103和CrossStudio工具的调试功能。MAXQ1103有内置JTAG引擎,支持在实际芯片上进行调试,从而不需要昂贵的仿真器或者有可能出错的模拟器。注意,MAXQ1103还提供锁定机制,在元件锁定时,防止JTAG工作。这样,当MAXQ1103微控制器用在敏感应用中时,保证了JTAG调试引擎不会带来安全威胁。

现在,我们返回到最初的Blinky应用程序,在主函数中,把延时从500改到5:
delayms(5);
现在,构建并运行应用程序。注意,LED持续点亮,而不是不断闪烁。这就是简单演示代码第一次编写并运行时的情况。

这样会带来一个基本问题:“灯的确是连续点亮,还是闪烁非常快,而无法察觉呢”?如果灯是连续点亮,那就有必要检查原理图和引脚分配,确定一切OK。如果LED只是很快地闪烁(太快,以至于看不清间隔),那就只需要调整时间,这是可能需要做的工作。为回答这一问题,我们现在使用CrossStudio的调试工具。

按下Pause按钮(或者选择Debug Break)。在代码停止的地方,出现一个黄色箭头。代码很有可能停止在delayms()函数的‘for’循环中(参见图6)。

图6. 在delayms()函数中,代码停止运行
图6. 在delayms()函数中,代码停止运行

观察右侧的Locals窗口(如果看不到该窗口,单击Debug Debug Windows Locals)。该窗口将显示变量“x”和“count”的当前值。现在,按下Step Over按钮几次。在Locals窗口中,您应该看到x值增加了(可以连续按下Step Over,直到循环结束,但这可能需要很长的时间)。

现在,已经很容易回答“灯是在闪烁吗”这一问题了? 对此,需要在main函数的delayms(5)一行设置断点,单击该代码行左侧的小三角。它将变为红圈(图7)。现在,再次运行应用程序(Debug Go,或者Play按钮)。应用程序会运行到这一点,然后暂停。现在,点击Go若干次后,您会看到,随着您的点击,灯接通和关断。这验证了灯是在闪烁,只是太快,我们的眼睛无法察觉。

图7. 加入断点
图7. 加入断点

现在,我们借这个机会了解一下更多的调试功能。按下Step Over按钮几次,按顺序执行三行代码:while(1)PO0 = PO0 ^ 0x83delayms(5)。您将看到,当通过PO0行时,灯闪烁。现在,当暂停在delayms(5)行时,按下Step Into按钮(图8),进入delayms()函数(而不是Step Over,这会执行整个函数)。

图8. Step Into按钮
图8. Step Into按钮

在运行时,还可以改变变量(和寄存器)。清除所有断点(Debug Breakpoints Clear All Breakpoints),单击Go。单击Pause,程序应再次停止在delayms()函数的中间部分。注意“x”和“count”值。现在,把x设置为2499 (单击x显示的数值,高亮后输入2499)。执行几次Step Over或者Step Into,您会看到循环结束,“count”值也递减了。

以及您感兴趣的其他调试功能:
  • Debug Disassembly将同时显示C代码和生成的汇编代码。这样,用户可以进入汇编代码,而不是C代码,同时知道对应于C代码的什么位置。
  • Debug Debug Windows Call Stack将显示应用程序到达当前位置时所调用的函数。如果在delayms()函数中暂停执行,其显示如图9所示。
  • 使用Debug Stop停止调试,观察右侧的Targets窗口。确定Maxim Serial JTAG Adapter以粗体字显示,观察下面的配置选项。如果您使用串口,而不是默认的COM1,那么,可以在这里改变这一选项。
图9. 在delayms()函数中运行时调用堆栈
图9. 在delayms()函数中运行时调用堆栈


更多信息
软件库和参考设计目前正在由Maxim工程师开发。如果您需要了解库和工具的最新信息,或者您对本应用笔记还有任何问题,请联系技术支持