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

DeepCoverセキュアマイクロコントローラ(MAXQ1850) EV KITおよびMAXQ30用CrossWorksコンパイラ入門


要約: このアプリケーションノートでは、DeepCover®セキュアマイクロコントローラ(MAXQ1850)を対象とするアプリケーションの作成、ビルド、およびデバッグの方法について解説します。ここで示す例では、MAXQ1850の評価(EV)キットとRowley Associates社のCrossWorks Cコンパイラを使用します。

はじめに

マキシムのDeepCover®セキュアマイクロコントローラ(MAXQ1850)は、電子商取引、バンキング、およびデータセキュリティなどのアプリケーション向けに設計された、高性能、高セキュリティ、低ピン数、32ビットRISCマイクロコントローラです。このマイクロコントローラは、16ビットの命令を実行し、32ビットのデータパスを備えています。ほとんどの命令を単一クロックサイクルで実行することで、MAXQ1850は非常に高性能なRISCマイクロコントローラになっています。また、MAXQ1850は次のような多数の重要なセキュリティ機能を備えています。
  • RSA、DSA、およびECDSAをサポートする2048ビットモジュラー演算アクセラレータ
  • AES-128、AES-192、AES-256、SHA-1、SHA-224、SHA-256、DES、および3DESをサポートする暗号ハードウェアアクセラレータ
  • 真のハードウェア乱数生成器
  • 8KBの低リーク電流バッテリバックアップNVSRAM
  • 4個の自己消去入力
  • 高速なキー/データ消去付きのタンパー検出
  • 環境センサ(温度、電圧など)による規定範囲外の状態の検出
MAXQ1850-KITのEV (評価)キットは、セキュアアプリケーションのプロトタイピングに最適なプラットフォームです。このEVキットは、RS-232シリアルポート、2個のスマートカード用スロット(フルサイズ1個とSIMカード1個)、USBコネクタ、LCD画面、16個のプッシュボタンによるキーパッド、およびプロトタイピング用スペースを備えています。

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

MAXQ1850-KITのボードを図1に示します。EVキットのパッケージには以下のハードウェアコンポーネントが含まれており、このアプリケーションノートの実装に使用します。
  1. MAXQ1850-KITのボード
  2. JTAGボード
  3. JTAGケーブル(MAXQ1850-KITボードとJTAGボードの接続用)
  4. 9ピンのシリアルケーブル
  5. 2つの安定化電源(5V、±5%、300mA、センタープラス)

    注:Rev Cキットは1000mA電源が付きます。
図1. MAXQ1850-KITボード(Rev B)
画像の拡大
(PDF, 5.6MB)
図1. MAXQ1850-KITボード(Rev B)

MAXQ1850-KITボードは、設定変更用の複数のジャンパを備えています。ジャンパの完全な一覧およびその機能については、データシートをご覧ください。このアプリケーションノートでは、次のようにジャンパを設定します。
  • JU30 (MAXQ1850の左下近く)
  • ピン1 (PCB上の正方形のパッド)とジャンパJU5のピン2 (バッテリ近く)とJU20 (電源入力近く)を接続
  • ジャンパJU21のピン2と3 (MAXQ1850の右上近く)を接続
  • 他のジャンパはすべてオープンにしてください。
注:MAXQ1850-KIT CDに含まれる例には異なるジャンパ設定が必要なものもあります。ジャンパ位置についてはその例のREADME.txtファイルをご参照ください。

JTAGボード(P2)とMAXQ1850-KIT (J6)ボード間にJTAGケーブルを接続してください。JTAGボードではケーブルの赤ストライプはピン1およびピン2とラベル書きされたコネクタ側に接続してください。MAXQ1850-KITボードでは、ケーブルの赤ストライプをピン1、TCKに接続してください。(ピン1はPCB裏面の正方形パッドで見分けられます。)

PCとJTAGボード間に9ピンシリアルケーブルを接続してください。最後に5V電源を接続してください。Rev AとBキットでは、JTAGボードの電源コネクタ(J2)とEVキットボード(J1)に電源を接続してください。Rev CボードではまずEVキットボードのジャンパJU31、およびJTAGボードのJH3を閉じてください。次に、電源をEVキットボード(J1)に接続してください。Rev CボードはJTAGボードに給電します。

CrossWorksコンパイラ入門

MAXQ1850-KITを使い始めるために、ボード上の3個のLEDを点滅させる簡単なアプリケーションプログラムを作成します。固定の、反復的なシーケンスでLEDを点滅させることによって、LEDがボード上で「歩いている」ように見えます。ソースコードはEVキットCDに収録されており、またマキシムサイトからダウンロードすることもできます。このアーカイブZIPファイルをC:\MAXQ1850\LEDに解凍してください。

マキシムが使用するツールスイートは、Rowley Associates社のCrossStudioです。アプリケーションノート執筆の時点では、CrossWorks IDE for the MAXQ30、バージョン2.0.0.2009012302.4045が使われました。最新の改訂版を確認するには、Rowley Associates社のウェブサイトをチェックするか、またはマキシムまでお問い合わせください(英語のみの対応となります)。Rowley CrossWorksの詳細については付録Aをご参照ください。

新しいソリューションを作成するため、File New New Projectに進んでください。New Projectポップアップで、最下部のNameボックスとLocationボックスに入力して、Project TemplatesウィンドウでA C executableExecutableカテゴリを選択してください(図2)。プロジェクト名をLEDとして、ディレクトリC:\MAXQ1850\LEDに格納します。

図2. New Project画面
図2. New Project画面

Nextをクリックして先に進むと、Project Propertiesウィンドウが表示されます(図3)。現在はTarget ProcessorがMAXQ1103になっている可能性があります。プロセッサの型番をダブルクリックすることによって、MAXQ1850プロセッサを選択することができます。再びNextをクリックしてProject files main.cからチェックマークをはずしてください(図4)。自身のファイルを追加します。Finishをクリックしてプロジェクトを作成してください。

図3. MAXQ1850プロセッサを選択
図3. MAXQ1850プロセッサを選択

図4. 新規プロジェクトのオプション
図4. 新規プロジェクトのオプション

プロジェクトが作成された時点で、通常はアプリケーションウィンドウの右上に位置するProject Explorerウィンドウ(図5)内に、新しいプロジェクトが表示されます。プロジェクトLEDを拡大すると、Source FilesSystem Filesという2つのフォルダがあります。Source Fileを右クリックしAdd Existing Fileを選択してください。C:\MAXQ1850\LEDまでブラウジングしmain.cspi.cの両方を選択し、次にOpenをクリックしてください。

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

このアプリケーションを実行すると、(EVキットのボード上のプロトタイピング用スペースのすぐ左に位置する) DS1、DS2、およびDS3の各LEDが順番にオン/オフの点滅を行います。しかし、アプリケーションを実行する前に、「ビルド」を行う必要があります。Build Build LEDを選択するか、または、F7を押してください。すべてが適切にビルドされた場合、横にチェックマークの付いたBuild completeというメッセージがOutputウィンドウに表示されます(図6)。

図6. プロジェクトをビルドした後のOutput
図6. プロジェクトをビルドした後のOutput

アプリケーションのロードを試みる前にTargetsウィンドウでJTAG Debug Portを設定してください。Maxim Serial JTAG Adapterをダブルクリックすると太字フォントに変わります。情報については下のProperties Windowを見てください。図7にあるようにプロパティと設定のリストが表示されます。Connection Port Nameを、JTAGボードが接続されているシリアルポートに設定してください。

図7. Targetプロパティウィンドウ
図7. Targetプロパティウィンドウ

アプリケーションをロードするためにはDebug Goを使うか、またはF5を押してください。プログラムはJTAG付きのEVキットにロードを行い、main関数の始めに止まります。Goオプションが使えない、またはプログラムがロードしない場合は、トラブルシューティングとして付録Bをご参照ください。

この点からアプリケーションを実行するためにはDebug Goを選んでください(またはPlayボタンのように見えるボタンをクリックしてください)。ここでMAXQ1850-KITのボード上のLEDが点滅していることを確認してください。アプリケーションをここで変更したいと思うかもしれません。その場合は、逆シーケンスでLEDを点滅させようとしたり、点灯される時間量を変えると点滅が早くなったり遅くなったりします。

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

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

LEDアプリケーションについて考えてみてください。まずDebug Stopを使って現在のデバッグセッションを止めます。実験として、main.c関数内のDelay関数で遅延カウンタを200000から2000に変更してください。
for(i=0;i < 2000; i++) ;
そして、Build Build and Debugを選択してアプリケーションのビルドと実行を行ってください。ツールセットによってプロジェクトが再ビルドされ、新しいプログラムがロードされ、実行が開始されます。今度はLEDがオン/オフの点滅を行わず、連続的に点灯するようになったことに注意してください。

Pauseボタンを選択することによって(またはDebug Breakを選択)、現在のコード行でプログラムの実行が停止して、左マージンに黄色の矢印が表示されます。このプログラムは大部分の時間をDelay関数のforループの実行に費やしているため、おそらくコードはそこで停止するはずです(図8を参照)。

図8. Delay関数内でコードの実行が停止した状態
図8. Delay関数内でコードの実行が停止した状態

右側にあるLocalsウィンドウを見てください。(表示されていない場合は、Debug Debug Windows Localsに進んでください)。このウィンドウには、変数iの現在の値が表示されます。ここで、Step OverボタンまたはDebug Step Overを押してください。プログラムを1秒間動作させた後、再度Pauseボタンを押してください。iの値が増加しているはずです。

この関数を抜けるには、ループが終了するまでStep Overボタンを押し続けても構いませんが、それには時間がかかります。単にStep OutボタンまたはDebug Step Outを押すことによって、Delay関数を抜けて呼出し元の関数main.cに戻るまでプログラムが実行されます。

ブレークポイントを設定することによっても、これと同様の結果を得ることができます。main.c関数内でDelay関数を呼び出している任意の行にブレークポイントを設定するには、それらのコード行の1つで左に表示されている小さな三角形をクリックしてください。三角形が赤い丸に変化します(図9)。再度アプリケーションを実行してください(Debug GoまたはPlayボタン)。アプリケーションはそのポイントまで実行して停止します。

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

他のデバッグ機能についても調べてみましょう。Step Overボタンを数回押してください。1回押すごとに、Cのソースコードが1行ずつ実行されます。各LEDを制御している行を通過するたびに、LEDが点滅するはずです。Delay()という行の1つで停止したところで、Step IntoボタンまたはDebug Step Intoを押してください。すると、その関数の内部に入って、実行可能な最初の行で停止します。すでに見たように、Step Outボタンを一度クリックするだけで、Delay()関数から抜けることができます。

実行中に、変数(およびレジスタ)を書き換えることも可能です。Goをクリックして、Pauseをクリックすると、プログラムはまたDelay()関数の途中で再び停止するはずです。「i」の値を見てください。ここで、i1998をセットしてみます。(iの値として表示されている部分をクリックして、ハイライト表示されたら1998を入力してください) Step Intoボタンをクリックすると、iが最終値に達したため、ループが終了するはずです。

その他にも、いくつか興味深いデバッグ機能が存在します。
  • Debug Disassemblyは、Cコードと、生成されたアセンブリコードを一緒に表示します。これを使用すれば、Cコードの代わりにアセンブリコードをステップ実行することが可能で、アセンブリコードの実行に伴ってCコードも表示されます。
  • Debug Debug Windows Call Stackは、アプリケーションが現在の位置に到達するまでに呼び出された関数を表示します。Delay()関数の中で実行を一時停止した場合は、図10のような表示になります。
図10. Delay()関数を実行中のCall Stack
図10. Delay()関数を実行中のCall Stack

補足情報

全MAXQ1850機能用のコード例付きEVキットCDがご利用可能です。このCDのご請求をご希望の場合または、このアプリケーションに関して問題をお持ちの場合は、マイクロコントローラサポートまでお問い合わせください(英語のみの対応となります)。

MAXQ30用Rowley CrossWorksの公式文書の入手についてはここをクリックしてください。

付録A. Rowley CrossStudio

Rowley CrossWorks IDEバージョン

EVキットCDにあるLED例および全ての例はMAXQ30用Rowley CrossWorksの最新バージョン(リリース2.0.0.2009012309.4045)で開発されました。このIDEバージョンを使うことが大変重要です。このIDEバージョンのプロジェクトファイルは旧バージョンと互換性がありません。どのリリース版をお持ちかを確認するためにはCrossStudio Help About CrossStudioを開いてください。

MAXQ30用Rowley CrossWorksを入手するには

MAXQ30用CrossStudioはRowley社から入手可能です。http://www.rowleydownload.co.uk/maxq/documentation/home.htm 「Latest Downloads CrossWorks for MAXQ30」下の「Version 2.0 for Windows」を選んでください。実行可能なファイルをダウンロードしインストールしてください。

Rowley社はCrossWorks IDEの30日間の評価期間を提供しています。指示に従ってください。

MAXQ30用Rowley CrossWorksのライセンスを購入するためには: Eメールまたはお電話+44(0)1453 549536がご利用いただけます(英語のみの対応)。

付録B. トラブルシューティング

プロジェクト例で問題をコンパイル

付属のプロジェクトファイルから用例をコンパイルしようとした際に問題が生じた場合は、Rowley CrossWorksコンパイラのバージョンの非互換性による問題によるところが多々あります。この非互換性は、プロジェクトのビルドができない、正しい出力ファイルを生成しない、デバッグセッションの開始の失敗、デバッグボタンのグレイ化、ベンダーパッケージがインストールされていないことを知らせるエラー表示など異常な振る舞いを起こすことがあります。

この問題を直すには、現在インストールされているIDEでプロジェクトファイルを再度作成してください。まずプロジェクトディレクトリから現在の.hzpおよび.hzsファイルを削除してください。上記指示またはEVキットCDのREADME.txtファイルのセクションDに従ってください。プロジェクトは正しく作成されデバッグします。

シリアル-JTAGボードに関する問題

マキシムのシリアルJTAGアダプタでMAXQ1850-KITへの接続について、Rowley CrossWorksが問題を報告する場合は以下のステップを1度試してみてください。
  • JTAGプログラミングケーブルの向きが正しいことを確かめてください。シリアルJTAGアダプタボード(コネクタP2)とMAXQ1850 (コネクタJ6)の両方でピン1に赤ストライプが向かっていることを確かめてください。ピン1はEVキットPCBの裏面の正方形パッドによって確認できます。
  • シリアルJTAGアダプタボードとEVキットの両方が電源に接続されていることを確認してください。シリアルJTAGアダプタボードLED DS1は点灯しているはずです。MAXQ1850-KITボードではLCDスクリーンの一番上の行にかすかな正方形がいくつか見えるはずです。
  • Rowley CrossWorksで正しいシリアル通信ポートが選択されていることを確認してください。TargetsウィンドウからマキシムのシリアルJTAGアダプタをダブルクリックして、ポート名がシリアルJTAGアダプタボードに接続されているシリアルポートに対応していることを確認してください。
  • シリアルJTAGアダプタボードとEVキットの両方から電源ケーブルを切断してください。TargetsウィンドウのMaxim Serial JTAG Adapterを右クリックして、Disconnectを選択してください。両電源ケーブルを再接続して、Connectを選択してください。
  • アプリケーションノート4027 「How to Update the Firmware in the MAXQ Serial-to-JTAG Board」の説明に従ってシリアルJTAGアダプタボードのファームウェアをリロードしてください。