Armadillo

Armadilloのハードとソフトをデバッグする

平成16年9月19日更新

Armadillo(アットマークテクノ製)は、Linuxに対応した小型CPUボードです。ARM720T(ARM7TDMI) CPUを採用し、LANやコンパクトフラッシュ、PC/104を実装しています。

このチュートリアルでは、ArmadilloのCPUをMITOUJTAGで操作・デバッグ(JTAG-ICEあるいはエミュレータとも言う)する方法や、メモリへのデータのダウンロード、Armadilloに搭載されているCPLDの入出力信号を観察する方法を紹介します。

ハードウェアの準備

Armadilloは、写真1のような外観をしています。コアとなる部品は、CS89712というARMコアを搭載したCPUで、CS89712にはCPUのほかにEthernetコントローラが搭載されています。

図1 Armadilloの外観

?

Armadilloには、CPUとCPLDの2つのJTAG対応デバイスが搭載されており、JTAGコネクタは各デバイス用に1つずつ、合計2つあります。

このうち、CON7がXC9572XL用のJTAGコネクタで、CON6がCPU用のJTAGコネクタです。各コネクタの場所とピン配置は次の図2のとおりです。

図2 ArmadilloのJTAGコネクタ配置

?

CPUに対してのデバッグを行うためには、お手持ちのJTAGケーブルからCON6に次の表1のように配線を行います。

?

表1 ArmadilloのCPUへのJTAG配線

信号

コネクタ

TCK

CON6-9

TDI

CON6-5

TMS

CON6-7

TDO

CON6-11

VCC

CON6-1もしくは13

GND

CON6-2,4,6,8,10,14のいずれか

プルアップ

CON6-12

?

CON6の12番ピンはURESETという信号です。この信号はできるだけ+3.3Vにプルアップしてください。

VCCとGNDは複数ありますので、どれか1つだけを使用すれば問題ありません。また、TRSTは特にオープンでも問題なく動作しました。不安な方は、JTAG-ICEを開始する前にLのパルスを与えるとよいでしょう。

また、CPUのJTAGをイネーブルにするには、ボード上のJP3をジャンパする必要があります。なお、JP3をジャンパすると、CPUのnTEST0とnTEST1という信号が同時に0になり、CPUはJTAG-ICE可能なモードになります。この設定を忘れると、JTAG-ICEは全く動作しませんのでご注意ください。

CPLDに対するJTAGデバッグを行う場合は、特に注意事項はありません。CON7の各端子にJTAGケーブルを接続するだけでデバッグが可能になります。

CPUのJTAGデバッグ

CON6にJTAGケーブルを接続し、MITOUJTAGを起動します。ケーブルを接続し、自動認識を実行すると、次のようにARM7TDMIが認識されます。もし、認識されない場合はCON6へのJTAG接続、電源、JP3のジャンパを確認してください。それでも認識されない場合は、URESETをプルアップし、Armadilloのリセットボタンをプッシュし、再度自動認識を試みます。

自動認識すると、MITOUJTAGの画面には図1のようにARM7TDMIと書かれた灰色の四角が表示されます。

図3 ARM7TDMIが認識された状態

?

灰色の四角の上にマウスカーソルを合わせ左クリックすると、図2の灰色の四角が図3のように灰色の網掛けで表示されます。

図4 ARM7TDMIをマウスクリックで選択

 この状態で、メインメニューからTools→Nahitafu ARM debugerを起動します。すると、図5のようにARMデバッガが起動します。

 

図5 ARMデバッガを起動

?

タンを押すと、停止アドレスを表示してCPUが停止します。CPUが停止するとステータスバーが赤くなります。また、「」ボタンでステップ実行を行うと、アセンブラレベルで1命令ずつステップ実行を行うことができます。図6の例ではCPUは0x60001e6cで停止し、その後1命令ずつ実行させています。
 ※ RS232Cでターミナルを接続するとわかりますが、Uncompressing ramdisk........と表示されているときには、起動ルーチンが0x60000000番地のSRAM上で実行しています。Linuxの起動が始まると0XC0000000以降のSDRAM上で動作します。シングルステップ実行させると、ログイン画面で待機している状態は、0xc00344c0番地から始まることがわかります。不意にJUMPさせると、Kernel Panicと表示され固まってしまいます。(実際には0xc003e6ac番地で無限ループ)。

図6 CPUの停止と、ステップ実行、メモリダンプ

?

 また、上の図6の例では、ステップ実行の後、メモリの内容をダンプしています。

 MITOUJTAGのARM用JTAG-ICEでは、保護されたメモリアドレスというのはなく、全てのアドレスに対して実行することができます。ARM7の場合は、OnChipのBootROMの内容も見ることができますので、ご注意ください。

 また、CPUが停止した際には、画面の右側に全レジスタの値が表示されます。各レジスタの値は値を入力してChangeボタンを押すと強制的に変更することができます。

 すなわち、CPU停止→レジスタ変更→CPU再開というデバッグが可能です。

 停止やステップ実行で停止したCPUの動作を再開するには、ボタンを押します。

?

 Armadilloのように高度なCPUボードでは、既にLinuxが動いているため、低レベルのデバッグを行う必要はないかもしれません。しかし、例題としてGCCで作成したLED点滅プログラムを、JTAG経由でダウンロードします。

リスト1 ArmadilloでLEDを点滅させるプログラム

int?main()
{

int?i = 0;
int?j = 0;
unsigned long?*PADR = (unsigned long?*)0xFF000000;
unsigned long?*PADDR = (unsigned long?*)0xFF000040;

*PADDR = 0xfe000000;?
// PORTA0以外はすべて入力に

while(1)
{
i++;

if((i & 0x1ffff) == 0)?// 適当に時間待ち
{
j++;

if(j & 1) *PADR = 0x01000000;?// PORTA0を操作
else?*PADR = 0x00000000;
}
}

return?0;
}

?

?

 このプログラムを、0xC0000000番地から配置されるようにし、実行ファイルをelf形式で作成します。CPUに内蔵されたI/Oのレジスタは本来は0x80000000番地から配置されていますが、MMUにより0xFF000000に配置されています。また、ビッグエンディアンでプログラムを作成します。

 MITOUJTAGで、のボタンを押すと、ELFファイルをメモリ上にダウンロードできます。ダウンロードを開始する番地は、ELFファイルに記述されている番地になります。

 ArmadilloではLinuxが動作しているため、JTAG経由でプログラムをダウンロードし、そのプログラムにジャンプすると確率的にKernel Panic を発生させてしまうことがあります(図7)。割り込みやトラップが行われないように工夫すれば、Kernel Panicを起こさずに任意のプログラムをダウンロードして動作させることができるでしょう。


図7 CPUのアドレスカウンタを強制設定した直後にKernel Panic

 Armadilloに限って言えば、既にARM上でLinuxが動作しているので、メモリ上に直接プログラムを流し込んだり、アドレスカウンタを強制的に変更するような、低レベルでのデバッグが必要になることはまずありませんが、CS89712を使用した組み込みハードウェアを新規に開発する際には低いレベルでのデバッグが必要となるかと思います。

CPLDのデバッグ

 Armadilloに実装されているXC9572XLの信号の入出力を、MITOUJTAGで観察します。

 ArmadilloのCON7にJTAGケーブルを接続したら、MITOUJTAGを起動し、チェーンの接続を行い、デバイスの自動認識を行います。

 MITOUJTAGをセットアップした環境(※HDD中のBSDLファイルの存在状況)にもよりますが、私の環境ではXC9572XV_CS48が認識されました(図8)。


図8 CPUのアドレスカウンタを強制設定した直後にKernel Panic

XC9500XLシリーズと、XC9500XVシリーズはIDCODEが同じであるため、手動でデバイスの種類を特定します。図8の灰色の四角の上でマウスを右クリックし、プルダウンメニュが表示されたら、Change Deviceを実行します。

次の図9のようなダイアログが表示されるので、XC9572XL_TQ100を選択します。

図9 XC9572XL_TQ100を選択

XC9572XL_TQ100のパッケージの外観が表示されます(図10)。

図10 CPLDの外観が表示される

ここで、ツールバーを押すと、CPLDのピンの状態をJTAGでサンプリングし、図11のように色分けで表示します。

図11 CPLDの入出力ピンの状態を視覚的に表示

また、各ピンのピン名とピン配置を対応付けるためにUCFファイルを読み込むことができます。UCFファイルを読み込むためには、図12のようにデバイスの絵の上でマウスで右クリックをし、プルダウンメニューの中からLoad pin definitionを実行します。ファイル選択ダイアログが開くので、UCFファイルを選択します。

図12 ピン定義ファイルを読み込み

UCFファイルでピン名の定義を行うと、JTAGロジックアナライザが非常に効果的に活用できます。

図13は、Armadilloの起動時のCPLDのピンの状態をJTAGロジックアナライザでサンプリングしたものです。LDやLAのバスが密に詰まっている部分は、RS232Cで接続したコンソールにUncompressing ramdiskと表示されている時で、すなわちフラッシュROMに圧縮されたLinuxのイメージを展開している最中です。
リセット後、約50秒すると各種のデーモンの起動などが行われています。

 

図13 ロジックアナライザを起動

ハードとソフトの協調デバッグ

従来のJTAGソフトウェアでは決して行うことができなかったハードとソフトの協調デバッグを、MITOUJTAGは可能にします。

組み込み機器の開発において、ハードに問題がある場合にはソフトウェアが全く動作しないことがあります。MITOUJTAGを活用すればソフトウェアが全く起動しないような状況下においても、ハードウェアの信号の一本一本を確認するというレベルでの問題解決が可能になります。

また、CPUのレジスタをMITOUJTAGのJTAG-ICEで書き換え、それにともなってI/Oポートやアドレスバスから何らかの信号を出力し、JTAGロジックアナライザで観測するという新しいデバッグ方法が可能になります。

?

MITOUJTAGを活用すると、FPGAだけでなくCPLDの入出力信号さえもリアルタイムに観察することができ、ソフトウェアが予期した動作をしているかどうかを非常にわかりやすい手段で確認することができます。

特に、組み込み開発スタートの時点、すなわちハードウェアとソフトウェアを同時に開発しなければならないシチュエーションにおいても、デバッグの労力を大幅に軽減することでしょう。