STM32のDMA転送スピードについて
前回までのあらすじ
DMA転送は最低でも36MHzで動作と思ってたら
7MHzしか出てないのでビックリしました。
マイコン徹底入門の書籍によると8クロック以上掛かるそうです。
教えてもらいました
著者様のHPで質問させて頂いたらDMAの転送時間の解説をしている
アプリケーションノートを教えていただいたので
せっかくだから備忘録も兼ねて和訳した文を下記に載せておきます。
ソース
「Using the STM32F101xx and STM32F103xx DMA controller」
直リンク
以下和訳
注意!!
私は英語力はハッキリ言って中学生レベルです。
下記の文章の和訳はエキサイト翻訳と勘を使って書きましたが誤訳がある可能性が高いです。
参考程度にご覧ください。
●DMAの動作
DMAを利用して周辺機器からSRAMメモリまでデータを転送するには
3つのステップが必要です。
DMAを利用して周辺機器からSRAMメモリまでデータを転送するには
3つのステップが必要です。
SRAMにADCの連続変換データを転送する時には
以下のステップに従わなければなりません。
以下のステップに従わなければなりません。
また、SRAMからSPI等の周辺機器にデータを転送する時は
逆のステップで実行されます。
逆のステップで実行されます。
------------------------------------------------------------------------
1チャンネル辺りのサービスタイム(tS)を以下に記載します。
tS=tA + tACC + tSRAM
tS=tA + tACC + tSRAM
◎記号の意味
○tAは優先割り当てに必要な時間
tA = 2 AHB クロック
○tAは優先割り当てに必要な時間
tA = 2 AHB クロック
○tSRAMはSRAMの読み込み、もしくは書き込みアクセス時間
tSRAM = 1 AHBクロック(バスマトリックス要求割り当て)
+ 1 AHBクロック(シングル読み込み、もしくは書き込み操作)
ただし SRAMのread-after-write を行った場合は
2AHBクロック。
tSRAM = 1 AHBクロック(バスマトリックス要求割り当て)
+ 1 AHBクロック(シングル読み込み、もしくは書き込み操作)
ただし SRAMのread-after-write を行った場合は
2AHBクロック。
※read-after-write は
書き込み直後のデータを読み込んでデータが正しいか確認し訂正する機能。
------------------------------------------------------------------------
------------------------------------------------------------------------
●DMAの優先割り当てと遅延時間について
DMAが全てのDMAリクエストの優先順位(ソフトウェア、ハードウェア両方)を
比較した時、
DMAがアイドル状態か、3つのステップが1つのDMAチャンネルで完結している時
DMAが全てのDMAリクエストの優先順位(ソフトウェア、ハードウェア両方)を
比較した時、
DMAがアイドル状態か、3つのステップが1つのDMAチャンネルで完結している時
(他のDMAチャンネルを使っていない時)は最優先要求として、
DMAの動作は次のステップへ移行します。
すでにDMAチャンネルが使用中(ステップ2か3)だった場合は、
優先順位が何番目であろうとも新たなDMA要求は次のステップへ進めません。
DMAの動作は次のステップへ移行します。
すでにDMAチャンネルが使用中(ステップ2か3)だった場合は、
優先順位が何番目であろうとも新たなDMA要求は次のステップへ進めません。
------------------------------------------------------------------------
この場合の総サービスタイムは下記のように増加します。
この場合の総サービスタイムは下記のように増加します。
tTS = tA + tACC + tSRAM + tBF + tACK
◎記号の意味
○tBFはバスのフリータイム(CPUアクセスの為に、左のバスをフリーに(?))
tBF = 1 AHBクロック
○tACKはDMAのアクノリッジ転送時間(周辺機器とDMAのハンドシェイク動作を完了する為の時間)
tACK = 1 AHBクロック
○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クロック
という事でいいんですかね・・・
へっぽこ回路師さんにread-after-write である事を教えてもらいました。
PS:SRAM→SRAM間転送の時はAPBを経由しないからもっと早くなるのだろうか・・・
これは実際にテストしてみないと分からないですな・・・
分からない事が多すぎてオラわくわくしてきたぞ!