STM32基板にもJTAGインターフェース
薄紙をはがすように見えてくる(4/21/09)
ARMプロセッサーの構造が少しづつ少しづつ理解できるようになってきた。これまでチンプンカンプンだった雑誌の記事が意味のあるものになってくる。GNUを使ったSTM32基板のプログラム開発の記事(DWM誌2008年6月号4章)など、最初は全く理解できなかったが、周辺の情報が増えたので少しづつ具体的なイメージが湧いて手順が見えるようになってきた。薄紙をはがすように全体が見えてくる。これはこれで楽しいものである。
スタートアップルーチンが必須であることも、この記事にちゃんと書いてあった。スタートアップルーチンから、Cソースのmain.cにどうやって制御を渡すのかわからなかったが、ソースを調べると例外割込みベクターにあることがわかり、全体の流れがはっきりしてきた。CPUが複数の動作モードを持ち(やっと本格的なコンピューターになってきた)、メモリリソースの割り当てが柔軟に出来るようになっているため、無理にCで書くよりアセンブラーで書いたほうが手順がわかりやすいということも何となくわかる。
ただ、完全にわかったわけではないから、現在のソースやスクリプトをどう変えて行けば、ターゲットマシンでうまく動くのかという具体的な手順はまだまだ見当がつかない。暫くは有りものを手探りで使っていくしかない。
8ビットマシンのAVRから、いきなり32ビットのARMに移行しようというのだから少し無理があることは確かだ。本来の次のステップは16ビットマシンのH8なのだろうが、H8では設計が古すぎ、SPIが250khzどまりでは話にならない。H8/3069Fの900ページを超すデータシートも1/3まで印刷して勉強していたが、最終的なゴールを動画あたりまでとすると、どうも先行きがない。この際は、ちょっと無理をしてでも32ビットマシンにしておいた方が良いだろう。雑誌のオマケ基板でなく、直接ARMを買うにしても今はそう高くない。
もう少しでBeagle BoardのRev Cを注文しそうになる(4/22/09)
以前の記事(2/26)にも書いたハイエンドのCPUボードの新版がもう市場に出ていることを知った。ARMの情報収集をしていて迷い込んだ2ちゃんねるのサイトに出ていた。結構アンテナを立てていたのだが、なかなか普通のサイトでは出てこない。時々はこのサイトもチェックしておく必要があるようだ。
この新版のRev Cは、基板に場所があるだけのUSBのホストインターフェース(写真の8)や、その他の不具合がほぼ解消されており、RAMが倍増して256MBになっているが値段は149ドルと前のままだ。日本円では¥17000ばかりで手に入る。日本ではDigiKeyのサイトから買え、すでに買った人のレポートまである。
このボード何しろLinuxが軽々動きXwindowまで動くグラフィック機能を内蔵している。一時期Linuxにはまっていた がた老AVR研究所としては、今のことを放り出しても手に入れたい強烈な物欲にかられる。しかし、今はARMのJTAGインターフェースまで買って2つのARM基板を動かそうとしているところだ。それどころではない。
それでもいつのまにか気がついてみるとPCの画面は、物欲の悪魔に誘われてDigiKeyのサイトになっている。「Linuxが動くからUSB経由で、インターネットもHDD接続も自由自在。お家サーバーとしては省電力で実用性は抜群」と悪魔がささやく。DigiKeyの発注画面を前にしてもう少しで注文のクリックを押すところまで行ったが、やっとのことで思いとどまった。
STM32基板でもJTAGコマンドが動いた(4/24/09)
LPC2388基板がzusさんのサイトの助けを借りてEclipse上でロード/デバッグができるようになった。しかし、去年のARMの付録基板Cortex-M3(STM32F103)は取り残されたままである。同サイトにはこのSTM32基板の方の開発環境の設定ガイドもあるが、殆ど同じ手順を繰り返すことになっており経験値の向上には余り役に立たない感じがした。
そこで、別の手順でオープンソースの開発を勉強することにする。雑誌のSTM32基板にはUSBからファームが書き込めるライター(Dfu)があらかじめROMに焼かれており、これを残した形で開発環境を作って行きたい。STM32用のサンプルプログラムは沢山あるが、殆どがこのライターを消してしまう。JTAGインターフェースを買ったのであまりこだわることはないのだが、書き込みの手段は複数残しておきたいからだ。
調べるうち、このあいだのDWM誌2008年6月号4章のGNUの記事のサンプルプログラムがDfuを残して動くようになっていることがわかった。UARTもついていてちょうど良い。これを手始めにSTM32のGNU開発を進めることにする。
Eclipse上ではなく、DOS画面からgnuツールのコマンドを入れていく。サンプルプログラムはWINARMのgnuツールでビルドしているが、こちらはCodeSourceryである。記事のコードを雑誌社のウェブから落とし、その改修のためMakefileを改めて詳細に見る。おや、このMakefileは相当コンパクトに出来ているのでわかりやすい。
Makefileは、昔Linuxにはまって、カーネルビルドを繰り返した頃に少し勉強したが、このすさまじい変数置換と、恐ろしいまでのネスト構造に圧倒されて完全に理解するところまでは行けなかった。AVRでは、AVRstudioに任せてMakefileをさぼっていた。そんなに沢山のモジュールで構成するわけでもない組み込みコンピューターでMakefileを使うのは大げさすぎると思ったからである。
改めて、基本から勉強し直す。先生はウェブにころがっているMakefileの入門記事である。その結果、沢山の派生機能はあるが、基本はそう複雑ではないことがわかった。暗黙的なルールというのがあるということ(単純なコンパイルではオブジェクトファイルだけの記述で良い)を、遅まきながら始めて知った。これが今までリストを見て良く理解できなかったところだった。
今度のMakefileは簡単なものだったので変更するところはすぐわかった。要するに$CCとしているコンパイラーのパスを、/usr/local/arm-tools/bin/arm-elf-gccなどから、今度のgnuツールの置いてある\gcc\arm-none-eabi-gcc.exeなどに替えるだけで良さそうである。Makefileが入っているディレクトリ内のファイルはすべてあまさずコピーして持ってくることが肝腎なようだ。ひとつのMakefileはカレントディレクトリの中で完結しているからである。
DOS画面上でmake allする。エラーもなく素直にビルドできた。JTAGはまだ動いていないので、例のDfuでUSBから基板に書き込む。うむ、うまく書き込めたようだ。これでジャンパーをオープンしてリセット(USBコードぬきさし)するとUART端末に数字がでるはずだ。PCのTera Termを立ち上げたが、つながっているはずのUSBの仮想端末が見えない。当然何も動かない。何か大きな勘違いがあるようだ。
記事を読み返す。ありゃりゃあ、プログラムのUART1というのはUSB経由の仮想UARTじゃない。別のピンに出ている普通のUARTのことだ。お馬鹿な勘違いである。基板はまだ何も実装していないので、ICピンコードでブレッドボード上のUSBシリアル変換基板と空中接続し、2本のUSBケーブルを基板とシリアル変換基板につなぐ。よーし、TeraTerm画面に何か出た。ボーレートを合わせると、動いた。動いた。LEDのON/OFFもキーボードから出来た。うむ、これで一歩また先に進んだ。
Eclipseへの持込みも、一旦新規プロジェクトを起こしてから、ファイル一式をフォルダーに放り込み、「refresh」すると、プロジェクトにすんなり入ることもわかった。快調、快調である。調子に乗って、STM32基板のマザーボードを作り、JTAGの20ピンソケットも実装する。今度はzusさんのサイトのSTM32開発環境の記事を参考に、JTAGまわりのソフトを整える。OCDを動かしてみた。問題なく動いた。少し勉強が進んだので、TelnetでOCDに入り、色々なコマンドを試す。視界をさえぎっていた霧が晴れて、段々周りが明るくなってきた感じである。
| 固定リンク
「ARM」カテゴリの記事
- 心電計プロジェクト:スケールが出ると心電計らしくなる(2015.01.08)
- 心電計プロジェクト:TFT液晶に念願の心電波形が出た(2014.12.18)
- 心電計プロジェクト:STM32F103の心電波形表示で悪戦苦闘(2014.12.03)
- 心電計プロジェクト:CooCoxでARMの表示系ソフトを開発する(2014.10.16)
- 心電計プロジェクト:表示部のARM基板の開発環境を一新する(2014.09.19)
コメント