(日々の記録)デジタルオシロを買った。(日)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を買うにしても今はそう高くない。Cを注文しそうになる(4/22/09)以前の記事(2/26)にも書いたハイエンドのCPUボードの新版がもう市場に出ていることを知った。ARMの情報収集をしていて迷い込んだ2ちゃんねるのサイトに出ていた。アンテナを立てていたのだが、なかなか普通のサイトでは出てこない。時々はこのサイトもチェックしておく必要があるようだ。日本円では¥17000ばかりで手に入る。日本ではDigiKeyのサイトから買え、すでに買った人のレポートまである。このボード何しろLinuxが軽々動きXwindowまで動くグラフィック機能を内蔵している。老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はカレントディレクトリの中で完結しているからである。エラーもなく素直にビルドできた。JTAGはまだ動いていないので、例のDfuでUSBから基板に書き込む。うむ、うまく書き込めたようだ。これでジャンパーをオープンしてリセット(USBコードぬきさし)するとUART端末に数字がでるはずだ。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に入り、色々なコマンドを試す。視界をさえぎっていた霧が晴れて、段々周りが明るくなってきた感じである。心電計プロジェクト:スケールが出ると心電計らしくなる(2015.01.08)心電計プロジェクト:TFT液晶に念願の心電波形が出た(2014.12.18)心電計プロジェクト:STM32F103の心電波形表示で悪戦苦闘(2014.12.03)心電計プロジェクト:CooCoxでARMの表示系ソフトを開発する(2014.10.16)心電計プロジェクト:表示部のARM基板の開発環境を一新する(2014.09.19)コメントコメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。他の本には載っていない、痒いところに手が届く本。STM32基板のUSB仮想COMポートがGNUで動いた。