まさか君も秋月ARM基板を買ってしまったのか・・・

少し前にSTM32 Primer1/2用のOS,CircleOSがバージョンアップしてます。同じく
してRaisonance RIDE7の開発環境も新しくなっていました。ねむいさんはCodesourcery
をメインに使っていますがRIDEに使用されているコンパイラもCodeSourcery。
RIDEのはまだツールチェーンのバージョンがひとつ古いです(2009年9月20日現在)

早速RIDEを入れ替え、CircleOSを新しくしようと思ってRFlasher起動させてRLINKを認識
させようとするといきなりB.S.O.D.に!!!再起動掛けて同じ事やろうとしてもやっぱ
りB.S.O.D.…orz仕方ないので一度RIDEの環境を全部消してまっさらな状態でもう一度
インストールを行い(USB周りのデバドラももちろん全部消した上で)、試すと今度はOK。
…RAMディスクにデータ乗っけて作業してること多いのでマジ涙目なお話。
追:WinUSBのドライバをXPでも使えるようにすると涙目が治りました。



…前フリはおいといて、秋月はSTM32 Primer2というARMマイコンのプロトタイプボード
を販売していますが、それよりもずっと前にARMの基板を販売していました。
ご存じの方が多いと思いますが、販売当時のネット上の状況、とりわけ2chの電電板の
反応をみると芳しくない反応だらけでした。ボード単体では何もできないとかROM書く
のにMITUIWAボードなるLAN搭載のボードを別途購入してそのボードにROMを載せ替えて
書き込む必要が、つまりは別途ROMライタが必須だとか、そのボードはせっかくLANが
あるのに何でかシリアル経由で書く必要があるとか程度のことですが。…うn?


なんかもう持ってるだけで情弱扱いされてしまいそうですが、それを言ったら上記の
Primer2だって買っても使いたおさなければ情弱アイテムになりかねないのは同じで
すしでもこれ以上ネガチヴなことは言うのやめてせっかくタダ同然で私の手に入った
ので使ってみようと決心しました。でもほんっとに基板だけしかなかったので先人が
ネット上に遺してくれた資料だけを頼りに動かしてみることに。

この秋月ARM基板の詳しい説明はなひたふ氏HRA氏が残されています。AT91R40807
MCU内にフラッシュロムがなく、8kbのPrimaryRAM,128kbのSecondaryRAMのみがありま
す。秋月ARM基板には外付けでAT29LV1024というフラッシュロムが乗っかっていますが、
MITUIWAボード(=ROMライタ)を使用せずにJTAG経由でなおかつ安価な方法でROMの書き
換えをを秋月ARM基板単体で行う方法をHRA氏は実現しています。
少し詳しく言うとJTAG経由でRAMにIAP(In-Application Programming)を転送・実行し、
秋月ARM基板そのものをROMライタ化させている…といった感じです。

HRA氏はIAPの転送を行うJTAGアクセスの方法としてなひたふ氏が当時無料で公開して
いたMITOUJTAG体験版を使用していますが記事が書かれて数年後の今、MITOUJTAGは
残念ながら私たちホビイストの手の届かない場所に逝ってしまいました。しかし今は
OpenOCDという超強力なツールがあるので私はOpenOCDを使って同じことを再現する
ことにしました。

またサンプルコードについては何分大昔の物なので私が愛用しているCodeSourceryG++
の環境ではまともにビルドが通りません。結局スタートアップやリンカスクリプト等は
ほぼすべて1から書きなおしています。AT91R40807に当たっては避けて通れないリマ
ップのし方とかOpenOCDで同CPUを叩くスクリプトの書き方とかはすごく勉強になった…。
以下各モードでの動かし方とか動かした様子とか。

うー
うー

ROMスタートモードで実行するときは、まずIAP(ここではRomloader.elf)をSecondary
RAMに転送&実行し、UART1上で本来書き込むべきプログラムをフラッシュロムへとダウ
ンロードします。本来はDCC経由で書くべきなんでしょうけどもHRA氏が作成されたツー
ルを最大限に利用させてもらいました…。
うー
ROMに置かれたプログラムは、スタートアップルーチン内でSecondaryRAMに転送され、
そこでさらにbss領域初期化などの処理を経てmain関数へと飛びます。

うー
RAMスタートモードで実行するときは、ROMに書かれた内容はガン無視でリマップされた
SecondaryRAMに0x00100000からダウンロードします。さすがに早いです!

うー
ROMスタート時と違って一切合財SecondaryRAMに押し込むので少しかさが増えてます。

OpenOCDを使用した上記RAM,ROMスタート方法の具体的なテクニックは後に示すソース
中のmakefikeを見てくださいね。


OpenOCD+CodesourceryG++のARM開発環境下でRAM,ROMスタートの方法を見つかるまで
かなり時間がかかりましたけどいつものUart経由でprintf出力の所まではできました。
うー

こっから先は回路図持ってないので出来ません…。ていうかSTM32F107とかLPC2388とか
の魅力的な石が出回ってる現在ではこれ以上この基板に時間をかける気はもう微塵も
ありません!!…しかし、時間が死ぬほど余ってる&この基板をただで手に入れたぜ〜!
なんて人は、リマップやROMなしCPUにおける外部ROMスタートの仕組みを学ぶのに
うってつけだと思います。
※20090930:
祝!秋月さんHPにてついに回路図が公開されたようです!
ねむいさんはもうこの基板やらないけど!

今回のテストプログラムはこちらです。最低限の部品で動きます。
またAT91R40807用のOpenOCDのスクリプトはこちらに。
上記サンプルソースにはビルド済のRomloaderのelfがあるけど別途コンパイルしたい
なんて方のためにこちらに置いときます…。
以上ご利用は自己責任で…。


全然関係ないけどAT91R40807が正解なんだけどAT91R40708といつも間違えてしまうorz

Comments

Post a Comment








Go to top of page