3.3 V ノイズジェネレータ (11)

FM 音源プログラムを「STBee」および「STBee Mini」に移植するにあたり、STM32F103xx の最新のリファレンス・マニュアル (RM0008 rev.11) を見ていたら、m-系列によるホワイトノイズ作成に使える内蔵モジュールが3つほどあることが分かりました。

  • 12 ビット DAC モジュールでのノイズ波形発生機能
  • 32 ビット CRC 計算モジュール
  • SPI モジュールの CRC 計算機能

「Performance line」に属する「STM32F103xx」系列のチップでは、DAC モジュールは Flash 容量が 256 Kバイト以上の「High-density」(以上) のデバイス だけに実装されています。
ボードで言うと、「STBee」には含まれていますが、「Medium-density」デバイスを使っている「STBee Mini」および「CQ-STARM」には含まれていません。
これは、もともと DAC モジュールに 12 ビット LFSR (Linear Feedback Shift Register) による m-系列発生回路が組み込まれており、コントロールレジスタのビットをセットするだけで DAC 出力をホワイトノイズ源として使うことができます。
生成多項式は 5 項のものが使われており、変更はできません。
12 ビットなので、48 kHz サンプリングで使うと周期は約 85 ms、周波数に直すと約 12 Hz となり、これ以下の周波数の成分は含まれません。
手持ちの CQ-STARM 基板には存在していないモジュールなので、ハード的に試してみるわけには行きませんが、代わりとして、ソフトウェアで同じ生成多項式を使って m-系列を発生させ、外部 DAC に出力してスペクトラムを観察してみたいと思っています。
CRC 計算モジュール」は、最新の rev.11 のリファレンス・マニュアルには記載されていますが、CQ-STARM 基板が DWM 誌の付録として付いてきた当時の rev.1 のリファレンス・マニュアルには記載されていません。
ただし、DAC とは違って、rev.11 のマニュアルでは「Medium-density」デバイスでは使えないという記載はありません。
また、「Medium-density」デバイスのデータシートの改定履歴を見ると、CRC モジュールの記述は

  • rev.5 (14-Mar-2008) から登場し、
  • rev.6 (21-Mar-2008) で削除され、
  • rev.7 (22-May-2008) で復活

しています。
というわけで、 CRC 計算モジュールのハードウェア自体は最初からシリコンに含まれており、マニュアルの記述だけが出たり消えたりしているものと考え、CQ-STRAM 基板で試してみましたが、CRC モジュールは存在していて、正しく機能することが確認できました。
32 ビット CRC の生成多項式イーサネットで使われている「CRC-32」で、変更はできません。
CRC データレジスタに 32 ビットデータを書き込むと、AHB クロック 4 サイクルで 32 ビット分の計算を完了し、同じデータレジスタから結果を読み出すことができます。
動作完了を示すフラグなどはなく、データを書き込んだ命令を、CRC の計算完了までストールすることによって同期をとります。
コントロールレジスタのリセットビットに 1 を書き込むと CRC レジスタが「0xFFFFFFFF」にプリセットされるので、あとはデータレジスタに「0x00000000」を書き込み、データレジスタを読み出すことを繰り返せば m-系列が得られます。
ただし、CRC 計算は 32 ビット分まとめて行われるので、生成多項式から得られる本来の m-系列を 32 個ごとに「サンプリング」した形になります。
m-系列の周期は 2M-1 の形となり、必ず奇数であり、32 とは互いに素なので、32 ごとにサンプリングしても、その周期は元の系列の周期と変わりありません。 しかし、当然、時系列としては異なるものとなります。
生成多項式の項数は奇数であり、周期は 232-1 = 4294967295 となるはずですが、全周期を確認すると時間がかかりすぎるので、最初の数十個だけをプログラムでの計算結果と照合して確認しました。
SPI モジュールの CRC 計算機能については rev.1 のマニュアルから記載されており、もちろん「STBee Mini」でも「CQ-STARM」でも使えます。
これについては次回の記事に回したいと思います。