チカラの技術

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

DMAやフラッシュメモリ速度について

●DMAの転送速度
 メモリ間転送を使えばDMA速度の許す限り、SRAMSRAMの転送が可能。
 ただしサーキュラーモードは使えない為、
 転送完了割込み→DMAを無効化→DMA転送カウンタの再セット→DMA有効化
 と転送の度に設定する必要がある。
 
 また、GPIOのレジスタにDMA転送する場合
 本来、GPIOのポートレジスタは32bitアクセスのみが有効だが、
 APBバスのレジスタに8bitや16bitで書き込むと自動的に32bitワードに変換してくれるので
 DMAでポートの出力に転送するワードサイズは何でも良い。
 
 ついでに速度テストの為、SRAM→GPIOポートへDMAでトグルデータを送ってみたら
 トグル速度が実測7.14MHzだった。(しかもCPUによるメモリアクセスはしていない)
 え・・・・DMA転送速度ってラウンドロビンでCPUの半分の帯域使えるから
 最低でも36MHzじゃなかったっけ?
 GPIOだってPPなら50MHzだったはず・・・・・
 この遅さは動画データの出力に支障をきたすレベルじゃないか・・・
 
 ・・・・と思って色々調べてみたら、マイコン徹底入門
 でレビュー用に見せて頂いている本(未発売)に載ってました。
 曰く「DMA転送は1回につき8クロック掛かります。」との事。
 そ・・・・・そーなのかー!!
 リファレンスマニュアルには書いてなかったよー!
 しかも実測値的には10クロック位掛かってそうだけれども・・・
 CPUでの転送も考えねば。
 
●STM32の弱点
 他のCORTEX-M3マイコンに比べて一点だけ不利な点がSTM32にはある。
 それはフラッシュメモリの読出しが72MHzで2ウェイトと遅い事。
 ただし、62bit×2のプリフェッチバッファがフラッシュの命令を先読みする為、
 分岐命令が無ければ、フラッシュの2ウェイトは影響が少ないので
 注意してプログラムすれば大丈夫だと思います。
 
 ・・・という事を調べていたら
 STがノーウェイトのフラッシュを搭載した新製品を発表したとのニュースが。
 やるなぁST。
 早く手に入れられるように量産して下さいー。