应用笔记 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工程师开发。如果您需要了解库和工具的最新信息,或者您对本应用笔记还有任何问题,请联系技术支持
下一步
EE-Mail 订阅EE-Mail,接收关于您感兴趣的新文档的自动通知。
© , Maxim Integrated Products, Inc.
The content on this webpage is protected by copyright laws of the United States and of foreign countries. For requests to copy this content, contact us.
APP 4273:
应用笔记 4273,AN4273, AN 4273, APP4273, Appnote4273, Appnote 4273