いろいろ試す17

試"す"というか試"した"結果のご報告の方が多いかも…


●STM32F437シリーズの予習
2013年4月中旬現在はまだチップ単体は手に入る時期ではないのですが去年買って放置
していた超格安全部入りボードを使用して来たるSTM32F437シリーズの予習をしていました。
ただこれに付属しているTFT-LCDモジュールのタッチパネルドライバICが定番のADS7843
ではなく、I2C接続のSTMPE811というI/Oエキスパンダと温度計も一体化された妙に"いん
てりじぇんす"なICだったのでそれの対応に非常に苦労しました…。

↑画像は春になり発情期を迎えたいないさn
とりあえずいつものが動かせられるようになったので同じ基板を購入した人たちは無改造
で追試できると思います(TFTLCDのドライバはILI932xを選択の事)。I2Cバスエラー対策は
まだ実装していませんので、フン詰まりになったら電源をいったん落とした後再投入
して対処してください。
(やっけつ)
また今回はタッチパネルの処理の上位層も少し見直して無駄な記述をしていた箇所や
分かりづらい箇所を廃しております。たとえば、

キャリブレーション画面で青のをしっかり押せたら…

黄色のになる!…もちろんこれだけではありませんが細かいところも修正してます。


せっかくなので全体的にソースコードも見直してコメント等をできるだけ随所に挿入して、
プログラムの流れもつかみやすくなるよう努めるようにしました。
本来は書いた本人がプログラムの動作に関する詳しいドキュメントを書くべきなの
ですがこちらのかたが非常に分かりやすい解説をして下さっており、ねむいさんもいつも
参考にさせてもらっていま…あれ?

今回の修正はおきぱにあるSTM32F1,F2,L系のものを始め他社のARMマイコンのFatFs
移植例にも順次反映していきます。

●STM32F4で外部SRAMを使う
ねむいさん非常におまぬけなミスをずっと放置しておりました。STM32F4向けのいつもの
のプログラム中でターゲットボードにREDBULLを指定した場合は外部SRAMを使用できる
ようにFSMCの設定を行っていたのですが…REDBULL上ではキー入力も同時に有効にして
おりそこのGPIO設定がでたらめだったためFSMCのポートにもそれが波及し外部SRAMへの
特定のアドレスのアクセスで頻繁にHardFaultっておりましたorz
一見まともに動いているように見えたので気づくの遅れましたorzorz
今回のソースコードの見直しではぢめて気づきましたorzorzorz

というわけでそこを修正して大容量のSRAMをmalloc系関数のheap領域として使えるよう
にして、(さすがに内部SRAMと比べると非常に速度が遅いうえにマトリクス化されてい
ないのでスタック領域までは割り当てる気がありません…F4はCCMあるし)これでメモリ
サイズを気にせずに自由自在に使えるようになったー!
…と思いきや、16bitのアラインメントが乱れるようなアクセスが連続で続くとやっぱり
コケます。これはlibjpegで画像をデコードするような時に特に顕著になりこのように途中で
表示がグレーになったストール状態に、虹裏で見られる富山みたくなってしまいます。

↑libpngとgiflibだとこの現象一切起こらないのですが…調査はいずれまた…

また、FSMCのバスにSRAM以外に入出力容量の大きいブツ(低速でしか動作できない
一昔前のTFTLCD等)がぶら下がっているとやっぱりこけます。オシロでWRの波形を見たら
オーバーシュートしまくりです。なのでTFT-LCDも影響を与えないものをオシロの波形と
にらめっこして選ぶ必要があります。もしくはFSMCに影響を与えないSPI接続のLCDの
選択も考えてください。

ねむいさんが試行した限りでは16bit区切りになるような、たとえばVRAMとして16bitに
パックされたRGB565のデータをスタティックに確保しただけの状況下の使用では問題は
一切発生なかったのでこの先も慎重に確かめてみます。


●LPC4357全部載せ基板
RMBレートが13円のころに買っておいてよかったです♥USDも99円(20130411現在)まで
回復してますが海外のパーツ・基板漁りはひとまずお休みして買いためたブツを消化して
逝きましょう先ずはNxPのCortex-M系最高峰のLPC4357のボードです!
(2013年01月中旬当初は国際送料込みでなんと13000円台で購入できていた超格安な代物でした。)


以前LPC4330というLPC4300系の基板をいじっておりましたがあっちはプログラムを格納
するフラッシュ領域が全くなく、スズメの涙ほどの内蔵SRAMか低速なSPIFI-SPIROM
から実行せざるを得ない非常に使いづらい代物でした。しかしこいつは違います!204MHz
動作でフラッシュも1MB内蔵なので使い勝手が改善されて(ると思い)ます!…しかし…


4.3inchLCD基板の接合部でみてはならないものが目に入ってしまいました…
…なんだこの隙間は…これのせいでベースの基板もひん曲がってるし…
(後日このヘッダピンを半田槽で外し新しいものにまっすぐ付け直しました)


通電すると動作確認用のサンプルプログラムが起動します。またOpenOCD用のcfgを作
っていませんがLPC4300系のフラッシュ書き込みルーチンもまだレビュー段階なので
先ずはそこから基礎を固めて試してみましょうか(逆さになった何かを無視しつつ)。


●OpenOCDをさらに使いやすく
年明けくらいからでしょうか、ねむいさんが提供しているOpenOCDバイナリをSTLink/V2
から使用する際にドライバをLibUSBからではなくSTMicro提供の純正ドライバを使うように
変更できないだろうか?というご要望をちらほらいただくようになりました。

まさかとおもってSTMicro純正のドライバをよく調べてみると、Windows向けドライバとして
WinUSBが使用されているのがわかりました。また去年行ったFT2232系FTDIデバイスの
MPSSE対応の際にWinUSB(LibUSB-1.0)用のビルドができるようになっていたのですが、
STLink/V2に関してはVersaloonと同じくLibUSB0.1系を使用するようにビルドオプション
を指定したままになっていたので純正ドライバは使用できない状態でした。

今となってはWinUSB(LibUSB-1.0)を使用しない道理は存在しないのでSTLink/V2のドラ
イバとしてWinUSBを使用するようにビルドオプションを変えて純正ドライバをそのまま利用
できるようになったバイナリを現在は提供しております。
ST-LinkUtilityなどの純正ツールとOpenOCDがドライバの差し替えなしに利用できるように
なったのでぐっと便利になっております。
そのかわり従来のLibUSB0.1系からは使用できなくなっておりますのでご注意ください。
↑一応変更当時はトップにでかでかと告知してたので皆さん移行済みかと思います

追:
ドライバの扱いについてちょっとまとめます。
LibUSB-1.0:WindowsにおいてはWinUSBのラッパーとして働きます。
      ですのでLibUSB-1.0のAPIを使いたい場合インストールするドライバは
      WinUSBとなります。WinUSBのKMDFを使用しています。
LibUSB-0.1:WindowsにおいてはLibUSB-Win32と呼ばれ、LibUSB0.1(libusb0)の
      APIはWDMを使用しています。
LibUSBK :WinUSBのエミュレーションとして働きますが、WinUSBでサポートしてない
      アイソクロナス転送も使用可能です。また、libusb0のAPIとも互換性があるので
      LibUSBKをインストールしておくと1.0系と0.1系APIを使うアプリがどちらも
      ドライバの入れ替え無しに使用可能となります。




さらにFT2232系デバイスの方もZadigでインストールする際にLibUSBKを選択することにより
WinUSBを使うOpenOCDやLibUSB0.1系を使うUrJTAG/FlashROMなどの便利ツールが
ドライバの入れ替えなしにシームレスに利用できるようになり、低いコストと簡単な手順で
強力なデバッグ環境をそろえることが可能となっております♥


●aitendoさんのanux
>ANUX続けるのやめまーす(←peep.usでページを保存しました)
こ ん な こ っ た ろ う と お も っ た で す よ ぅ ! !
そうだねチャイナリスクです…せめて全回路図くらいPDFでくだち…

Comments

Post a Comment








Go to top of page