STM32でデジカメを作成した時の小技
背景と問題点
- STM32F4 DiscoveryボードにはRAMが192KBしかない。
- 320x240x16bitのフレームバッファ(153.6 KB)として使用するのは無理
- JPEGエンコードなどの重い処理を、カメラ撮像と同時にやるのは無理 (Hブランキングを増やせば、ライン単位ならいけるかも?)
- そのため、1フレームの画をマイコン外のどこかに保持する必要がある。
解決策
- 電子工作で使用するような液晶ディスプレイは通常、GRAMとコントローラが一緒になったモジュールになっている
- LCDモジュールのGRAMをフレームバッファとして使う。
普段はこんな感じで、カメラ(DCMI)->LCD(FSMC)に画データを垂れ流す (ライブビューを想定)
いざ画像データを使用して処理するタイミングになったら、カメラ撮像を止める。LCDモジュール内のメモリを使って、重い処理もゆっくり実行可能。また、FSMCを使用しているので、通常のメモリアクセスと同様に扱うことが可能。 (シャッターボタンを押したときの静止画撮影を想定)
↑の図だと読み込みのピクセルフォーマットをRGB565と書いてしまっていますが、実際にはRGB888になります。たとえ書き込みがRGB565フォーマットでも、読み出すときはRGB888になるようです(仕様書にそのような記述は見当たらなかったのですが、実際にこのように動いていました)。
このパワポに、タイミングチャートなど、もう少し詳細を記載しています。