« 2014年8月24日 - 2014年8月30日 | トップページ | 2014年10月12日 - 2014年10月18日 »

2014年9月14日 - 2014年9月20日の1件の記事

2014年9月19日 (金)

心電計プロジェクト:表示部のARM基板の開発環境を一新する

 心電計プロジェクトは迷走を続けている。心電波形をオシロで確認してから、もう2か月近くたつが、次のステップの波形の画面表示は、道草(無関係なAVRのUARTのデバッグ)ばかり食って、一向に進まない。

 そのせいなのか、このブログのアクセス回数がこのところ減ってきたように思う。商売にしているわけではない、別に何の問題もないのだが、気分的にはあまり良くない。ということもあって、少し発破をかけてプロジェクトを進めることにした。

 これまで、オペアンプで増幅した心電波をディジタルフィルター(AVR)にかけてノイズを除去しI2CのDAコンバーターでアナログに戻して波形をオシロで見たが、実はこれは波形を確認するための寄り道で(ステップ3)、本来はフォトカプラーのUART経由でARMに送り、2.4インチTFT液晶画面に表示をするのが最終目的である。これで初めてスタンドアロンの心電計が出来上がる。

 久しぶりのARMである。プラットホームはSTM32F103という今や時代遅れのチップだが、心電計のグラフを表示するくらいなら問題ないはずだ。在庫整理にもなる。

Aitendoの生基板で2つめのARM基板を作る(9/5/2014)
 ARMの基板は以前作ったグラフィック気圧計のときと同じ、AitendoのSTM32F103用の生基板(¥450 [PCB-STM32F103V])を使う。必要な部品は、大分前から少しづつ揃えてきている。 前に同じものを作っているので特に迷うところはない。雑誌付録(CQ-STARM)の基板からはずしたCPUチップは既にハンダ付け済みだ。201409140001

 RTC(Real Time Clock)は今回のプロジェクトでは使わないが、基板にはパッドが用意されている。せっかくなので時計用の32.768khzクリスタルを秋月で買った。これが何と¥100で4つも入っている。しかもえらく小さい。世の中の進歩はこんなところにもあるのだと感心する。

 チップ抵抗やコンデンサーは、これまでジャンク基板から昆虫採集のように集めてきたものが沢山ある。それでもさすがに足らないものが出てきて、千石電商の地下で買い足した。ここはすごい。1608と2012の大抵のチップ部品が揃っている。リールを短く切ったものが10ケ¥50で手に入る。 目に優しい2012で揃える。

 表面実装部品のハンダ付けは楽しい。どんどんはかどる。プリント基板なので誤配線の心配もない。あっというまに20ケ以上の部品が実装され、コネクターも揃った。さて、いよいよ残るはソフトである。PCが新しくなっているので、まずは開発環境を一から作り直さなければいけない。Eclipseを入れるかどうか迷っている。

日本のテニス界がすごいことになっている(9/9/2014)
 電子工作以外で最近感動したことをひとつ。想像もしていなかったことがニュースになっている。テニスの錦織圭選手の全米オープンテニス大会決勝進出である。10代の初め頃から逸材といわれ、いずれはグランドスラム(4大大会のこと)で活躍すると言われてはいたが、怪我に悩まされて、いつも今一歩のところで涙を呑んでいた。

 それが、今年になって人が替わったように突然勝ち始め、あれよあれよという間にランキングを上げて、遂にこれまで日本人の誰もが到達できなかったところまで勝ち進んでしまった。それも世界ランク1位のフェデラー相手に互角以上の試合をしての決勝進出である。そうなるかも知れないとは思っていても、いざ本当になると改めて感動する。

 野球ファンには申し訳ないけれど、イチローや松井がどれだけ活躍してもWorldwideということではテニスとは比較にならない。何十年も前、ホンダがF1レースで優勝した時も、世界に与えた衝撃は大きかったのだが、日本ではそれほど騒がなかった。今度のこともこれに近いかもしれない。

 それにしても今までにない快挙である。日本の評価を上げたということでは国民栄誉賞を2個や3個あげても良いくらいだ。今回は優勝を逃したが、まあ、まだ24才だ。あまり早く頂点に登りつめないで落ち着いてやるほうが長持ちするのではないか。

 新聞記事の中では、今、世界的に通用する日本人アスリートがすべてゆとり時代に少年少女時代を送ったという指摘が面白かった。確かにそうかもしれない。彼らの日本人離れした度胸や自信は、これまでの日本人と一味違うような気もする。

レイアウトが難しいので、スルーホール用ジャンパーセットを買う(9/11/2014)
 それはともかく意気込んで工作を始めたのだが、レイアウトが難しい。普通にやると、TFT液晶基板、CPU基板、それをつなぐメイン基板の3枚になってしまう。これを避けたいのだが、なかなかうまいアイデアが浮かんでこない。

 さらに、時間軸、波形高の調整をロータリーエンコーダーで格好よくやろうと考えているのだが、このレイアウトも決まらない。接続は当面、フォトカプラーを使った有線にしようと考えているが、無線のXbeeにしたい気持ちもある。201409140002

 そんなこんなでなかなか具体的に進まない。CPU基板はすべて配線を終えたのだが、何となく怖くて通電できない。全体の構成が決まらないので、ハードの工作はこれ以上進めない。I/Oピンをソケットにするか、ピンヘッダーにするのかでも迷う。

 ちょうどそのころウェブで、基板のスルーホールに差して使えるジャンパーが売られていることを知った。これならまだ基板の構成が未定でも安心してテストが出来る。ストロベリーリナックスのジャンパーは、何故か目茶目茶高い(10本で¥4720)のだが、さらに検索してみると他にもあった。

 この、サンハヤトのものが安い(TTW-200 10本で¥738)。サンハヤトにしては珍しくリーズナブルな価格だ。アマゾンでも売っている。ここなら送料もかからない。迷わず2袋を注文した。ほどなく届いた。早速試してみる。201409140003

 ちょっと固いが良さそうだ。ただ、抜き差しを繰り返せば甘くなることは考えられる。しかし恒久的に使うものではないので、そう心配しないで良いだろう。レイアウトは考えていてもきりがないのであとにすることにして、次のソフトウエア開発環境の導入を進めることにした。ファームの書き込みは前と同じシリアル経由か、JTAGか。

ARMの開発環境を整理してみる(9/12/2014)  
 ARM系は気圧計以来すっかりご無沙汰で、開発環境が大きく変わっている。たくさんのハードやインターフェースが登場し、何が何やらさっぱりわからない。いちから勉強しなおすことにする。紙にでも書いて全体を整理しないと、とても理解できそうにない。

 それでも、ウェブ情報を読み進めるうちに、だいぶ事情がわかってきた。開発環境が激変したのは、JTAGまわりではなく、HLA(High Layer Adapter)といわれる、新しく加わったハードの開発環境で、JTAGそのものは変わっていないようだ。

 STマイクロには、STLink(/V2)というハードがある。例の激安のDiscovery評価基板に、必ずついているやつだ。汎用のCPUがついていて、USBを経由してターゲットCPUのファームを焼くプログラムが内蔵されている。ターゲットとのインターフェースはJTAGではなくて、新しい規格のSWD(Serial Wire Debug)などを使う。

 NXPのLPCシリーズにも同じようなハードが用意されている。LPCLinkと称している。mbedは最初は独自のインターフェースだったが、その後このLPCLinkでも扱えるようになったようだ。こうしたハードのデバッガー(プログラマー)とターゲットとのインターフェース規格も、昔はJTAG一本だけだったのが、SWDとかDFU、CMSIS-DAPなどの新顔が登場し、話がややこしくなっている。

 こうした商用ツールと、新しいインターフェース規格が次々に市場に投入されているところへ、GNUなどのオープンソース勢がからんで互換品を出したりして、話が余計わからなくなっているようだ。いずれにしろ、JTAGそのものがなくなったわけではないことは確認した。

 以前ARMで、お世話になった「ねむい」さんが活躍されている。ウェブの情報収集では必ず彼(彼女?)の名前が出てくる。しかも、ねむいさんのサイトが一番詳しくて親切だ。暫くしてその理由がわかってきた。

 要するにGNU環境で(無料で)、無制限にソフトを開発できる環境を作ろうと考えると、日本語で検索する限り、必然的にここに行き着くのだ。ねむいさん自身がオープンソースのデバッガーの開発にコミットしておられるようで、情報が早い。

 今度の生基板は旧来の20ピンのJTAGインターフェースがついている。JTAGのためにチップ抵抗を10ケ近くもハンダ付けした。これを利用しないとこの手間は無駄になる。これまでのOlimexのJTAGドングル(ARM-USB-TINY FT2232系)とOpen OCDで問題ないはずだ。

 ただ、Open OCDのバージョンが大幅に上がっているので、その対応をしなければならない。ねむいさん謹製のバイナリをしっかり頂戴する。

Open OCDのインストールはしたがCooCoxへ浮気する(9/14/2014)
 万が一JTAGが動かなくてもこれまで愛用していたROMモニターによるシリアルの書き込み環境がなくなったという情報はどこにもないので、あのMCUISPやFlashMagicでも書き込めるはずだ。ファームの書き込み手段についての不安はもうなくなった。

 開発環境のもうひとつの大きな要素、ソースコードなどの処理環境である。ARMではEclipseを使おうと思っているのだが、頼りのねむいさんが、蛇蝎(だかつ)のようにEclipseを嫌っているので、ねむいさんのインストールガイドのまま行くとEclipseを使わない環境になってしまう。

 自分だってEclipseにこだわっているわけではない。あれば便利というだけで、当初苦労してスクリプトを入れたOpen OCDのプラグインは殆ど使わなかった。ただ、階層化しているソースコードを検索する強力な機能がついているので、何度か助かった記憶がある。入るのなら入れたい。

 それはともかく、バージョンの上がったOpen OCDのインストールである。Open OCDは問題なく入ったが、Win7のPCが、OlimexのJTAGドングル(ARM-USB-TINY)を認めない。ドライバーのアイコンに!がついたままになる。

 あわてて、ウェブを探し回る。みなさん苦労しているようで、すぐ対応策は見つかった。 これで、ディバイスマネージャーのアイコンにちゃんとOlimexのサインが出た。

 いよいよ、Open OCDのテストである。DOS画面でコマンドを入れる。動いた。しかし、cfgファイルがないと怒られる。ここからは、次の環境を意識しないと設定ができない。ねむいさんのガイドではinsightなどGNU系のデバッガーソフトのインストールが待っている。さらにエディターを別に用意しなければならない。

 うーむ、もう少し楽な方法はないか。ねむいさんのガイドをもういちど読み直す。すると、「初学者向け」の開発環境としてCooCoxを勧めているところを見つけた。Eclipse風なのだという。ちょっとサイトを覗いてみる。すると、

  • Eclipseをベースにした統合開発環境
  • ARM系全体で使える
  • JTAG SWD双方サポート
  • フラッシュ制限なし
  • もちろん無料

となかなか良さそうである。こちらの要件にも合っている。

 「初学者向け」というのに少し抵抗を感じたけれど、なに、初学者に違いないのだから何もこだわることはない。無償なのはありがたい。入れてみることにす る。CooCox公式ガイドによれば、本体を入れる前にまずgccコンパイラー一式を落とせということである。素直に従う。Ws000000

 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上では認めているのにどうした。初手からつまづいた。

 定石通り、ウェブに、「CooCox Olimex ARM-USB-TINY」のキーワードで探す。今度も一発で対応策がでてきた。Olimex本体のサイトのページである。 英語だけど読みやすい(外国人の英語だからか)。なになに、なんだと、PCの設定は全部未定義に戻せとある。  言われるままに、ディバイスマネージャーでドライバーを全部削除する。未定義の!のついたアイコンに戻った。

 CooCoxのDebug画面に戻り、ファームの書き込みを選ぶ。なんと、沢山のメッセージを出しながらCoFlash(恐らくOpen OCDのラッパー)が動き、あっけなく、JTAG環境が動いてしまったのである。

 メッセージによれば、しっかりファームを書き込んでいる。NO ERRORだ。何もしないプログラムだが、int  main()のループのなかに矢印がでて止まっている。レジスターの値もそれらしい値だ。Open OCDでさまよっていた部分は全てすっ飛ばして、いきなりフラッシュを書いてGDB状態になっている。今までの苦労は一体何だったのかと思うほどの拍子抜けである。 Ws000001

 しかし、まさしく「初学者向け」の環境である。OpenOCDらしい沢山の経過メッセージが目にも止まらない速さでconsole画面を流れるが、コマンド入力などは一切受け付けず、全く触(さわ)ることは出来ない。

 いずれにしてもデバッグ環境だけでなく、スタートアップルーチンから、各ペリフェラルのディレクトリチェーンまで今までとは全く異なってしまった。すべてCooCox任せである。これまでのプログラムは全部このあたりが書き直しになる。これも少し困ったものだ。

Lチカまで成功。しかし道は遠い(9/17/2014)
 テストしたプログラムは何もしないループするだけのダミープログラムなので本当にプログラムを書き込んだのかどうかを確認することにした。OlimexのCooCoxガイドにあるLED点滅のプログラムをsampleフォルダーから引き出し、実際に動くかどうかのテストをしてみた。

 今度はComponent画面である。ここのComponentの意味は、ペリフェラルライブラリ―のGPIOやRTC、ADC、USART、SPI、DMAなどの要素の意味である。ここで必要なペリフェラルを選ぶと、CooCoxが依存する他のコンポーネントも自動的にディレクトリごと読み込んでくれる。このあたりがミソだろう。

 Lチカなので、クロック関係のrccと、I/Oポートのgpio、それにスタートアップのCMSIS coreを選ぶ(これは指定しなくても自動的に入っていた)。Lチカのsampleソースも選ぶと、gpioピンをトグルするソースが入る。そのソースコードのピンを現在のAitendo基板のピンに揃える。それだけである。ビルドし、デバッグに入る。

 何と、これで簡単に動いた。赤と緑のLEDが賑やかに点滅する。やれやれ、何もしないでARMプログラムが動いてしまった。難しい話は何もない。 あっというまに、CooCoxでプログラム開発が出来た。ソースコードをなめ回し、ライブラリーを探し回り、ウェブで情報を求め、何度も門前払いを喰らいながら、やっとのことで動かしたことを考えれば、実にあっけない結果である。201409190004

 しかし、こちらはARMの開発を既に少しやっていたのでCooCoxのしたことが大体わかるが、初めての人が言われるままにサンプルソースからLチカを動かせたとしても、中身を理解することはこれではほとんど不可能だろう。

 Arduinoあたりはこれに徹しているので(情報の隠蔽化)、それはそれで良いのだが、ARMの直接の開発で、この方法が先まで全部通用するとは思えない。英語のマニュアルには、良く「今からやることを理解できてない人は、やってはいけない」という言い回しがあるが、こういう開発法は、これに反しているし、理解しないまま先に進んでも、いずれ挫折することになる。

 ちょうど目隠しされて歩かされるようなもので、所長のもっとも嫌うところなのだが、これだけ簡単にLチカが出来てしまうと、何ともはや、こちらを行くしかなくなってきた。OpenOCDのあの豊富なコマンドとメッセージに未練があるのだけれど、ここから出発するしかないか。

| | コメント (0) | トラックバック (0)

« 2014年8月24日 - 2014年8月30日 | トップページ | 2014年10月12日 - 2014年10月18日 »