2024.6.16
ラズパイPico DACファームウェア (Raspberry Pi Pico用)
ソフト名
  pico_1bit_dac_v2.20  2024.6.15
    1. SSD1306 OLED(128x32) による再生フォーマット表示対応
    2. ラズパイ本体熱によるUSB/HATモード誤判定対策
    3. Pico W 基板暫定サポート
  pico_1bit_dac_v2.10  2024.2.22
    I2S Controller/Target(Master/Slave)両対応版  (HAT DAC利用時)

概要
  本ソフトは CQ出版社Interface誌連載※で紹介している自作オーディオ
  USB/HAT DAC(D-Aコンバータ)，通称「ラズパイPico DAC基板」の
  Raspberry Pi Pico(RP2040)ファームウェアです。

  このUSB/HAT DAC基板は，いわゆる市販のオーディオDAC IC を搭載して
  いません．その代わり，RP2040のハードウェア機能をフル活用して
  オーバサンプリングやΔΣ変調をソフトウェア実装し，アナログLPF
  (ローパス・フィルタ)回路と組み合わせることでオーディオDACを実現
  しています．市販のDACに頼らず，ハードウェアとソフトウェアの創意
  工夫でDACそのものをDIYすることが，この連載のコンセプトです．

  ぜひ，新/旧PicoDAC基板をDIYして，RP2040マイコンが奏でる音楽を
  楽しんでみてください．詳細/技術/利用方法は誌上で紹介しています．

記事サポートURL
  https://interface.cqpub.co.jp/pico_dac/

動作確認基板
  Pico Board
    Raspberry Pi Pico
    Raspberry Pi Pico W (暫定対応 On Board LED未対応)
  DAC Board
    pico 1bit dac Rev1.x (USB DAC専用)
    pico diy dac V2.x    (I2S HAT DAC / USB DAC兼用)
  OLED Board
    Adafruit ADA-3527 PiOLED - Raspberry Pi用 128x32 モノクロOLEDモジュール
    PiOLED 0.91inch OLED 128x32 I2C IIC Blue OLED Display Module for RPI Raspberry Pi
    I2C SSD1306 白色I2C OLEDスクリーンドライバ0.91" Arduino用DC 128x32 

入力対応
  USB: 24bit 44.1/48/88.2/96kHz  
       16bit 44.1/48/88.2/96/176.4/192kHz
  I2S:
       ビット長: 16/24/32bit(Target時), 16/32bit(Controller時)
       fs : 44.1/48/88.2/96/176.4/192/352.8/384kHz

動作確認環境
  USB DAC:
    1. PC & Windows11
    2. iPhone SE2 & iOS 17.5.1
  I2S HAT DAC:
    1. RaspberryPi4B + Volumio 3.703 https://volumio.com/ ※
    2．RaspberryPi5  + Volumio 3.703 https://volumio.com/ ※
    3. RaspberryPi4B + moOde 8.3.9 https://moodeaudio.org/ 
    4. RaspberryPi5  + moOde 9.0.2 https://moodeaudio.org/ 
    I2S HAT DAC共通設定:
      a. I2S Target(Slave)動作: RPI-DAC, HiFiberryDAC+PRO
      b. I2S Controller(Master)動作: HifiberryDAC+PRO

　※注：2024/6/16現在
  Volumio3.569~3.703を I2S Controller(Master)モードで利用する場合、
  SDカード内の/boot/config.txtを以下のように書き換えてください。
  /boot/config.txt
    変更前
    dtoverlay=hifiberry-dacplus,slave
    ↓
    変更後(,slaveを削除)
    #dtoverlay=hifiberry-dacplus,slave
    dtoverlay=hifiberry-dacplus

　参考:
  https://community.volumio.com/t/3-616-i2s-dac-master-mode-no-longer-available-with-rpi3b-4b-hifiberry-dac-pro/65551/4

主要構成ファイルと概略仕様
pico_1bit_dac_v2/      # プロジェクトフォルダ
  # Core0/1共用:
    audio_state.h      # USB/I2S受信・再生パラメタ共有構造体定義
    simple_queue.c/h   # Core0->Core1 PCMデータキュー管理
    bsp.c/h            # ボード依存処理・GPIO定義・初期化
  # Core0用:
    main.c             # 初期化, USB/I2S処理ブランチ, USB/I2S共通再生処理
                       # 例: .fs,.bit_depth:入力サンプルレート、ビット長
      dsp.c/h          # 音量, 前段x1~x8オーバーサンプリング, ASRC
        dsp_asm.S      # 高速演算ライブラリ
      i2c_target.c/h   # I2C(スレーブ) I2S Controller/Target/Volume制御用
      i2s_rx.c/h/pio   # I2S 初期化, I2S Controller/Target受信処理
      usb_audio.c/h    # USB 初期化, USB 受信処理
      parameter.c/h    # パラメータ管理・DSP変数処理
      uart_command_interface.c/h   # UART初期化・CLI処理・各コマンド処理
      system_def.h     # システム定義(バージョン番号等)
      ssd1306_i2c.c/h  # OLED 管理/制御, Fontデータ
      i2c_dma.c/h      # OLED I2C(マスタ)/DMA制御
  # Core1用:
    pdm_output.c/h     # 後段x8オーバーサンプリング、ΔΣ、PWM出力
      pdm_output_asm.S # ΔΣ変調処理本体(アセンブラ記述)
      pdm_output.pio   # PIO 差動PWM出力処理(PIOASM記述)
  # その他:
    CMakeLists.txt     # CMake用ビルド環境設定
    changelog.txt      # 変更履歴
    readme.txt         # 本ファイル
