抜き差しを繰り返せば甘くなることは考えられる。恒久的に使うものではないので、そう心配しないで良いだろう。レイアウトは考えていてもきりがないのであとにすることにして、次のソフトウエア開発環境の導入を進めることにした。ファームの書き込みは前と同じシリアル経由か、JTAGか。ARMの開発環境を整理してみる(9/12/2014)ARM系は気圧計以来すっかりご無沙汰で、開発環境が大きく変わっている。たくさんのハードやインターフェースが登場し、何が何やらさっぱりわからない。いちから勉強しなおすことにする。紙にでも書いて全体を整理しないと、とても理解できそうにない。それでも、ウェブ情報を読み進めるうちに、だいぶ事情がわかってきた。Adapter)といわれる、新しく加わったハードの開発環境で、JTAGそのものは変わっていないようだ。STマイクロには、STLink(/V2)というハードがある。例の激安のDiscovery評価基板に、必ずついているやつだ。汎用のCPUがついていて、USBを経由してターゲットCPUのファームを焼くプログラムが内蔵されている。Debug)などを使う。NXPのLPCシリーズにも同じようなハードが用意されている。LPCLinkと称している。mbedは最初は独自のインターフェースだったが、その後このLPCLinkでも扱えるようになったようだ。したハードのデバッガー(プログラマー)とターゲットとのインターフェース規格も、昔はJTAG一本だけだったのが、SWDとかDFU、CMSIS-DAPなどの新顔が登場し、話がややこしくなっている。した商用ツールと、新しいインターフェース規格が次々に市場に投入されているところへ、GNUなどのオープンソース勢がからんで互換品を出したりして、話が余計わからなくなっているようだ。いずれにしろ、JTAGそのものがなくなったわけではないことは確認した。以前ARMで、お世話になった「ねむい」さんが活躍されている。ウェブの情報収集では必ず彼(彼女?)の名前が出てくる。ねむいさんのサイトが一番詳しくて親切だ。してその理由がわかってきた。要するにGNU環境で(無料で)、無制限にソフトを開発できる環境を作ろうと考えると、日本語で検索する限り、必然的にここに行き着くのだ。ねむいさん自身がオープンソースのデバッガーの開発にコミットしておられるようで、情報が早い。今度の生基板は旧来の20ピンのJTAGインターフェースがついている。JTAGのためにチップ抵抗を10ケ近くもハンダ付けした。これを利用しないとこの手間は無駄になる。OCDで問題ないはずだ。OCDのバージョンが大幅に上がっているので、その対応をしなければならない。ねむいさん謹製のバイナリをしっかり頂戴する。OCDのインストールはしたがCooCoxへ浮気する(9/14/2014)万が一JTAGが動かなくてもこれまで愛用していたROMモニターによるシリアルの書き込み環境がなくなったという情報はどこにもないので、あのMCUISPやFlashMagicでも書き込めるはずだ。ファームの書き込み手段についての不安はもうなくなった。開発環境のもうひとつの大きな要素、ソースコードなどの処理環境である。ARMではEclipseを使おうと思っているのだが、頼りのねむいさんが、蛇蝎(だかつ)のようにEclipseを嫌っているので、ねむいさんのインストールガイドのまま行くとEclipseを使わない環境になってしまう。自分だってEclipseにこだわっているわけではない。OCDのプラグインは殆ど使わなかった。階層化しているソースコードを検索する強力な機能がついているので、何度か助かった記憶がある。OCDのインストールである。OCDは問題なく入ったが、Win7のPCが、OlimexのJTAGドングル(ARM-USB-TINY)を認めない。ドライバーのアイコンに!がついたままになる。あわてて、ウェブを探し回る。みなさん苦労しているようで、すぐ対応策は見つかった。これで、ディバイスマネージャーのアイコンにちゃんとOlimexのサインが出た。OCDのテストである。DOS画面でコマンドを入れる。cfgファイルがないと怒られる。ここからは、次の環境を意識しないと設定ができない。ねむいさんのガイドではinsightなどGNU系のデバッガーソフトのインストールが待っている。エディターを別に用意しなければならない。うーむ、もう少し楽な方法はないか。ねむいさんのガイドをもういちど読み直す。すると、「初学者向け」の開発環境としてCooCoxを勧めているところを見つけた。Eclipse風なのだという。SWD双方サポートフラッシュ制限なしもちろん無料となかなか良さそうである。こちらの要件にも合っている。「初学者向け」というのに少し抵抗を感じたけれど、なに、初学者に違いないのだから何もこだわることはない。無償なのはありがたい。CooCox公式ガイドによれば、本体を入れる前にまずgccコンパイラー一式を落とせということである。CooCox指定のgccは、ねむいさんの勧めるgccツールチェーンと同一だった。おお、これは幸先が良さそうだ。ツールチェーンは問題なくダウンロードできて展開もスムーズに終了した。本体のCoIDEのダウンロードを始める。これがサーバーがやたら遅い。サイズは450MB少々なのだが、スピードが100KB/secいかない。全部落とすのに一時間以上かかった。CooCoxでデバッガー環境が出来てしまった(9/16/2014)ダウンロードは時間がかかったが、インストールは早かった。立ち上がりはEclipse並に遅い。似たような画面があらわれた。手さぐりで動かしてみる。ダミーのプロジェクトを立ち上げ、Configuration画面でデバッガーを設定する。OlimexOpenOCDを選ぶ。マニュアルは殆ど見ないでも先に進める。Device画面で、STをクリックするとSTM3210x系のチップがずらりと並び、そこからSTM32F103VBに行き着く。残念ながら富士通のFM3は載っていなかったが、SpansionというメーカーのMB9BF36..,というチップが気になる。ググってみたらピンポンだった。Spansionが富士通セミコンダクターを買収したらしい。雑誌付録のMB9BF618Tはラインナップされていない。したら使えるかもしれない。それはともかく先に進もう。Debug画面に戻って、フラッシュ書き込みを指示する。おやあ、エラーメッセージを吐いて動かない。赤文字でUSBの接続が出来ていないというメッセージだ。PC上では認めているのにどうした。ARM-USB-TINY」のキーワードで探す。今度も一発で対応策がでてきた。Olimex本体のサイトのページである。英語だけど読みやすい(外国人の英語だからか)。なになに、なんだと、PCの設定は全部未定義に戻せとある。言われるままに、ディバイスマネージャーでドライバーを全部削除する。未定義の!のついたアイコンに戻った。CooCoxのDebug画面に戻り、ファームの書き込みを選ぶ。OCDのラッパー)が動き、あっけなく、JTAG環境が動いてしまったのである。メッセージによれば、しっかりファームを書き込んでいる。main()のループのなかに矢印がでて止まっている。レジスターの値もそれらしい値だ。OCDでさまよっていた部分は全てすっ飛ばして、いきなりフラッシュを書いてGDB状態になっている。今までの苦労は一体何だったのかと思うほどの拍子抜けである。「初学者向け」の環境である。OpenOCDらしい沢山の経過メッセージが目にも止まらない速さでconsole画面を流れるが、コマンド入力などは一切受け付けず、全く触(さわ)ることは出来ない。いずれにしてもデバッグ環境だけでなく、スタートアップルーチンから、各ペリフェラルのディレクトリチェーンまで今までとは全く異なってしまった。すべてCooCox任せである。これまでのプログラムは全部このあたりが書き直しになる。これも少し困ったものだ。道は遠い(9/17/2014)テストしたプログラムは何もしないループするだけのダミープログラムなので本当にプログラムを書き込んだのかどうかを確認することにした。OlimexのCooCoxガイドにあるLED点滅のプログラムをsampleフォルダーから引き出し、実際に動くかどうかのテストをしてみた。今度はComponent画面である。ここのComponentの意味は、ペリフェラルライブラリ―のGPIOやRTC、ADC、USART、SPI、DMAなどの要素の意味である。ここで必要なペリフェラルを選ぶと、CooCoxが依存する他のコンポーネントも自動的にディレクトリごと読み込んでくれる。このあたりがミソだろう。coreを選ぶ(これは指定しなくても自動的に入っていた)。Lチカのsampleソースも選ぶと、gpioピンをトグルするソースが入る。そのソースコードのピンを現在のAitendo基板のピンに揃える。ビルドし、デバッグに入る。何と、これで簡単に動いた。赤と緑のLEDが賑やかに点滅する。やれやれ、何もしないでARMプログラムが動いてしまった。あっというまに、CooCoxでプログラム開発が出来た。ソースコードをなめ回し、ライブラリーを探し回り、ウェブで情報を求め、何度も門前払いを喰らいながら、やっとのことで動かしたことを考えれば、実にあっけない結果である。こちらはARMの開発を既に少しやっていたのでCooCoxのしたことが大体わかるが、初めての人が言われるままにサンプルソースからLチカを動かせたとしても、中身を理解することはこれではほとんど不可能だろう。Arduinoあたりはこれに徹しているので(情報の隠蔽化)、それはそれで良いのだが、ARMの直接の開発で、この方法が先まで全部通用するとは思えない。英語のマニュアルには、良く「今からやることを理解できてない人は、やってはいけない」という言い回しがあるが、こういう開発法は、これに反しているし、理解しないまま先に進んでも、いずれ挫折することになる。目隠しされて歩かされるようなもので、所長のもっとも嫌うところなのだが、これだけ簡単にLチカが出来てしまうと、何ともはや、こちらを行くしかなくなってきた。OpenOCDのあの豊富なコマンドとメッセージに未練があるのだけれど、ここから出発するしかないか。PlayerシールドRaspberryPiの話の前に、報告しておかねばならないことをひとつ。すんさんの掲示板にも書いたが、とんすけさんのMotionPlayerシールドのことである。トラブルがあったのだが、とんすけさんの手助けで簡単に解決したので、ここでお礼を兼ねてご紹介する。すけさんには大変お世話になった。この場を借りてあらためて御礼を申し上げておきたい。このMotionPlayerシールドとは、STM32F4-DiscoveryをベースにSDカードに入った音楽ファイルや動画ファイルの再生を液晶のタッチパネルで操作するプレーヤー基板のことで、ファームウエアが提供されており、ピンヘッダーをハンダ付けするだけで動作する。これを知った、そもそものきっかけは、例によってshuji009さんが、すんさんの掲示板で絶賛紹介されたことからであるが、とんすけさんそのものは2年ほど前、やはりshuji009さんの紹介で、STM32F103の外部メモリインターフェースFSMCを使ってLCDをドライブし、60fpsの動画を成功させた人として記憶に残っている。凄い人だなあと感心していたが、驚いたことに、この道のプロではなくアマチュアの方だそうである。それはともかく、所長は、何度も言うように、「格安」とか「破格の値段」というのに弱い。秋月で多種類に亘って売り出されているCPU基板、STM32(8もあるが)Discoveryシリーズは販売促進という狙いで何しろみんな思い切った価格設定である。用もないのについ手が出てしまう。MotionPlayerのCPU基板STM32F4-Discoveryは秋月で発売後すぐ売り切れになり、直前に手に入れて、ひとりほくそえんでいたのだが(悪い性格だ)、間もなく潤沢に出回り始めて、そのうち興味も薄れ、現物はパッケージから出すこともなく部品庫に眠っていた。ひとつの必要なパーツ、Aitendoの3.2インチTFT液晶は以前、直営店の店頭で見つけて、あてもないのに買い込み、これも部品庫のこやしになっていた。