STM32F7を使ってみる6 -タッチパネル入力とQSPIの追加-

もう気づいた方もいるかもしれませんがSTM32F7向けのいつものを9月1日版に
更新しております。
変更点は細かいバグ潰しと容量性タッチパネル入力、そしてQSPIの対応です。

●CTP(容量性タッチパネル入力)対応
STM32F7Discoveryには上記のタッチパネル付きのTFT-LCDモジュールが搭載
されています。型番でググっても出てこないのでおそらく特注品なのでしょう。
CTPコントローラにはFT5336GQQなる物が使用されております。

さて、以前はもっとも単純なADS7843系、ちょっとインテリジェンスな機能をもつ
STMPE811等の抵抗膜式のものを扱ってきました。
容量性の場合はメカニズムが全く違い複雑になるので専用ICに頼らざるを得ない
のですがそれの使い方を把握するのでもこれまた複雑で正攻法で行くととても
時間がかかってしまいます。

そんなわけでSTマイクロ提供のCubeF7ライブラリ群にはBSPとしてFT5336GQQ用
のアクセス用関数がちゃんと用意されています。しかもF7-Discovery用にI/Oの
設定も御誂えております。

実装は拍子抜けするくらい容易でした。私の過去のタッチパネル入力の処理と
結合させてGPIOのエッジ割り込みの処理を追加するだけで済みました。
F7-Discoveryのデモではタッチした状態が変わらないと割り込み処理を抜けられ
ない構造になっていてデッドロックの危険性があったのでそこだけ省いています。


他の上位のレベルの処理は一切変えていないので過去の抵抗膜式のものと同じ
ような感覚で操作できるようになっています。

本来ならばFT5336GQQのBSPがやってる処理を分解・再構築して自分独自の
タッチパネル入力処理とすべきところなのですが残念ながら私の技術力はそこまで
及ばずあえなく安易な方法、"出来合いの処理"を提示されたライセンスに従って
利用させてもらうことにしました。F7になってからは複雑化も相まってそういう場面が
多数出てきています。
私も巨人の肩の上に乗る小人のうちの一人なのです。

前向きに考えるとソースコードを公式のものと互換性を持たせて問題を切り分け
易くするなんてことも言えますがゆくゆくはSeggerのSTemWinとかも使ってみたい
ので何でもかんでも自作にとらわれず柔軟にやってこうと思います。もなかさんもこう言ってますし
でも素のEclipseなんて絶対に使いませんよぅ!!!!!!!!
ゲホゲホ・・・ハァハァ失礼・・・次に進みましょう・・・

●QSPI-ROMをメモリマップドモードで使う

こちらはLPC4330の時にも紹介した奴と同じですね。SPI-ROMのメモリ領域が特別
な関数を経由せずにリニアにアクセスできるという便利な機構です。

ことSTM32F7に限ってはD-Cacheを挟むので従来のSPI-ROMではどうしようもなかった
速度的なボトルネックはある程度解消されるようです。


F7のHALライブラリにはQSPIの関数/BSPが用意されていますがメモリマップドモード
で使用する場合は一度イニシャライズしさえすれば後は普通の内蔵フラッシュ
メモリと全くおんなじです。


今回もBSPを最大限に利用させてもらっていますが、QSPIのメモリマップドモードでは
読み出し専用で使う場合は割り込み処理は全く不要なので初期化時のNVICの設定
を省いておくこともできます。

私はQSPI-ROMをFONTX2のデータ置場として利用しました。F7DiscoveryではN25Q128A
が搭載されています。N25Q128Aは一セクタあたり64kByteずつ分かれていますので
FONTX2ファイルを書き込むアドレスは半角を0x90000000、全角は0x90010000に配置
してみました。


あとQSPI-ROMにデータを書き込む方法ですがSTLinkUtilityのVer3.7からF7Discovery
用の外部フラッシュローダに対応しています。これを利用して書き込みます。


先ずは半角


お次は全角。
なんでか拡張子はbin,elf,hexしか駄目なのでFONTX2ファイル書き込む際は拡張子
をbinに変えて書き込んでください。


こうやってQSPI-ROMに書き込んだデータは上記のようにして参照します。
メモリマップドモードだからできる技ですね〜


無事に起動しました。S-JIS形式のtxt文書もごらんの通りです。
ビルド時に巨大なFONTX2ファイルを組み込む必要がなくなり、フラッシュ書き込み
に掛かる時間も節約できてテンポよくデバッグできるようになると思います。



デバッガからQSPIのメモリを参照するとこんな感じに見えます。もちろん参照時は
メモリマップドモードになっている必要があります。これは半角のFONTX2です。


こちらは全角です。



現在はまだ限定的かつ実験的な使用にとどまっていますがQSPI-ROMの有効な活用法が
新たに見つかったら紹介していきたいと思います。



●おまけ
いつもののmakefileみたら何をどうすればわかるとは思いますが、デフォルトでは
以下の"ひとまず確実に動く設定"になっています。

1:内蔵フラッシュインターフェース
 ->AXIM
2:SDRAM
 ->有効
3:タッチパネル
 ->有効
4:FONTX2
 ->内蔵フラッシュから参照かつQSPIは無効

"4:"のFONTX2のドライバでQSPI-ROMを参照したい場合は当たり前ですがあらかじめ
半角/全角それぞれのFONTX2ファイルを上で紹介した手順でQSPI-ROMの適切な
アドレスに書き込んでおく必要があります。

Comments

はじめまして、
ねむいさんのSTM32F7DISCOVERY用いつものを動かしたのですが、ファイラの上下の青いバーが1つおきに表示されてしまいます。SDに画像を入れてそれらしきあたりをクリックすると表示するので、フォントが読めていないのではないかと思われます。フォントをQSPI-ROMに入れて
USE_EXT_ROM = EXT_QSPIROM_SUPPORT
を有効にしてみましたが同じ結果でした。設定はデフォルトのままで4GのSDのみセットしています。何かアドバイスがありましたらよろしくお願いいたします。

  • よし
  • 2015/11/13 3:20 PM

よし様はじめまして、ねむいです、

F7用サンプルをSDRAMにもMPU/キャッシュを効かせた11月版に
更新しましたのでこれで試してみてください。

新しいサンプルで無事動きました。ありがとうございました。
開発環境は一発でコンパイルでき、大変感謝しております。
まだinsightが動かない状態ですが、I2Cのセンサを繋いで画面に表示できるようにしたいと思っています。今後も面白い記事を期待しております!

  • よし
  • 2015/11/15 6:16 AM

Post a Comment








Go to top of page