チカラの技術

電子工作やプログラミング

STM32のDMA転送スピードについて

前回までのあらすじ
DMA転送は最低でも36MHzで動作と思ってたら
7MHzしか出てないのでビックリしました。
マイコン徹底入門の書籍によると8クロック以上掛かるそうです。
 
教えてもらいました
著者様のHPで質問させて頂いたらDMAの転送時間の解説をしている
アプリケーションノートを教えていただいたので
せっかくだから備忘録も兼ねて和訳した文を下記に載せておきます。
 
ソース
「Using the STM32F101xx and STM32F103xx DMA controller」
直リンク
 
以下和訳
注意!!
私は英語力はハッキリ言って中学生レベルです。
下記の文章の和訳はエキサイト翻訳と勘を使って書きましたが誤訳がある可能性が高いです。
参考程度にご覧ください。


 
●DMAの動作
 DMAを利用して周辺機器からSRAMメモリまでデータを転送するには
 3つのステップが必要です。
 
 SRAMにADCの連続変換データを転送する時には
 以下のステップに従わなければなりません。
 
 1. DMAリクエストの優先割り当てとアドレスの計算を行います。
 2. ADCからデータをロードします。
 3. SRAMへロードされたデータを書き込みます。
 
 
 また、SRAMからSPI等の周辺機器にデータを転送する時は
 逆のステップで実行されます。
 
 1. DMAリクエストの優先割り当てとアドレスの計算を行います。
 2. SRAMからデータをロードします。
 3. APBバスを通してSPIにデータを書き込みます。
------------------------------------------------------------------------
 1チャンネル辺りのサービスタイム(tS)を以下に記載します。
 tS=tA + tACC + tSRAM
 ◎記号の意味
 ○tAは優先割り当てに必要な時間
  tA = 2  AHB クロック
 ○tACCは周辺機器へのアクセス時間
  tACC = 1  AHBクロック(バスマトリックス要求割り当て) 
        + 2 APBクロック(実際のデータ転送)
        + 1 AHBクロック(AHBとAPBバスの同期)
 ○tSRAMはSRAMの読み込み、もしくは書き込みアクセス時間
  tSRAM = 1  AHBクロック(バスマトリックス要求割り当て)
             + 1 AHBクロック(シングル読み込み、もしくは書き込み操作) 
        ただし SRAMのread-after-write を行った場合は
        2AHBクロック。
 
※read-after-write は
書き込み直後のデータを読み込んでデータが正しいか確認し訂正する機能。
------------------------------------------------------------------------
●DMAの優先割り当てと遅延時間について
 DMAが全てのDMAリクエストの優先順位(ソフトウェア、ハードウェア両方)を
 比較した時、
 DMAがアイドル状態か、3つのステップが1つのDMAチャンネルで完結している時
 (他のDMAチャンネルを使っていない時)は最優先要求として、
 DMAの動作は次のステップへ移行します。
 すでにDMAチャンネルが使用中(ステップ2か3)だった場合は、
 優先順位が何番目であろうとも新たなDMA要求は次のステップへ進めません。
 つまり2つのDMAチャンネル要求が行われたときの応答時間は、
 優先順位の高いDMAチャンネルの転送時間(優先割り当て時間は含まない)と
 次のDMAチャネルの転送時間の合計です。
 DMAチャンネルが1つだけアクティブである場合、前のDMA動作
 (DMAリクエストとアクノリッジ返送)が完了するまで、
 新しい要求を扱う事はできません。
------------------------------------------------------------------------
 この場合の総サービスタイムは下記のように増加します。
 tTS = tA + tACC + tSRAM  + tBF + tACK
 ◎記号の意味
 ○tBFはバスのフリータイム(CPUアクセスの為に、左のバスをフリーに(?))
  tBF = 1 AHBクロック
 
 ○tACKはDMAのアクノリッジ転送時間(周辺機器とDMAのハンドシェイク動作を完了する為の時間)
  tACK = 1 AHBクロック


和訳終わり。
 
要するに、
DMAの競合が無い場合は、
APB = AHBなら (ペリフェラルのバスがAPB2の時)
AHB 8クロックもしくは9クロック
 
APB = 2 AHBなら (ペリフェラルのバスがAPB1の時)
AHB 10クロックもしくは11クロック
という事でいいんですかね・・・
「SRAMの書き込みアクセス後に読み込みを行った場合」という部分が良く分からない・・・
へっぽこ回路師さんにread-after-write である事を教えてもらいました。
 
PS:SRAM→SRAM間転送の時はAPBを経由しないからもっと早くなるのだろうか・・・
   これは実際にテストしてみないと分からないですな・・・
   分からない事が多すぎてオラわくわくしてきたぞ!