やまちゃんのオーディオブログ

真空管アンプ、最近は資金調達のためのFX,MetaTrader4ネタもやっています。

FPGA ラズベリーパイB

ラズベリーパイのi2s外部クロック、その後7(2018年度版)

投稿日:2018年4月22日 更新日:

過去記事では、ラズパイ2のi2s方式での音楽再生について、ラズパイ側がクロックスレーブとなる形式(ラズパイの外部からクロックを供給する形式)で再生するためのi2sのドライバーの改造方法、FPGAを用いたクロックジェネレータ、ラズパイ側がクロックマスターとする形式でi2s方式で再生するためのラズパイとFPGAとの接続方法・再生方法、実際に再生する検証をしたことを説明してきたが、いよいよ、満を持して、ラズパイ側がクロックスレーブとなる形式でi2s方式の音楽再生をするために、ドライバーを実際に改造し、動作を検証していこうと思う。

<sdカードのバックアップ>
ここからは、一応、後戻りできない可能性もあるので、ラズパイのSDカードをバックアップとっておいたほうが良い。
sdカードを取り出して、pcへカードリーダを介して接続し、「win32disk imager」を使って、バックアップを行う。
空のファイル xxxx.imgを作成し、そのファイルを指定したら、readのボタンを押して、バックアップができる。詳しくは、ネットで検索してほしい。

<追加のGPIO>
ラズパイ側がクロックスレーブとなる形式の場合、クロックは外部から供給する必要があるところ、各ファイルのサンプリング周波数に応じて、外部クロックを切り替える必要があり、ラズパイから外部クロックへ通知する必要があることは、前回で説明したとおりである。そのために、GPIOを追加する。
コネクタの番号の対応関係は、例えば、以下の通り。

de0-soc Rapsberry-pi2 内容
33 33 gpio13,クロック系列切り替え
31 31 gpio6,分周比切り替え下位ビット
27 29 gpio5,分周比切り替え上位ビット

以上は、あくまで例に過ぎない。ラズパイ側のgpio番号の選択も、fpga側のgpioの選択も、ほかにも選択の余地がある。
これまで説明してきたラズパイのi2sドライバーは384kHzにも対応しているようなので、
ラズパイから与える2bitの周波数切り替えのビットの[0,0]に、384kHz/376.4kHzを与えることにし、
ほかの周波数は、番号を繰り上げた。具体的には以下の通り。

switch0 switch2 switch1 gpio4 gpio8 gpio12
0 0 0 12.228MHz 24.576MHz 384kHz
0 0 1 12.228MHz 12.228MHz 192kHz
0 1 0 12.228MHz 6.1442MHz 96kHz
0 1 1 12.228MHz 3.07MHz? 48kHz
1 0 0 12.228MHz 22.5792MHz 357.2kHz
1 0 1 11.291MHz 11.291MHz 176.4MHz
1 1 0 11.291MHz 5.643MHz 88.2kHz
1 1 1 11.291MHz 2.28226MHz 44.1kHz

これに伴い、ラズベリーパイのi2s外部クロック、その後3(2018年度版)で説明した、ラズパイの改造部分を修正した。

ここで、slide_switch1の名称を、今後の変更のため、わかりやすく、slide_switch1_gpio0-31へ変更すると、周波数の動作がおかしい。
確認すると、pin plannerに”!”マークが点灯していた。pin plannerは、注意が必要。

以上を反映した、ラズパイ側マスターとなるプロジェクトは以下の通り。相変わらず、タイミングが合わないという警告は直していない。

clock_select _ras_master2
ここでは、すでに紹介したclock_select_ras_masterのプロジェクトを上書きした。

qualtusⅡでは、経路を束ねたバスをout[3..0]のように定義でき、この場合には、4ビットのバスになる。
その一部については、入力側においても出力側においても、out[3..1]だったり、out[0]だったりを、指定したり(入力の場合)、取り出したり(出力の場合)することができる。ここでは、マスタークロックの信号をそのまま取り出してout[0]とし(入力)、これを分周したout[3..1]と合成して、4ビットの1つのバスに束ねた。信号を選択する「MUX」のところは、選択するビット列sel[](2バイト)の整数に直した値(0~3の値)が、そのまま、out[3..0]の引数になり、例えば、sel[]の整数値が2であれば、out[2]を選択して出力することになる。したがって、「MUX」は周波数を4段階に切り替えることができる。

-FPGA, ラズベリーパイB

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

ラズベリーパイモデルBの入手と設定1

ラズベリーパイモデルB(ラズパイ1)をアリエクスプレスから入手しました。 ラズベリーパイは、最近はやりのリナックスが動くマイコンチップで、リナックスマシンとして動作します。 私は、トランジスタ技術20 …

no image

ラズベリーパイのi2s外部クロック、ついに動作確認

やりました! とうとうやりました。 PLLではなく、外部クロックでラズベリーパイを鳴らせることができました! bckも外部クロックで駆動しています。 使ったクロックは、キョーセラの7050k(22.5 …

no image

ラズベリーパイのi2s外部クロック、その後6(2018年度版)

やっと動きました!!音が鳴りました!! まずは、カーネルを改造せず、ラズベリーパイから提供されるBCLK、LRCK、DATAに加え、de0-socのpllで作成したマスタークロックのxckで音を鳴らし …

no image

ラズベリーパイのi2s外部クロック、その後3-2(2018年度版)

11 カーネルソースの編集 編集すべきは、以下の3つ。 (1) rpi-dac.c  (snd_soc_rpi_dac) (2) bcm2835-i2s.c (snd_soc_bcm2835_i2s) …

no image

ラズベリーパイBのi2s外部クロックでサンプリング周波数に応じたgpio出力

ラズベリーパイB(モデル1)です。すいません。 もはや中国のalliexpressなどでしか入手できないかもしれません。 <追記:ラズベリーパイ0へ応用できるかもしれません。> 以前の記事の通り、ラズ …

[最近の記事]
2018年4月
1234567
891011121314
15161718192021
22232425262728
2930