Raspberry Pi4BからI2S出力 その2 ― 2025年09月12日 09時42分20秒
これからの話の流れをつかみやすくするために、まず最初に目指そうとしているシステムの大まかな概念を示しておこう。
左側にあるRaspberryには、ヘッドレスAudirvanaが載っていて、ここがいわゆる音楽サーバーとなる。音楽信号はGPIOからI2S信号となって右隣のブロックに渡される。
このブロックには大きく四つの機能が搭載されている。
(1)Raspberryのデジタルノイズを遮断するためにアイソレータでグランドを分離する機能があって、信号線はまずそこを通る。
(2)クロック発生回路
(3)クッロクを所望の周波数に逓減する分周回路
(4)SCK, WS信号のリクロック回路
真ん中のブロックを経由した各信号線は、右にあるI2StoPCM COnverter基板に渡される。
この基板は、IanCANADAさんから購入したもので、TDA1541Aの規格に合うように音楽信号の左右分離等の変換、リクロック、を行う。
詳細はまた別の記事に書くことになる。
このブロックには大きく四つの機能が搭載されている。
(1)Raspberryのデジタルノイズを遮断するためにアイソレータでグランドを分離する機能があって、信号線はまずそこを通る。
(2)クロック発生回路
(3)クッロクを所望の周波数に逓減する分周回路
(4)SCK, WS信号のリクロック回路
真ん中のブロックを経由した各信号線は、右にあるI2StoPCM COnverter基板に渡される。
この基板は、IanCANADAさんから購入したもので、TDA1541Aの規格に合うように音楽信号の左右分離等の変換、リクロック、を行う。
詳細はまた別の記事に書くことになる。
Raspberry Pi4BからI2S出力 その3 ― 2025年09月12日 19時43分09秒
Raspberry PiにI2S経由でDACを接続することは、すでに一般化していて、多数のDACメーカーから対応するドライバーが提供され、Raspberry OSにはそれらのドライバーが最初から含まれている。
なので、Raspberry対応のDACを選択する限り、ユーザーはなんの苦労もなくI2Sの恩恵を受けることができる。
ところが今回はそれらを使うことができない。理由は二つある。
(1)TDA1541Aという特殊性
今回使いたいのは、TDA1541Aという今や化石のようなDACである。これまで旭化成以外の有名なDACをいろいろ試したことがあるのだが、結局私にとってこのDACが好ましく思われた、というのがその理由である。
これに対応するドライバーなど公式にあるはずもなく、自分で作るか、先駆者達がすでに作ったものを拝借するかという二択になる。その話はまた後で語ることになるだろう。
(2)クロックをDAC側から供給するマスター・モードで動かしたい
最も簡易な方法は、DACで必要なクロック信号をRaspberry Pi側から供給してもらうことである。そうすれば、DAC以外の周辺回路はいらなくなるので安価に仕上げることができる。
しかしこれには大きな問題があって、推測されるとおりRaspberry Piのクロックは非常に精度が悪く、真面目なオーディオ用途にはまったく使うことができない。
そこでどうしても外部から精度の高いクロックを供給したくなる。
私は当初、I2S規格ではそのような要求を実現することはできないのではと思い込んでいたが、調べてみると問題ない。Raspberry用に外部クロックを積んだDACも多数売られている。
ブロック概念図の丸で囲んだところがそれで、BCK, FS信号を外部にあるクロック発振回路からRaspberry Pi側に供給するようになっている。Raspberry Piは、このクロック信号を使って音声信号を出力する。DAC側からクロックを供給する方法をMaster Modeを呼ぶ。
ということで、今回のプロジェクトの成否はこのドライバーがうまく動くかどうかにかかっている、と目論みが立つ。
なので、Raspberry対応のDACを選択する限り、ユーザーはなんの苦労もなくI2Sの恩恵を受けることができる。
ところが今回はそれらを使うことができない。理由は二つある。
(1)TDA1541Aという特殊性
今回使いたいのは、TDA1541Aという今や化石のようなDACである。これまで旭化成以外の有名なDACをいろいろ試したことがあるのだが、結局私にとってこのDACが好ましく思われた、というのがその理由である。
これに対応するドライバーなど公式にあるはずもなく、自分で作るか、先駆者達がすでに作ったものを拝借するかという二択になる。その話はまた後で語ることになるだろう。
(2)クロックをDAC側から供給するマスター・モードで動かしたい
最も簡易な方法は、DACで必要なクロック信号をRaspberry Pi側から供給してもらうことである。そうすれば、DAC以外の周辺回路はいらなくなるので安価に仕上げることができる。
しかしこれには大きな問題があって、推測されるとおりRaspberry Piのクロックは非常に精度が悪く、真面目なオーディオ用途にはまったく使うことができない。
そこでどうしても外部から精度の高いクロックを供給したくなる。
私は当初、I2S規格ではそのような要求を実現することはできないのではと思い込んでいたが、調べてみると問題ない。Raspberry用に外部クロックを積んだDACも多数売られている。
ブロック概念図の丸で囲んだところがそれで、BCK, FS信号を外部にあるクロック発振回路からRaspberry Pi側に供給するようになっている。Raspberry Piは、このクロック信号を使って音声信号を出力する。DAC側からクロックを供給する方法をMaster Modeを呼ぶ。
ということで、今回のプロジェクトの成否はこのドライバーがうまく動くかどうかにかかっている、と目論みが立つ。
Raspberry Pi4BからI2S出力 その4 ― 2025年09月12日 20時59分57秒
デバイスドライバの勉強
ということでTDA1541Aマスターモードのデバイスドライバについて。
山に登るためには基礎が肝心。Linuxカーネルから勉強しなければということで、「私はどのようにしてLinuxカーネルを学んだか Device Tree編」をKindle版で買って読んでみた。
これはこれでゼロからデバイスドライバを書こうという人には役に立つであろう。私にも、デバイスドライバとは何かというイメージをつかむためには有益であったが、ちょっと詳しすぎる。20年前なら学ぶ意欲をかき立てられただろうに、こちらは時間がない。
そこで次にネットを検索してみると、いくつかヒットする。しかし10年以上も前の情報である。Linuxの世界も日進月歩で、そのまま使うことができない。
その中でも一番に目星をつけたのが、以下のサイト。
Raspberry Piで、DACチップ無しでI2Sを出力する
Raspberry Pi 上に必要なファイルをダウンロードし、カーネルのビルド環境を整え、書かれている従ってファイルを書き、ビルドしてみる。ところが最後の最後でどうしでもエラーが出てしまう。私の知恵では二進も三進もいかず、断念。
そのほかにもいろいろなサイトを参考に挑戦したが、すべて敗退。
途中経過を省略して、最後にたどり着いたのがMKSoundsさんが公開している以下のリポジトリ。
thub.com/MKSounds/ADAU1701-I2S-Audio-Driver-for-Raspberry-Pi">ADAU1701-I2S-Audio-Driver-for-Raspberry-Pi
詳細はまた次のコラムで。
ということでTDA1541Aマスターモードのデバイスドライバについて。
山に登るためには基礎が肝心。Linuxカーネルから勉強しなければということで、「私はどのようにしてLinuxカーネルを学んだか Device Tree編」をKindle版で買って読んでみた。
これはこれでゼロからデバイスドライバを書こうという人には役に立つであろう。私にも、デバイスドライバとは何かというイメージをつかむためには有益であったが、ちょっと詳しすぎる。20年前なら学ぶ意欲をかき立てられただろうに、こちらは時間がない。
そこで次にネットを検索してみると、いくつかヒットする。しかし10年以上も前の情報である。Linuxの世界も日進月歩で、そのまま使うことができない。
その中でも一番に目星をつけたのが、以下のサイト。
Raspberry Piで、DACチップ無しでI2Sを出力する
Raspberry Pi 上に必要なファイルをダウンロードし、カーネルのビルド環境を整え、書かれている従ってファイルを書き、ビルドしてみる。ところが最後の最後でどうしでもエラーが出てしまう。私の知恵では二進も三進もいかず、断念。
そのほかにもいろいろなサイトを参考に挑戦したが、すべて敗退。
途中経過を省略して、最後にたどり着いたのがMKSoundsさんが公開している以下のリポジトリ。
thub.com/MKSounds/ADAU1701-I2S-Audio-Driver-for-Raspberry-Pi">ADAU1701-I2S-Audio-Driver-for-Raspberry-Pi
詳細はまた次のコラムで。


最近のコメント