Motion-JPEGを1.8インチのLCDで動かして見ました
以前8ビットパラレルアクセスのLCDをSTM32F103C8のボードで動かして
見ましたが、今度は描画速度を上げて動画を表示できないかと検討しました。
結果としては、ソフトで転送を行う限り希望の描画速度が実現できない事が判明
しました。その為、次にDMAによるハードでの転送がサポートされているSPIでは
どうなるかを検討し、ターゲットのLCDも1.8インチのものにして負荷が軽くなる
ものを選択しましたが、SDからの読み込みから表示までの一連の処理を順番に
やって行く限り、1秒間に5フレーム程度が限界である事が判りました。
(目標は1秒間に10フレーム以上でした。)以下がその時の検討状況となります。
KMR-1.8 SPI LCD と STM32F103C8のボードを利用したもので次の様な
ものでした。
1.LCDの解像度は128x160で16bitsカラーで使用
2.LCDのコントローラはST7735でSPI制御方式
3.標準のSDカードスロットでカード端子とスロット端子は直結
4.電源電圧は今回3.3Vで使用
5.SDカード用とLCD用のSPIは別々の端子を利用
6.SDカードからのデータ読み取りとLCDへの描画データの転送にはDMAを利用
[動作状況]
<関連資料>
オリジナルのライブラリおよび利用したツールの入手先は次のURLです。
オリジナルのライブラリおよび利用したツールの入手先は次のURLです。
<テスト内容>
今回のテストは次の様な内容で、STM32F103C8ボード用にArduinoの
今回のテストは次の様な内容で、STM32F103C8ボード用にArduinoの
ライブラリを移植したものの高速化を検討してMotion-Jpegの動画を表示
させるものでした。なお、最初は8ビットのパラレルデータバスのLCDでの
動作を検討しましたが8ビットのバスを高速で動作させるにはアセンブラで
コードを書く必要が有る事が判明した為、今回はDMA転送モードがサポート
されているSPI形式の小型の1.8インチのLCDでの検討をしました。
[目的と結果]
テストの確認目標は次のものでした。
1.SPIの転送にDMA方式を使う方法と問題点を確認
2.Motion-Jpegのフレームレートがどこまで上げられるかを確認
結果としては、次の様な状況で、DMA転送で大幅な高速化を実現させる事が
[目的と結果]
テストの確認目標は次のものでした。
1.SPIの転送にDMA方式を使う方法と問題点を確認
2.Motion-Jpegのフレームレートがどこまで上げられるかを確認
結果としては、次の様な状況で、DMA転送で大幅な高速化を実現させる事が
できました。
1.LCDへの表示データをDMAで行うと描画の速度を大幅に改善する事が
1.LCDへの表示データをDMAで行うと描画の速度を大幅に改善する事が
できました。
2.更に、SDからの読み込みデータもDMAで行えば、これも速度を大幅に
2.更に、SDからの読み込みデータもDMAで行えば、これも速度を大幅に
改善する事が判りました。
3.ただし、SDからの読み込みから表示までの一連の処理を順番に行う
3.ただし、SDからの読み込みから表示までの一連の処理を順番に行う
方式で行った為、今回は表示のフレームレートは5フレーム/秒が
限界でした。
以上の様な状況で、DMA転送は速度改善に大幅に貢献する魅力的な方法で
以上の様な状況で、DMA転送は速度改善に大幅に貢献する魅力的な方法で
有る事が判りました。ただし、更なる度改善の次の段階としては、今の様に
DMA転送が終了するのを待って次の動作を行うのではなく、DMA転送中に
次の動作が開始できる方法の検討が必要で、それを行う為の課題と解決策の
検討が次に必要な事も判りました。
[テストでの機器の接続]
[テストでの機器の接続]
[利用したIDE]
[コードの構造]
[KMR-1.8 SPI LCD アクセス方法]
[テストSDの内容]
[コード類]
上記のテスト用に作成したコードは次のURLからダウンロード可能です。
(emIDEを使用)
Code download URL : https://www.dropbox.com/s/74gbjajabtztgal/emIDE_STM32F103C8_KMR1p8_MotionJPEG_test.zip?dl=0