秋月電子ARM7ボード

秋月電子ARM7ボードをMITOUJTAG/NJARM7でデバッグする。

発表 2004年7月22日
最終更新日 2013年4月10日

このページには、秋月のARM7ボードに、プログラムをダウンロードする方法や、レジスタダンプ、メモリダンプなど様々なデバッグを行うための情報が記述されています。

MITOUJTAG/NJARM7を使えば、秋月のARM7のソフトウェアの開発に、「開発セット」は必要ありません。

1.概要

秋月のARM7ボードは、ATMELのAT91R40807というARM7TDMIコアを内蔵したCPUと、1MByteのフラッシュROM、RS232Cレベルコンバータを搭載したボードです。4,800円という低価格でありながら、ARM7の学習ができます。

しかし、このARM7ボードについているフラッシュROM(AT24LV1024)は購入時点ではブランク状態であり、最初にCPUを動かすためには1「開発セット」を買わなければならないと書かれています。

この「開発セット」というのは、ARMボード本体に、H8にLANが載った「MITSUIWAボード」とROMライタボードをセットにした、いわゆるROMライタであって、最初にモニタプログラムを書き込むためだけに用いられます。その後は全く使用しません。

JTAGを使ってARMにソフトウェアをダウンロードすれば、余計なキットを買う必要は全くないのです。

すなわちMITOUJTAG/NJARM7を用いれば、「開発セット」を全く使うことなくARM7のソフトウェア開発ができ、ROMライタを使う煩わしさから開放されます。しかも、JTAG接続ケーブルは、わずか5本の線でパソコンのプリンタポートとつなぐだけですので、500円くらいで自作できます。

もちろん、MITOUJTAG/NJARM7は秋月のARMボードのためだけに開発されたものではありません。ARM7TDMIコア汎用に使用することができ、CQ出版のARM評価キットや、SHARPのLH79533など、ARM7コアを内蔵していれば何でも動作いたします。

MITOUJTAGおよびNJARM7の詳しい使い方はマニュアルを参照してください。

2.JTAGの接続と起動

2.1 JTAGの接続

ARM7ボードを組み立てたらJTAGで接続します。XILINX互換のJTAGケーブルを用意して、下記のように接続します。

なお、ARM7ボードの電源は3.3Vです。私はそのような電圧のACアダプタを持っていないので、安定化電源から電源をとっています。

秋月ARM7ボード

JTAGケーブル

備考

CN2の38

TCK

?

CN2の36

TDI

?

CN2の35

TMS

?

CN2の37

TDO

?

CN2の39

VCC

?

CN2の40

GND

?

CN2の34

RESET

2004/8/1追加

 ARM7ボードのCN2の配置は下の図のとおりです。

 接続は下の図のようになります。

 74HC125によるバッファが入ったXILINX互換のケーブルでなくても、プリンタポートと配線を直結して作る「即席のJTAGケーブル」でも動作します。

 (ただし、ノイズに多少弱くなる上、ご使用のPCによっては、パラレルポートの電圧の振幅がARMの入力電圧の絶対最大定格を若干オーバーすることがあります。)

ご注意

 本ケーブルはあくまでも試験用の簡易ケーブルです。本格的にご使用になる場合は、バッファの入ったXILINX互換のケーブルをご利用いただくことを強くお勧めします。

?

 また、5V耐性がないデバイスに対してこの簡易ケーブルを用いると、デバイスに恒久的なダメージを与える可能性がありますので、5V系以外のデバイスで使用する場合には、パラレルポートの電圧振幅とターゲットデバイスの入力端子の絶対最大定格電圧に十分ご注意ください。

 XILINX互換のJTAGケーブルにはRESET出力がありません。ARM7にRESETを送りたい場合には、パラレルポートのD5あるいはD7から秋月のARM7ボードのCN2の34番に与えてください。(上の回路図を参照)

 AT91R40807には、リセット入力は1つしかないので、TRS、SYSRESETでもどちらをつないでもかまいません。

 LEDや、RS232Cをつなぐとこんな感じです。

2.2 起動

 NJARM7をご使用の場合は、アイコンをダブルクリックして起動するだけです。
 MITOUJTAGでご使用の場合は、まず、チェーンを接続した後、デバイスを自動認識させます。

 左シングルクリックでデバイスを選択し、メインメニューから「Tools→Nahitafu JTAG ARM debuger」で起動してください。

3.ARM上で動作するプログラムの作成

3.1 On Chip RAMとREMAP操作

 AR91X40は、内部に136kバイトのSRAMを持っています。このSRAM上にプログラムをダウンロードすれば、ROMに焼くことなくいろいろなソフトウェアを動作させることができます。

 なお、136kバイトのRAMは、8kバイトのPrimary RAM Bankと、128kのSecondary RAM Bankに分かれています。

 CPUコアから見たメモリマップは下の図のようになっています。

 ARM7のアドレス空間は32ビットなので(ただしAT91シリーズが外部に出せるアドレスバスは24ビット)、4Gバイトのアドレス空間を持ちます。

 ARMはアドレスの0番地付近にリセットベクタなどを配置していますが、起動直後にはその領域には外部のROMが接続されています。しかし、REMAPという操作を行うと、Primary RAM Bankがその領域にマッピングされます。

 REMAPは、起動直後にはリセットベクタなどをROMの内容で設定し、初期設定後にはRAMをマッピングして動的に変更できるようにする仕組みのようです。REMAPを行うには、アドレスの0xFFE00020番地(EBI_RCRレジスタ)に、0x00000001を書き込むようです。(ちょっと自信ない)

 とにかく、RAM上で動くソフトウェアをつくるだけならば、REMAPは不要なようです。

3.2 パラレルIOを使う

 AT91X40シリーズには、いくつかはタイマー出力などと共有されていますが、32本のパラレルIOがあります。

 あまり詳しくCPUのマニュアルを読んでいないのですが、パラレルIOのアクセス方法は奇妙です。

 普通のマイコンでは、モード設定レジスタに「ペリフェラルかIOか」を書込み、「入力か出力か」を書込み、データを書き込めば出力されます。

 しかし、AT91X40では、PIO許可レジスタとPIO禁止レジスタ、PIO出力許可レジスタとPIO出力禁止レジスタ、PIO出力セットレジスタとPIO出力クリアレジスタ、などというように、許可と禁止の対になったレジスタが用意されています。出力許可レジスタに0を書いても出力は禁止されず、出力禁止レジスタに1をかくことで出力を禁止できるという仕組みです。

 要するに、普通のワンチップマイコンのレジスタがDフリップフロップであるのに対し、RSフリップフロップで構成されているような感じです。

 例えば、パラレルIOのP24から値を出力するためには、次のようにします。

?

PIO_PER = (1 << 24); // P24をペリフェラルではなく、PIOとして使用する。

PIO_OER = (1 << 24); // P24を出力モードに設定する。

PIO_SODR = (1 << 24); // P24からデータ'1'を出力する

PIO_CODR = (1 << 24); // P24からデータ'0'を出力する

?

 なお、PIO_PERに設定した値をクリアするにはPIO_PDRを、PIO_OERに設定した値をクリアするにはPIO_ODRを使用します。

 パラレルポートから入力するには、PIO_PDSRを使用します。

4.サンプルソフトウェア

4.1 適当なソフトウェア

 適当に作った動作確認用ソフトウェアです。 たいしたものではありません。

 このソフトウェアは、LEDを光らせたり、シリアル通信をしたり、フラッシュROMにテスト書き込みをします。

ledtest.c ソースコード

ledtest.lst LSTファイル

ledtest.elf 実行

4.2 WinGCCでのコンパイル

 秋月のキットを買ったときについてくるWinGCCで、「AT91R40807 for RAM」の設定を用いて普通にコンパイルすれば、0x00100000番地に配置された実行形式が作成されます。

 しかし、そのまま実行したのではうまくいきません。AT90R80704では、Secondary RAMが書き込み禁止にプロテクトされており、StartUpルーチンの中でメモリ書込み例外が発生してしまうからです。

 メモリの書込み禁止を解除するには、「Device Specific」→「Unprotect Secondary RAM Write」を一度実行します。

 また、キットに付属のWinGCCは、ソースを更新した際に「実行→クリア」と「実行→コンパイル」を毎回行わなければならないようです。Makefileがちゃんと働いていないような気がします。

5.その他

 WinGCCの仕組みはよくわかりませんが、JTAGでRAM上に自由にプログラムをダウンロードして実行することができるようになりました。

 私は.xファイルとか、起動ルーチンとか、GCCで行うクロスコンパイルとか、ROM化とかについて詳しくありません。

 Hra!さんという方が、秋月のARM7に関する素晴らしい解説資料およびAPIやROMライタなどのソフトウェアを作ってくださっています。

 これでもう秋月の「開発キット」は不要ですね!