過去記事では、ラズパイ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段階に切り替えることができる。