趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

Motion-JPEGを1.8インチのLCDで動かして見ました

以前8ビットパラレルアクセスのLCDをSTM32F103C8のボードで動かして
見ましたが、今度は描画速度を上げて動画を表示できないかと検討しました。
結果としては、ソフトで転送を行う限り希望の描画速度が実現できない事が判明
しました。その為、次にDMAによるハードでの転送がサポートされているSPIでは
どうなるかを検討し、ターゲットのLCDも1.8インチのものにして負荷が軽くなる
ものを選択しましたが、SDからの読み込みから表示までの一連の処理を順番に
やって行く限り、1秒間に5フレーム程度が限界である事が判りました。
(目標は1秒間に10フレーム以上でした。)以下がその時の検討状況となります。

<Motion JPEG 動作検証システムの概要>
  今回Motion-JPEGの動作を検証したシステムは、前回動作検証を行った
  KMR-1.8 SPI LCD と STM32F103C8のボードを利用したもので次の様な
  ものでした。
   イメージ 1


   1.LCDの解像度は128x160で16bitsカラーで使用
   2.LCDのコントローラはST7735でSPI制御方式
   3.標準のSDカードスロットでカード端子とスロット端子は直結
   4.電源電圧は今回3.3Vで使用
   5.SDカード用とLCD用のSPIは別々の端子を利用
   6.SDカードからのデータ読み取りとLCDへの描画データの転送にはDMAを利用

 [動作状況]
   

<関連資料>
   オリジナルのライブラリおよび利用したツールの入手先は次のURLです。
    イメージ 2

<テスト内容>
    今回のテストは次の様な内容で、STM32F103C8ボード用にArduino
    ライブラリを移植したものの高速化を検討してMotion-Jpegの動画を表示
    させるものでした。なお、最初は8ビットのパラレルデータバスのLCDでの
    動作を検討しましたが8ビットのバスを高速で動作させるにはアセンブラ
    コードを書く必要が有る事が判明した為、今回はDMA転送モードがサポート
    されているSPI形式の小型の1.8インチのLCDでの検討をしました。

 [目的と結果]
    テストの確認目標は次のものでした。
         1.SPIの転送にDMA方式を使う方法と問題点を確認
         2.Motion-Jpegのフレームレートがどこまで上げられるかを確認

      結果としては、次の様な状況で、DMA転送で大幅な高速化を実現させる事が
      できました。
         1.LCDへの表示データをDMAで行うと描画の速度を大幅に改善する事が
              できました。
         2.更に、SDからの読み込みデータもDMAで行えば、これも速度を大幅に
               改善する事が判りました。
         3.ただし、SDからの読み込みから表示までの一連の処理を順番に行う
               方式で行った為、今回は表示のフレームレートは5フレーム/秒が
               限界でした。

        以上の様な状況で、DMA転送は速度改善に大幅に貢献する魅力的な方法で
        有る事が判りました。ただし、更なる度改善の次の段階としては、今の様に
        DMA転送が終了するのを待って次の動作を行うのではなく、DMA転送中に
        次の動作が開始できる方法の検討が必要で、それを行う為の課題と解決策の
        検討が次に必要な事も判りました。

 [テストでの機器の接続] 
    イメージ 3

 [利用したIDE
    イメージ 4

 [コードの構造]
    イメージ 5

 [KMR-1.8 SPI LCD アクセス方法] 
    イメージ 6

 [テストSDの内容] 
    イメージ 7


 [コード類]
    上記のテスト用に作成したコードは次のURLからダウンロード可能です。
   (emIDEを使用)

     Code download URL : https://www.dropbox.com/s/74gbjajabtztgal/emIDE_STM32F103C8_KMR1p8_MotionJPEG_test.zip?dl=0