Bit-bandについてのメモ

出典: Wikimura

Bit-bandについて

Bit-bandとは、ワードを構成する32ビットに対し、ワード単位でアクセスすることができる機能です。 下図のように、Bit-band領域のワードの各ビットは、Bit-bandエイリアス領域内のワードに対応付けられています。

Image:Morita-090723-STM32-Bit-band.png

[3]によればCortex-M3では、内部RAMの最初の1MByteと、ペリフェラルの最初の1MByteがBit-band領域となっているそうです。 図は内部RAMのアドレスマップを表しています。

そして図に示すように、Bit-band領域のワードのビットは、LSBから順番にBit-bandエイリアス領域のワードへマップされています。

Bit-band領域の最初のワード(0x2000 0000)のLSB(0番ビット)は、Bit-bandエイリアス領域の最初のワード(0x2200 0000)へ対応付けられます。このビットがセットされていれば1として読みだされます。このビットをセットするときは1を書き込みます。 この辺は[1]に詳しく書いてあります。


Bit-band領域エイリアス領域基底をbaseAddr、ワードのBit-band領域基底からのオフセットをwordOffset、ビット番号(0-31)をbitNumberとすると、このビットのエイリアス領域のアドレスbitAddrは次式で表わされます。


\mathrm{bitAddr} = \mathrm{baseAddr} + \mathrm{wordOffset} \times 32 + \mathrm{bitNumber} \times 4

Bit-bandエイリアス領域へはワードだけでなく、ハーフワードやバイトアクセスも可能です。 ただし、アドレスはワードアクセスの時と同じにしなくてはならないそうです。

DMAからの読み書きについて

ビットバンドでシングルビットずつDMAできれば便利だと思ったのですが、どうもできないようです。 DMA転送を行おうとしたところ、転送が始まりませんでした。 転送エラーが発生してしまうようです。

エイリアスから通常の領域、その逆、エイリアス間全てで転送エラーが起きました。 Bit-band機能はCortexコアの機能で、DMAはSTM32の機能だからでしょうか。 バスマスタが必ずしもBit-bandに対応しているとは限らないのかもしれません。

とはいえ、この機能をDMAと併せて使いたい人は結構いるようなので、今後のリビジョンでは搭載されるかもしれません。

参考文献

  1. ARM Cortex-M3システム開発ガイド
個人用ツール