RaspberryPi Pico USB-DDC化? I2S出力調査
ラズパイ全般が売切れで購入しにくい状況が続いていますが、昨年登場したRaspberryPi Picoもオーディオ系の遊びに使えそうな雰囲気を感じましたのでちょっとテストしてみました。
Picoは潤沢に在庫があるようで、今現在でも手に入ります。というか不人気??
公式のpico基板ではなく、サイズが小さいSeeed社のXIAO RP2040という基板を使ってみました。秋月電子で690円です。公式のpicoはIOを沢山使う場合には良いと思いますが、I2Sなどシリアル通信を使うだけならIO5~10本あれば十分です。
ラズパイ公式のgithubには、picoをUSBオーディオとして認識させるソフトウェアが公開されています。16bitのI2S出力で44.1kHzと48kHzに対応していることになっています。
I2S-DACとして、SabreberryDAC ZEROを使ってテストしてみました。この基板はMCLK無しで44.1kHz~384kHzまでの信号を受け付けますのでお手軽です。
ソフトウェアは以下の構成で、すべて揃えてからusb_sound_cardをビルドします。(Examplesは入れなくても良いかもしれません)
ビルドツールSDK
https://github.com/raspberrypi/pico-sdk
Examples
https://github.com/raspberrypi/pico-examples
I2Sなどオーディオ系のソースコード
https://github.com/raspberrypi/pico-extras
(pico-extras/src/rp2_common/pico_audio_i2s)と(pico-extras/src/common/pico_audio)
その他、SPDIFもあるみたい。そのうちテストしてみようかな。。。
USB-AUDIOのソースコード
https://github.com/raspberrypi/pico-playground
(pico-playground/apps/usb_sound_card)
usb_sound_card.c のピンアサインを変えてXIAO RP2040でI2Sを出せるようにしました。
struct audio_i2s_config config = {
//.data_pin = PICO_AUDIO_I2S_DATA_PIN,
//.clock_pin_base = PICO_AUDIO_I2S_CLOCK_PIN_BASE,
.data_pin = 26,
.clock_pin_base = 27,
.dma_channel = 0,
.pio_sm = 0,
};
ちょっと無理やり感がありますね。とりあえずのテストです。
DATAをGPIO 26
BCKをGPIO 27
LRCKをGPIO 28
というアサインです。
side_setという特殊な命令を使ってBCKとLRCKを制御しているため、この2つは連続したGPIO配置になります。
HAT基板側はこんなアサインで接続します。5VとGNDも忘れずに。
BCK -> PCM_CLK
LRCK -> PCM_FS
DATA -> PCM_OUT
ビルドする環境を構築するのが面倒なので、コンパイルしたデータを置いておきます。(私はVirtualBOX内のubuntuでコンパイルしました)
XIAO RP2040の「BOOT-SW」を押しながらPCにUSBを接続するとフォルダが見えますので、そこにドラッグ&ドロップで入れるだけです。
USBの接続はUAC1.0ですのでWindowsでもmacでも繋がると思います。
ただ、
何となく時々音が途切れているような気もしますので、解析・改良の余地はありそうです。
昨年のインターフェース誌に掲載されたこの基板も秋月電子で売っていたため購入してみました。素朴な音で懐かしさを感じます。
音よりも技術的な内容の方に興味を惹かれます。
こちらもUAC1.0仕様。
たしかWinodws10の標準ドライバのUAC1.0では、asynchronous&フィードバックが働かなかったような気がするのですが。。。
インターフェース誌2022年4月号では、picoで96kHz24bitハイレゾ化したUSB-DACを公開しているので、それなりに可能性はあるかと思います。安くできるという部分で、お手軽さも魅力ですね。
秋月で売っているR2R DACにもI2S部分を改造することで適応できそうな気もしています。
I2Sではなく、昔、SONYフォーマットと言われていたMSBファースト後詰め16bitです。
というか、pio勉強中にあれこれやっていて、I2S/MSBファースト後詰め両対応できました。 近日中に公開いたします。
参考にしたサイト様
Raspberry Pi Picoの開発環境構築 (Ubuntu PC)
https://docs.microsoft.com/ja-jp/windows-hardware/drivers/audio/usb-2-0-audio-drivers
参考になる書籍
« efuさんのWaveSpectraが公開停止していた | トップページ | RaspberryPi Pico USB-DDC化 I2SとMSBファースト後詰め出力対応 »
「PCオーディオ」カテゴリの記事
- RaspberryPi Pico USB-DDC化 I2SとMSBファースト後詰め出力対応(2022.03.21)
- RaspberryPi Pico USB-DDC化? I2S出力調査(2022.03.20)
- efuさんのWaveSpectraが公開停止していた(2022.03.09)
- ラズパイをUSB-DACとしてスマホに認識させる方法 gadget mode(USB Audio Class 2.0)(2020.10.16)
- PCに組み込むヘッドホンアンプ Sound RABBIT & 900万PVありがとう企画(2020.10.10)
「Raspberry Pi pico」カテゴリの記事
- RPiZeroRP2040 USB-DDC基板試作(2024.09.01)
- ラズパイPico USB-DDC Feedbackを機能するように実装(3)(2024.08.24)
- ラズパイPico USB-DDC Feedbackを機能するように実装(2)(2024.08.23)
- ラズパイPico USB-DDC Feedbackを機能するように実装(1)(2024.08.22)
- Raspberry Pi Pico 2 発表されました。(2024.08.09)
コメント
« efuさんのWaveSpectraが公開停止していた | トップページ | RaspberryPi Pico USB-DDC化 I2SとMSBファースト後詰め出力対応 »
ちょっと気になったのですが、これI2S側の信号は1bit消えてませんか?
投稿: d | 2022年3月22日 (火) 12時47分
d さん
消えてませんよ。大丈夫です。
投稿: たかじん | 2022年3月22日 (火) 23時02分
そうなんですか、失礼しました。てっきりI2Sの信号は先頭に空のデータが送られて、16bitだと17クロック分以上あるものだと思っていました。I2Sでは先頭のデータが最後にLSBとして読みだされるんですね。
投稿: d | 2022年3月23日 (水) 21時20分
d さん
32fsのBCKで16bitデータを送る時は、空きスロットがなくなります。 前詰めでも後詰めでも違いがないフォーマットに見えますね。
投稿: たかじん | 2022年3月26日 (土) 16時22分