2013/02/24

Energia(IDE)でMSP430/Stellaris LM4F開発



MSP430向けに開発されたArduinoAPI互換IDE Energia


 最近MSP430LaunchPadを買ったついで最新版を確認したら、Stellaris LaunchPadMSP-EXP430FR5739がサポートされていた。

(追記)Stellarisは名前が変わってTiva™ C となった。 開発ボードはTM4C123G LaunchPadとなる模様。

・・・・

MSP430LaunchPadは、Texas Instruments(TI)社の16bitマイコンMSP430シリーズの開発用ボード。MSP430のバリューラインという石を開発できる。

Stellaris LaunchPad(通称StellarPad)は LM4F120H5QRというCortex-M4FコアのARMマイコン開発ボード。

MSP430は結構前に購入していたが、先日もう一つ追加で買った(千石電商)。  今のロットでは同梱される石がピン数が多く周辺回路が豊富なものに変更されている。 以前ついていたものはバリューラインの中でも下位モデルだった。

もう一つ、StellarPad のほうは届いて以来積み基板と化していた…。

準備

Energiaをダウンロードして解凍するのとは別に、デバッガのドライバをインストールする。 ドライバの在り処はTIのWikiを参照。
(EnergiaにはMSP430のドライバが付属するけど、32bit用のみだった)

 Windowsでは、MSP430は実行ファイルを一つ実行するだけだが、Stellarisはデバイス管理画面から、Stellarisのデバッガについて複数の項目(仮想UART、パラレルポートドライバ等)を一つ一つ当てる。

あとは、Energia上でマイコン種別と、仮想UARTポートを指定するだけ。
デバッガ経由なので、書き込みがとてもスピーディ。


ハードウェアまわり

・各ボードのピン配置図

・MSP430LaunchPadはボードRevによって若干仕様が違うので、要確認。

・MSP430はIDE/Hardware にある boards.txtのボード定義を編集するだけで動作周波数を変更可能。

 AVRではブートローダーの書き換えが必要なので動作周波数を変えるのはお手軽ではないが、Energia上ではちょうどPICをPICkitで開発するような感覚。

 MSP430G2553の定義された周波数は16MHzだが、もしそんなに必要なければ、試しに1MHzに書き換えて消費電流を見てみよう。このとき、デバッガとはジャンパピンを切り離しておく。
3mAあったものが0.2mAまで落ちるはず。

これでスリープも併用すれば電池や太陽電池用途にとても向いている。

 ArduinoAPIが使えるPIC24だと思えば、色々と用途が見つかりそう。


 StellarPadは80MHz時のボード全体での電流が50mA程度と、他の32bit系ボードとくらべても少なめ。
 HWSerialが8chもある。試しに 3Mbpsというボーレートを設定してみたけど普通に動いてしまった。
シリアルポートの定義はCoreライブラリにまだバグがあって、全部動かすには修正が必要だったけれど、8chすべて使うことができた。 意外とロボットに向いてそうなので、試しに昔ArduPilot MEGAで作ったシステムをStellarPadで置き換えてみようと思う。

hardware/lm4f/cores/lm4f を覗いてみると、 その他にもFPUやスリープ命令の関数があるので、呼び出せば使えそう。 スリープモードはボードに32.768kHzの水晶発振子が付いているので、そのまま使えるはず。

2013/02/14

SDLoggerを試す

OpenLog

 シリアル-SDロガーといえば、2年ほど前からOpenLogというプロジェクトの製品版を使っている。
オリジナルのOpenLogはATmega328Pベースだけど、最近ふと思ったのが、もうちょっと余裕のあるATmega644Pを使えば、RXバッファ用のRAMも増えるし、ロガーと言いつつソースにJPEGカメラのコマンド操作を追加すれば、SparkfunのJPEGトリガーみたいに使えるんじゃないかという点。

 その観点でググってみると、同じコンセプトのSDLoggerというプロジェクトが2年前からあって、SeedStudioから販売されていたことを知った…。
 (人は見たいものしか見えないんだなあ…)


 ATmega328Pで取りうるRXバッファ量が少ないという懸念は、2年前の使用感を引きずっていただけで、本家OpenLogの最新のファームウェア(v3.1)を見たらだいぶチューンナップされていて、昔みたいに連続書き込みで問題が起きることは無さそうだ。 
 RAMもROMもギリギリまで使い込まれている上に、Arduino1.0環境で互換機として書き込みができる。 もし古いファームウェア(コマンドで確認できる)を持っているなら、本家のサイトの説明を読んで最新のものを書き込んでみるとよいだろう。
  

ということで、お手軽なOpenLogと比較すると、SDLoggerはそのままOpenLogのスケッチが走る上位互換機として、余ったROM/RAMとI/Oを使って何か特化したロガーを作ってみるのに向いてそうだ。 

とりあえず、手持ちの部品でSDLoggerを組み立ててみた。
・ATmega644P(DIPなら秋月で入手できる)
・14.7456MHzの水晶発振子
・microSDカードソケット
・コンデンサ少々

があれば作ることができる。
 水晶発振子はちょっと特殊な周波数だけれど、シリアルのボーレートを精度よく出すために選択されているっぽい。たまたま手元のジャンク基板についていたものを取り外して使用。

ハードウェア自体はArduino互換機として動けば良いので、水晶を16MHzにして、今ならArduino1.0に対応した定義ファイル(644p用定義とブートローダー)を使うという手もある(未検証)。
 Arduino MEGA+SDシールドでもいけそうだ。

ちなみにOpenLogの製品は16MHzで3.3V電圧動作という設計だが、本当はATmegaの駆動電圧と動作周波数的には規格外となる。(普通に動いちゃうけども)
 動作保証ギリギリの環境下でも安定動作させたいので、SDや周辺機能にレベル変換ICを挟んだ5V動作版を作ろうかと思っている。

ボード自体は、いつものようにUEW線で配線。
いつもの 4.5cm角のユニバーサル基板に組んだ

OpenLog V3.1を書き込んで動作させているところ。 
microSDHCカードは特価セールで買った2枚組の8GB(Class10)。 特に問題なく記録できた。

安定した書き込み性能を出すにはSD/SDHCカードをどうフォーマットしたかも重要となるらしいので、おすすめされていた方法として、SDアソシエーションが提供しているSDFormatterを使ってみた。

OpenLog同様、デフォルト9600bpsでGPSのNMEAを記録中

 プロジェクト自体は、RAMの範囲内で任意のHWシリアルバッファを用意できるライブラリなど、参考になるソースが多い。

 具体的に何を追加で載せるかについては、RTC+センサでタイムスタンプ付きCSVデータの保存や、JPEGカメラの制御と写真の保存などで検討中。

 写真はRTC代わりに、Fastrax社のUC430をレイアウトしてみたところ。

その後、基板に起こした。
 Morikawa Log http://blog.kemushicomputer.com/2013/05/sdlogger-based-datalogger-morikawalog.html