2014年04月27日 | 公開。 |
2014年05月26日 | 一部改変。 |
mbed祭り2014 @春の大阪というイベントに参加して、mbedの使い方を少し勉強してきました。
mbedといえば、Arduinoと同じく、すばやくプロトタイピングできるマイコンボードで、Arduinoより高性能のマイコンを搭載しているため、以前から少し興味がありました。しかし、最近はmbedのマイコンボードの種類がとても多い事もあり、どのマイコンボードを買って勉強を始めたらいいのか分かりにくいなど、少し取っ付きにくい印象もありました。
mbed祭りで話を聞いて、少し頭の整理ができてきた事もあり、mbedを始めてみる事にしました。いわゆる青mbed(mbed NXP LPC1768)を買ってmbedの世界に入門するのが普通らしいのですが、このボードは高い事もあり、また、私が興味があるのは低コストの回路である事から、mbed LPC1114FN28から始める事にしました。
mbed LPC1114FN28とは、低価格かつDIP品のNXP社製マイコン、LPC1114FN28/102を用いたmbedのボードです。DIP品のマイコンをソケット経由で実装しているため、プログラムの開発が終わり、マイコンをソケットから外せば、そのままターゲットボードに組み込める(つまりマイコンのライタとして使える)のが特徴です。LPC1114FN28/102は秋月電子で110円(2014年4月現在の価格)で買える低価格マイコンで、しかも32ビットコアのCPUを積んでおり、RAMやタイマのチャンネルがATmega328Pよりも多いなど、非常にお買い得感のあるマイコンです。
スイッチサイエンスでmbed LPC1114FN28のボードを買っていたらmbedの入門の敷居が低かったのですが、たまたまLPC1114F28/102のマイコンチップを、以前マルツの店頭で衝動買いしていた事もあり、マイコンチップにUSBシリアル変換器をライタとして取り付け、プログラムを書き込む事にしました。
mbedの開発環境を使ってLPC1114FN28/102のプログラムを作り、それをマイコンチップに書き込む方法は、Yoshihiro TSUBOIさんのmbed LPC1114での遊び方という、すばらしくまとまったページに書いてありますので、そちらを参照していただければ結構なのですが、私は一部違う方法でやったので、紹介します。
mbedの開発環境は、オンラインで提供されています。コンパイラもwebブラウザ内で動く、オンラインコンパイラです。コンパイルが終わると実行コードが拡張子.binのファイルとして、ローカルのパソコンにダウンロードされる仕組みになっています。
mbed LPC1114FN28のボードにはプログラムの書き込み回路が内蔵されています。ボードをUSBに繋いだときにパソコンから認識されるドライブに、ダウンロードした.binファイルをコピーすれば、プログラムが自動的にマイコンに書き込まれるというお手軽仕様になっています。
しかしながら、今回はLPC1114FN28/102のマイコンチップを裸で使うため、プログラムの書き込み手段を自分で用意する必要があります。
実はLPC1114FN28/102というマイコンは、UART(シリアルインターフェース)経由でプログラムを書き込めるブートローダが、出荷時にROMに書かれており、それを使えば、USBシリアル変換器を用いて、比較的簡単にプログラムが書き込めます。自力でブートローダを書き込む必要のあるATmega328Pよりも、この点で便利です。
今回は、手元にあった秋月電気のFT232RL USBシリアル変換モジュールを使って、プログラムを書き込むことにしました。
FT232RL USBシリアル変換モジュールにはJ1とJ2の2つのジャンパがあります。J1はI/O電圧の切り替え(5V/3.3V)のためのジャンパです。今回は3.3V動作のマイコンにプログラムをするので、1-2ピン間をショートして、3.3Vインターフェースに設定します。またJ2は、USBコネクタから電力供給を受けるか、外部電源を用意するかの選択を行います。マイコンにプログラムを書き込んでLチカ(LEDの点滅)を行う程度なら、バスパワーで動作しますので、J2にソケットを差し込んで、USBからの電源でマイコンを動作させる事にします。
LPC1114FN28/102(マイコン)とFT232RL USBシリアル変換モジュール(USBシリアル変換器)の結線は、次の表の様に行います。また、この表以外にも、Lチカ用の抵抗とLEDを15番ピンとGNDの間に接続しました。
マイコン側 | USBシリアル変換器側 |
---|---|
21番ピン(3.3v IN)、7番ピン(Analog 3.3v In) | 19番ピン(3V3) |
22番ピン(0V)、8番ピン(Analog 0V) | 24番ピン(GND) |
15番ピン(rx) | 1番ピン(TXD) |
16番ピン(tx) | 5番ピン(RXD) |
23番ピン(nR) | 2番ピン(DTR#) |
24番ピン(dp24) | 3番ピン(RTS#) |
実は下の写真は、マイコンのフラッシュメモリにプログラムを焼いた後の写真なので、LEDが点滅を始めていますが、プログラム書き込み前は、LEDは薄暗く光っています。(内蔵プルアップ抵抗がデフォルトで有効になっているのか?)
マイコン側の23番ピンと24番ピンに、USBシリアル変換器側のそれぞれ2番ピンと3番ピンをつなぐのがミソです。こうする事によって、プログラムの書き込み時に、mbed LPC1114での遊び方の説明の様に、ブートローダを起動するためにリセットスイッチを押したり、抵抗をブレッドボードに付けたり外したりする必要がなくなります。
プログラムの書き込みソフトは、Flash Magicという無料のソフトを使うのですが、困った事に拡張子が.binのファイルを読んでくれません。.hexファイルに変換する必要があります。mbed LPC1114での遊び方には、HEXファイルツールというソフトで変換するように紹介されていますが、少し思うところがあり、.binから.hexの変換のソフトを自力で作りました。Windows専用のソフトで、32ビットWindows 7で動作を確認していますが、おそらくWindows 8や64ビット版Windows 7/8でも動作すると思います。
LPC1114FN28/102のソフト開発をmbedで行うのに特化したソフトを作ったので、変換ボタンをクリックして、.binファイルを選択するだけというお手軽さです。(他にまったく設定するところがありません) このソフトは、下記のリンクからダウンロードできます。Borland C++ Builder 5のソースファイルも付いています。
ファイル形式の変換を行うと、拡張子が.hexになったファイルが出来上がります。
これをFlash Magicでマイコンに書き込みます。
Step 1ではマイコンの種類をLPC1114/102とし、COM Portはご自分の環境でのUSBシリアル変換器のCOM番号に設定し、InterfaceはNone(ISP)に設定し、Oscillatorは12MHzに設定します。
また、Step 2ではErase blocks used by Hex Fileにチェックします。
Step 3では書き込みたい.hexファイルをBrowse...ボタンを使って選んでください。
Step 4では、Verify after programmingにチェックを入れておけば、安心でしょう。
Options→Advanced OptionsメニューのHardware Configタブでは、Use DTR and RTS to control RST and ISP pinにチェックしてください。この設定により、マイコンの23番ピンと24番ピンの操作をFlash Magicが自動的に行い、フラッシュメモリを書き込む前にISPモードに自動で切り替え、書き込みが終わったら、プログラムを自動実行するようになります。(リセットスイッチの操作や抵抗の抜き差しが不要になります)
メイン画面のStep 5のStartボタンをクリックすると、プログラムがフラッシュメモリに書き込まれ、その後、自動的にプログラムが実行されます。
以上で、プログラムの書き込みと、Lチカの実行ができました。マイコンの15・16・23・24番ピンを使うプロジェクトでは、いったんこれらのピンに繋がったUSBシリアル変換器の配線を取り除いてプログラムを実行する必要があるのですが、これらのピンを使わない、少数ピンのプロジェクトなら、配線をつなぎっぱなしでデバッグをやっても結構です。
ブレッドボードでたくさんのマイコンを差し替えて、プログラムの書き込みを行うと、ブレッドボードが傷むので、ZIFソケットが付いたライタを作ってもいいなと思っています。また、今回はプログラムの書き込みにFlash Magicを使いましたが、ISPのプロトコルを調べたところ、それほど複雑でもないので、書き込みソフトも自作したいと思っています。そうすると、いったん.binから.hexにファイルフォーマットを変換してからマイコンに書き込む手間がなくなります。
このページでは、BIN2HEXGUIとFlash Magicを組み合わせてLPC1114にmbedのプログラムを書き込む方法を紹介しました。
次のページでは、単独のツールでLPC1114にmbedのプログラムを書き込む方法を紹介します。