アプリケーションノート 4273

MAXQ1103の評価キットおよびMAXQ30用CrossWorksコンパイラ入門


要約: このアプリケーションノートでは、マイクロコントローラMAXQ1103を対象とするアプリケーションの作成、ビルド、およびデバッグの方法について解説します。このアプリケーション開発では、Rowley Associates社のMAXQ30プラットフォーム用CrossWorks Cコンパイラを使用します。

はじめに

MAXQ1103は、金融端末アプリケーション向けに設計された、マキシム・インテグレーテッド・プロダクツの次世代セキュアマイクロコントローラです。このマイクロコントローラは、16ビットの命令を実行し、32ビットのデータパスを備えています。各命令は単一のマシンサイクルで実行され、それによってこのマイクロコントローラは非常に高性能なRISCマシンになっています。また、MAXQ1103は次のような多数の重要なセキュリティ機能を備えています。
  • DES、3DES、SHA-1、SHA-224、SHA-256、RSA、DSA、およびECDSAをサポートする暗号アクセラレータ
  • 真のハードウェア乱数生成器
  • 1KBの低漏れ電流バッテリバックアップNVSRAM
  • 外部の回路に結合する7個のタンパ検出入力
  • 温度や電圧の範囲外検出器などの環境センサ
MAXQ1103の評価(EV)キットは、セキュアアプリケーションのプロトタイピングに最適なプラットフォームを提供します。このキットは、2個のシリアルポート、2個のスマートカード用スロット(フルサイズ1個とSIMカード1個)、USBコネクタ、LCD画面、16キーのキーパッド、およびプロトタイピング用スペースを備えています。

MAXQ1103のEVキットのセットアップ

MAXQ1103のEVキットを図1に示します。このアプリケーションノートで解説する作業を実施するためには、以下のハードウェアコンポーネントが必要になります。
  1. MAXQ1103のEVキットのボード
  2. JTAGボード
  3. JTAGケーブル(MAXQ1103のEVキットのボードとJTAGボードの接続用)
  4. 9ピンのシリアルケーブル
  5. 安定化電源(5V、±5%、300mA、センタープラス)
図1. MAXQ1103のEVキット
画像の拡大
(PDF、14.4MB)
図1. MAXQ1103のEVキット

MAXQ1103のEVキットとJTAGボードは、それぞれ設定変更用のジャンパを備えています。ジャンパおよび機能の完全な一覧については、EVキットに付属するそれぞれのデータをご覧ください。このアプリケーションノートでは、次のようにジャンパを設定します。
  • MAXQ1103のEVキットのボードは、ジャンパJU1を短絡させ、JU5の上位2ピン(JU5というラベルに最も近い2本のピン)を接続してください。他のジャンパは、今のところすべてオープンにしておきます。JU6〜JU18の中に短絡されているものがある場合、おそらくそれで問題ありません。これらはスマートカードの通信に関する設定用であり、このアプリケーションノートでは説明しません。
  • JTAGボードは、JH1とJH2を短絡にして、JH3をオープンにしてください。
JTAGケーブルでJTAGボードとMAXQ1103のキットのボードを接続してください。赤いケーブルを、JTAGボード上ではコネクタのpin 1およびpin 2と印刷されている側に、MAXQ1103のキットのボード上ではTCK-GNDの側に接続してください。

旧式のMAXQ1103のEVキットは、MAXQ1103 IC用のソケットを備えている場合があることに注意してください。その場合は、ICのマーキングが上下逆になるように(鉛フリーを示す「+」が右上に来るように) MAXQ1103をソケットに装着してください。

9ピンのシリアルケーブルでPCとJTAGボードを接続してください。MAXQ1103のキットのボードには接続しないでください。2枚のボードに電源を接続してください。

CrossWorksコンパイラ入門:Blinky

「Hello World」の代わりに、MAXQ1103のキットのボード上のLEDを点滅させる簡単なアプリケーションの構築から始めます。

使用するツールスイートは、Rowley Associates社のCrossStudioです。現時点でのこのツールスイートの最新バージョンはCrossWorks for the MAXQ30 (バージョン2.0.0.2008063000.2293)であり、このドキュメントに含まれるスクリーンショットの作成にはこれを使用しました。最新バージョンをチェックするには、Rowley Associates社のウェブサイトをご覧いただくか、または弊社ウェブサイトのマキシムサポートセンターを通してお問い合わせください。

新しいソリューションを作成するため、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という2つのフォルダがあります。Source Filesを開くと、アプリケーションのソースコードであるmain.cが表示されます。ダブルクリックしてそのファイルをオープンしてください。

図3. Project Explorerウィンドウ
図3. Project Explorerウィンドウ

自動生成されるソースコードは非常にシンプルであり、数行追加するだけでLED点滅アプリケーションを動作させることができます。以下のアプリケーションコードをコピーしてください(現在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);
  }
}
このアプリケーションを実行すると、DS1、DS2、およびDS3の各LED (キットのボード上でMAXQ1103の左下に位置しています)が、約0.5秒間オンになり約0.5秒間オフになるという形で点滅するはずです。「delayms」関数は正確に1msではありませんが、Blinkyアプリケーションの目的にとっては十分に近い長さになっています。

デモを実行するためには、その前にビルドを行う必要があります。Build Build BlinkyDemoを選択してください。F7を押下してビルドを行うこともできます。すべてが正しくビルドされている限り、チェックマークの付いたBuild CompleteというメッセージがOutputウィンドウ(図4)内に表示されます。エラーが発生した場合は、コードが正しく入力されているか確認してください。

図4. プロジェクトをビルドした後のOutputウィンドウ
図4. プロジェクトをビルドした後のOutputウィンドウ

アプリケーションを実行するには、Debug Step Overを選択してください。または、F10を押下するか、ツールバー内にある下向き矢印が付いたアイコン(図5)をクリックしてください。

図5. Step Overボタン
図5. Step Overボタン

CrossStudioによってアプリケーションがJTAGボードを通してMAXQ1103にダウンロードされ、その間Outputウィンドウにステータスメッセージが表示されます。アプリケーションの実行が開始され、コードの1行目で一時停止します(左マージンの黄色の矢印で位置が示されます)。プログラムを動作させるには、「再生」ボタンに似た外観のボタンをクリックしてください(またはDebug Goを選択してください)。そしてMAXQ1103ボード上のLEDが点滅していることを確認してください。ここで、アプリケーションに少し変更を加えてみると良いでしょう。LEDを順番に点滅させたり、点灯時間を変えて点滅を次第に早くしたり遅くしたりしてください

CrossStudioを使用したアプリケーションのデバッグ

次に、MAXQ1103とCrossStudioツールのデバッグ機能の一部について調べてみましょう。MAXQ1103は、実際のシリコン上におけるデバッグを可能にして、高価なエミュレータや潜在的に不正確性を持つシミュレータを不要にする、組込みのJTAGエンジンを備えています。また、MAXQ1103はロック機構も備えており、デバイスがロックされている間はJTAGの動作が防止されることに注意してください。これによって、機密性の高いアプリケーションにMAXQ1103マイクロコントローラを配備した場合、JTAGデバッグエンジンがセキュリティ上の脅威にならないことが保証されます。

元のBlinkyアプリケーションに戻って、main関数内のディレイを500から5に変更してください。
delayms(5);
そしてアプリケーションのビルドと実行を行ってください。LEDがオン/オフの点滅を行わず、連続的に点灯するようになったはずです。この簡単なコード例を最初に書いて実行したときにも、これと同じことが起こりました。

すぐに最初の疑問が頭に浮かびました。「実際にライトが連続して点灯しているのだろうか、それとも点滅が速すぎて目に見えないのだろうか?」ライトが連続してオンになっている場合には、回路図と端子割当ての検査を大幅に強化して、どこにも問題がないことを確認する必要があります。単にLEDの点滅が速い(速すぎて間隔を明確に視認することができない)場合には、タイミングの調整が必要になるだけであり、これはおそらく予想された作業のはずです。この疑問に答えるために、ここでCrossStudioのデバッグツールを使用します。

Pauseボタンをクリックしてください(またはDebug Breakを選択してください)。コードが停止した位置に、黄色の矢印が表示されます。おそらくコードはdelayms()関数の「for」ループの中で停止しているはずです(図6参照)。

図6. delayms()関数内でコードの実行が停止した状態
図6. delayms()関数内でコードの実行が停止した状態

右側にあるLocalsウィンドウを見てください(表示されていない場合は、Debug Debug Windows Localsを選択してください)。変数「x」と「count」の現在の値が表示されているはずです。ここで、Step Overボタンを数回クリックしてください。プログラムを1秒間動作させた後、再度Pauseボタンをクリックしてください。Localsウィンドウ内で「x」の値が増大するのが分かるはずです(ループが終了するまでStep Overボタンを押し続ける方法もありますが、それには「非常に長時間」かかります)。

答えを必要とする本当の疑問が「ライトは点滅していたのか?」であることはもう明らかです。そこで、関数mainの中のdelayms(5)という行にブレークポイントを設定するため、そのコード行の左にある小さな三角形をクリックしてください。三角形が赤い丸に変化します(図7)。そして再びアプリケーションを実行してください(Debug Goまたは再生ボタン)。アプリケーションは、そのポイントまで実行して停止します。その後Goを数回クリックすると、クリックするたびにライトがオンになったりオフになったりするばずです。これで、ライトは点滅していたが速すぎて目に見えなかったということが確認されました。

図7. ブレークポイントを追加した状態
図7. ブレークポイントを追加した状態

この機会に、その他のデバッグ機能についても調べておきましょう。Step Overボタンを数回クリックすると、while(1)PO0 = PO0 ^ 0x83、およびdelayms(5)という3行のコードが、順番に実行されます。また、PO0の行を通過するたびにライトが点滅するのが分かります。次に、delayms(5)の行で停止している状態でStep Intoボタン(図8)をクリックすると、(Step Overが関数全体を実行するのに対して) delayms()関数の内部に入ることができます。

図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()関数を実行中のCall Stack


補足情報
ソフトウェアライブラリおよびリファレンス設計が、現在マキシムのエンジニアによって開発中です。利用可能なライブラリとツールに関する最新の情報が必要な場合、またはこのアプリケーションノートに関して何か問題がある場合はテクニカルサポートまでお問い合わせください(英語のみの対応となります。)。