いろいろ試す7

この度の大地震で被災された皆さまには心よりお見舞い申し上げるとともに一日も
早い復興を願っております。私も復興支援を私なりにできるかたちで行っていきます!



…てわけで電子工作野郎になる時間がなかなか取れなくなってしまったので今回はも
ともとタイトル通りいろいろやるつもりだった内容を大幅縮小変更してお送りいたします。


●AVRマイコンを使ったバックアップ機能つきRTC時計
un

前回軽く紹介していましたが実用レベルになれたので改めて紹介します。目玉はRTCの
バックアップをATMEGA644pのパワーセーブモードで行い、外付けのRTCのモジュールを
排したコストダウン仕様となっています。表示部は部品箱の肥やしになっていたNoritakeの
キャラクタVFDを使い視覚性も良好でLM60を使用した温度センサで気温も同時表示出来
るようにしました。
気になるパワーセーブモード時の消費電流ですが、ADVANTESTのnAオーダーで測定でき
るデジタルマルチメーターで測定したところMAX3uA,平均1uAでした。CR2032(約220mAh)
なボタン電池でも単純計算で3000日以上余裕でバックアップ可能なわけです♥
主人がATMEGA328で作ってたやつはバックアップ時にAVCCを断つというセコ技を駆使して
も80uA程喰っていたのでそれを鑑みると非常に満足のいく結果と感じています。

消費電力削減の為にはファームで省電力レジスタ群をいじったり割り込み時のステート
を考慮するのはもちろんのことですが、VCCまわりの回路構成も非常に重要です。AVRは
STM32等の今日びのARMマイコンのように独立したパワードメインは無いので、逆方向
漏れ電流の非常に小さいショットキバリアダイオードでしっかりと分けてやらないとせっ
かくファームで省電力化できても外部回路からダダ漏れとなってしまいます。こういうの
意識しながら作ることを経験しとくと他でも応用が効くと思います。

時計合わせはUARTのコマンドからのみという手抜…シンプルな仕様!mega328バージョ
ンでは回路に取り込んでいたAVR309を外に出して手抜…回路の簡素化を図りました!


●STM32マイコンを使ったUSB-CDCが…
※知ってる人もいるかもですがかなり以前の話です
iruka氏のSTM32を使ったUSB-CDCの考察の最後に出てくる魔の時間帯について。
ループバックして、氏のw32termのテストモードを走らせるとこの時間に高確率で引っか
かってフン詰まり状態になってしまいます。単純にダブルバッファリング化しても同じ結果
だったのでUARTのデータを受ける部分の処理がまずいのでしょう。てわけで魔の時
間帯でもデータを受け付けるように…
…しただけでフン詰まり現象は無くなりました!
un
UARTの通信込みでこんだけ叩きだせるなら恩の字じゃないかしら!?
でもやっぱし専用ICには到底かなわないので、遊び以外で使わない方がいいですよ(重文)
上記の成果はおきばにあります。
20110406追:
STM32のUSBライブラリがV3.3.0に上がりVCPのデモもこの問題が修正されたと見せか
けて修正されていないようです。ご注意を!

●STM32 ValueLine-Discovery
を秋月さんから購入しました。ねむいさんみたいに買ってすぐにバラすような人対策か、
ST-Linkの部分が切り離すことができません。しかしこのST-Link部もVersaloon化できる
ようになっているのでさっそくVersaloon化してみました。これについては後ほど別記事で
詳しく取り上げたいと思います。

un
↑お約束のTFT液晶モジュール。8bitバス繋げるのめどいのでSPI接続方式の液晶で…。
この評価ボードのセットはSTM32が二つも付いているので(部品取り基板として)とても
利用価値があると思います。機能限定で単品物作るなら新品でパーツ揃えるより安上
がりで最適でしょう。


●トラ技別冊LPC1114ボード
圓山宗智氏作のMARYと呼ばれるLPC1114と周辺のボード群にちょっと興味が魅かれた
ので購入してみました。最初はLPC1114基板とCP2104基板で2枚組かと思ったのですが、
本当に同じ基板が2枚(LPC1114+CP2104の基板が2つ)なのですね…
un
LPCXpressoと大きく違う部分はLPC1114のメイン発振器が内部オシレータ(LPCXpresso
は外部に12MHzの水晶がある)の使用を想定しているのでスタートアップ時のオシレータ
選択レジスタを内部オシレータにしとかないと動かないといったところくらいでしょうか。

CQ誌のサイトからダウンロードしてきたMARYのサンプルを参考に過去に作ったとっかか
り用のLPCXpressoのプログラム
と共用できるようにしてみました。
MARY上で動かす時はmakefile内のボードの定義をMARYに変えるだけでおkです。
un

つづく

Comments

MARYへの書き込みをOpenOCDとSTM8S版Versaloonで試してみたのですが以下のエラーでうまくいきません。
flash 'lpc2000' found at 0x00000000
auto erase enabled
Error: timed out while waiting for target halted
Warn : lpc2000 returned 13
Error: error writing to flash at address 0x00000000 at offset 0x00000000
Runtime Error: /usr/local/share/openocd/scripts/target/lpc1114_swd_flash.cfg:90:
in procedure 'mt_flash'
in procedure 'flash' called at file "/usr/local/share/openocd/scripts/target/lpc1114_swd_flash.cfg", line 90

ねむいさんはVSProgで書き込まれたのでしょうか、それとOpenOCDのどちらですか。

また、OpenOCDでのデバッグは問題なくできましたか?

竹本様、ねむいです。おはようございます。

Cortex-M0はOpenOCDではまだ正式にサポートされていない
ため、Cortex-M3のコアを無理やり想定してうごかしています。
そのため2012年1月現在も出来ることは限定されています。

特にOpenOCDからのフラッシュの操作はセクタ単位のイレースしか
できませんので書き込みはvsprogを使用しています。デバッグに
ついてはmain関数で止まらない等の挙動不審な点はありますが
一応ステップ実行・レジスタ&メモリの参照等は可能です。

各操作時にhalt待ちでGDBのタイムアウトになっている場合は
スクリプトファイル中の"reset init"を削除して試してください。

ねむいです。こんばんは。

その後OpenOCDのメーリングリストを追ってみました。下記URL
www.mail-archive.com/openocd-development@lists.berlios.de/msg16835.html
の情報をもとにCortex-M0用のOpenOCDを作成して書き込み
を行ったところ、cortex-m3のcrcのエラーは発生するものの
書き込み&ベリファイまで完了できました。

書き込んだプログラムも電源をいったん落とした後再投入で
問題なく動きました(そのままだとHardFaultから抜け出せな
くなる)のでOpenOCDだけで書き込み/デバッグは一応可能です。
しかし利便性を考えるとOpenOCDがSWDとCortex-M0に正式に
対応されるまではvsprogやUARTブートローダーを利用した
方がよいでしょう。

またまたねむいです。おはようございます。

さらに試行をかさねてみました。最終的にLPC1114用のコンフィグファイルを
大幅修正し、ベリファイを捨てたらOpenOCDの書き込み/デバッグまでシームレス
に行えるようになりました。
ただ、本来の道から大幅に外れた非常に"ヤクザ"な使い方になってしまいましたが…

ねむいさま、お忙しいところ調べて頂きましてありがとうございます。

現状を理解しても是非コンフィグファイルを使ってみたいです。よろしくお願いします。

ねむいさまのOpenOCDの修正は、cortex-m3とm0の違いを
For CM3:
adi_dp_info.tar_autoincr_block = (1 << 12);
For CM0:
adi_dp_info.tar_autoincr_block = (1 << 10);
のみということで、src/target/cortex_m3.cの上記部分を修正して動作を確認されたのでしょうか。
それとも大きな修正をおこなわれたのでしょうか。

ねむいさま、お忙しいところご指導頂きましてありがとうございます。
cortex-m0版openocdは、0.5.0のバージョンでも上記の変更で動作することが分かりました。
コンフィグファイルは、ねむいさまの作成されたものを使用しました。確認したのは以下の処理です。

1)MARYのCOLOR_LEDのサンプルを-gオプション付きでコンパイルし、binファイルのCRチェックサムを修正
2)修正したbinファイルをcortex-m0版openocdで書き込み正常に書き込み、カラーLEDが点滅することを確認

これでcortex-m0版openocdとコンフィグファイルに問題がないことがわかったので、後はどうやってデバッグするかになりました。

3)EclipseのZylinプラグインのCommand設定でloadコマンドをコメントアウトしてデバッガを起動
→ブレークポイントも正常に動作しますが、プログラムの途中からのデバッグになってしまいます。

4)telnetを使ってターゲットマイコンをリセット
$ telnet localhost 4444
> reset run

→これでEclipseからプログラムのデバッグができました。

どうもありがとうございました。

竹本様、こんばんは。ねむいです。

あれから私の方もいろいろ試行し、LPC1227でも書き込みと条件付きですが
デバッグも出来るようになりました。LPC11U14は残念ながら書き込みに必要な
RAMのワークエリア4096Byte(メインSRAM4096ByteからISPで32Byte取られる
模様)が確保できないため書き込みはできませんがセクタ単位の消去と別な
手段で書き込んだ後デバッグは可能です。
OpenOCDがSWD接続とCortex-M0に完全対応するまでの繋ぎとしては手法も固
まり十分"かたぎ"に寄ってきたので私のブログでも暫定で公開します。

あとLPC1114やLPC1227でもチェックサム自動計算の書き込みが効くのを確認
しましたので"calc_checksum"をflash bankの設定の最後尾につけてみてく
ださい。別ツールでbinをいじる手間が無くなって直接elfやhexが焼けるように
なります。

Post a Comment








Go to top of page