いろいろ試す7

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



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


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


前回軽く紹介していましたが実用レベルになれたので改めて紹介します。
目玉は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のデータを受ける部分の処理がまずいのでしょう。
てわけで魔の時間帯でもデータを受け付けるように…
…しただけでフン詰まり現象は無くなりました!

UARTの通信込みでこんだけ叩きだせるなら恩の字じゃないかしら!?
でもやっぱし専用ICには到底かなわないので…
遊び以外で使わない方がいいですよ(重文)
上記の成果はおきばにあります。
20110406追:
STM32のUSBライブラリがV3.3.0に上がりVCPのデモもこの問題が修正された
…と見せかけて修正されていないようです。ご注意を!

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


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


●トラ技別冊LPC1114ボード
圓山宗智氏作のMARYと呼ばれるLPC1114と周辺のボード群にちょっと興味が
魅かれたので購入してみました。最初はLPC1114基板とCP2104基板で2枚組かと
思ったのですが、本当に同じ基板が2枚(LPC1114+CP2104の基板が2つ)なのですね…

LPCXpressoと大きく違う部分はLPC1114のメイン発振器が内部オシレータ
(LPCXpressoは外部に12MHzの水晶がある)の使用を想定しているのでスタート
アップ時のオシレータ選択レジスタを内部オシレータにしとかないと
動かないといったところくらいでしょうか。

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

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