RX71Mでカメラ映像をSDRAMへとDMA転送するとPDC FIFOオーバーラン(内蔵RAMでは発生しない)

カメラからの入力をSPI通信にて転送する仕組みを作っています。

カメラからの入力を転送する部分でアドバイス頂けると助かります。

PDC(カメラモジュール)のFIFOに入力されたYUV422データをDMAを使用して、内蔵RAM( H’0004 0000)へと32Bit ずつブロック転送しています。

カメラモジュールの解像度を変更(480×272→640×480)に伴い内蔵RAMでは容量不足になるためDMAの転送先を内蔵RAM→SDRAM(H’0800 0000)へと変更したところ FIFOオーバラン発生(PDC.PCSR.OVRF)が発生しています。「カメラ→PDC FIFO > DMA転送時間」となっていることが原因と考えておりますが、調査方法がわかっていません。

640×480のカメラを使用する必要があり、カメラ解像度≒内蔵RAMに収まるサイズになるのか、DMA、PDCの設定で対応可能なのかを知りたいです。

下記に確認した内容、質問を記載いたします。

・カメラの解像度を480×272にし、DMA転送先を変更
    ▼内蔵RAMへ転送:オーバーラン発生せず

    ▼SDRAMへ転送:オーバラン発生

→転送先に依存、解像度に依存しない

・カメラモジュールからの入力をDMAを使用してSDRAMへと転送すること自体が問題?転送速度、量の問題?

 SDRAM初期化はサンプルコードのままです。
  

・FIFOオーバラン発生時にDMA再実施などの処理を入れましたが、頻度が高すぎるため根本的な原因を調査しておきたい。

Parents
  • TTSSさんこんにちは

    SDRAMのデータバス幅は16bitですか?(SDCCRレジスタ)
    16bitであれば内蔵RAMに比べてだいぶ遅いのではないでしょうか?

    hirakuni45さんのおっしゃるように、まずは書き込み速度の確認が必要だと思います。

  • hirakuni45さん
    ふぐりんさん

    こんにちはTTSSです。
    早速のアドバイスありがとうございます。

    オシロにて書込み速度を測定しました。
    100KBの書き込みで内蔵RAMのほうが1.6倍高速でした。

    内蔵RAM:5.5ms

    SDRAM:8.8ms

    SDCCRは16bitとなります。(デバイス:M12L128168A)
    CPUからは読み書きとも出来ていました。


    今回使用しているカメラからのデータは、320×272×2 =255KBです。

    内蔵RAMなら14ms

    SDRAMなら22.4ms
    フレームレートが60fpsの場合はSDRAMではオーバーフローしてしまうのかとも考えています。

    >DMAでは無く、CPUで転送するとどうなるでしょうか?
    こちらの関しても調査してみます。

  • 追加で調査をしオーバーフローしない対応はわかりました。
    使っていたサンプルコードの使用方法が悪かったです。

    サンプルコードはカメラからの入力をLCDへと表示するプログラムでした。

    LCDは未接続で、プログラムはLCDありの状態(そのまま)で使用していました。
    LCDへはSDRAMからEXDMAを使用してLCDへと転送しています。
    いったんEXDMAを有効にしないようにしたところ、カメラ→SDRAMでオーバーフローが発生しなくなりました。オーバーフローの原因はDMA(カメラ→SDRAM)とEXDMA(SDRAM→LCD)に起因しているところまでわかりました。

    EXDMAの仕組みは理解できていませんので、根本理由はわかっておりません。

Reply
  • 追加で調査をしオーバーフローしない対応はわかりました。
    使っていたサンプルコードの使用方法が悪かったです。

    サンプルコードはカメラからの入力をLCDへと表示するプログラムでした。

    LCDは未接続で、プログラムはLCDありの状態(そのまま)で使用していました。
    LCDへはSDRAMからEXDMAを使用してLCDへと転送しています。
    いったんEXDMAを有効にしないようにしたところ、カメラ→SDRAMでオーバーフローが発生しなくなりました。オーバーフローの原因はDMA(カメラ→SDRAM)とEXDMA(SDRAM→LCD)に起因しているところまでわかりました。

    EXDMAの仕組みは理解できていませんので、根本理由はわかっておりません。

Children
No Data