(3)は、ソフトウェア的にはある意味一番簡単な方法である。要するに、内蔵するUSART経由でデータを出力し、この先にFT232Rあたりを取り付ければ、そのままUSBで出力ができる。勿論FT232Rを経由せずにそのままSerial出力することもできるが、最近RS232Cポートはレガシー扱いになってポートを用意していないケースも珍しくないから、だったらUSBで接続した方が便利だろう。

FT232RはArduino Duemilanoveにも搭載されている、FTDI社のUSB-UART変換チップである。このチップの便利なところは、PC側に同社が提供するVCP Driverを入れておきさえすれば、PCからは単にシリアルポートとして扱うことができ、MCUからは単にUARTへの送受信を行うだけで済むことだ。要するにUART/USBの変換をプログラム側で一切かかわる必要がないのが大きなメリットである。

接続する場合の回路図はこんな感じ(Photo01)で、抵抗が1本とコンデンサが4つ、それに一応ノイズ対策用のフェライトビーズが一つといったところで、回路そのものはそれほど難解ではない。ただFT232Rのパッケージは28pinのSSOP(Shrink Small Outline Package)かQFN(Quad Flatpack No-Lead)32なので、ちょっと半田付けが面倒である。幸いに、例えば秋月電子通商のK-01977とかsparkfunのFTDI Basic Breakout - 3.3V(国内だとスイッチサイエンスが「FT232RL搭載小型USB-シリアルアダプタ 3.3V」として販売中)、サンハヤトのMM-FT232など、既に基板にFT232RとUSBコネクタ、必要なコンデンサ類を実装してあり、あとはUART/USARTのピンに繋ぐだけでそのまま使える変換キットが販売されている。これらを入手して利用するのは、半田付けに自信の無いユーザーには有り難いだろう(かくいう筆者も、これをユニバーサル基板の上に半田付けするのは、出来なくはないが余りやりたくはない)。

Photo01: これはFT232RのデータシートのFigure 7.4 USB to MCU UART Interfaceよりの抜粋

(4)は全然異なる話である。今回はIAR Workbench+STLinkという組み合わせで開発とデバッグを行おうとしているが、完全に無償の開発環境であるGCC+OpenOCDという組み合わせがある。こちらは要するにGNUのARM向けのツールチェーンを使ってアプリケーションを開発するわけだが、デバッガであるgdbからJTAG経由でのデバッグを可能にするというものである。

ここでちょっと脱線するがJTAG(Joint Test Action Group)というのは本来、バウンダリスキャンなどICのテストを行うためのI/Fであった。今度はバウンダリスキャンってなんだ? という質問になりそうだが、幸い安藤先生がタイムリーなコラムを書かれている。スキャンの定義はコラムにある通りだが、こちらはICの内部の話である。バウンダリスキャンは、ICとICの間の基板上の配線をテストするための機能と考えてもらえれば良い。

話を戻すと、そんなわけでJTAGは本来はテスト用機能なのだが、デバッグにも使えるということでこのJTAGポートを経由してファームウェアを書き込んだり、CPUやレジスタの状態を監視したり、必要なら実行を中断したり、レジスタ/メモリの値を書き換えたりといった形で用途が広がっている。ST-Linkもこの一つであって、分類的にはARMのSWD(Single Wire Debug)という技術に準拠したものである。JTAGは配線がちょっと多いので、安価なMCUのデバッグにはコスト的に不利だということで、1本の信号線でこれを代用できるように工夫したのがSWDである。

ということで話を元に戻すと、OpenOCDを使う場合、ST-LinkではなくOpenOCDに対応したJTAGプローブを使う形でファームウェアのダウンロードやデバッガを利用する事になる。そうなると、ST-Link用にSTM32F4-Discovery上に搭載されているSTM32F1がまるまる余る事になる。これを使ってVCPを構成しよう、という話である。

ただ今回はgcc+OpenOCD環境での開発ではないので、これはあくまで可能性レベルであって、この選択は行わない事にした。

(続く)