----------------------------------------------------------------------
　　　　Interface2024年 9月号
　　　　［新］ラズパイPicoDACの製作
　　　　ダウンロード・データ
　　　　IF2409DAC
　　　　Interface編集部
　　　　CQ出版(株)
　　　　公開：2024年7月25日
----------------------------------------------------------------------
====================================
ダウンロード・サービスご利用者各位
====================================
　毎度，小誌ご愛読を賜り，誠にありがとうございます．
　このたびはダウンロード・サービスをご利用いただき，誠にありがとうございます．
　筆者のご厚意により，本記事の関連データをこのアーカイブに収録しました．

================
概要
================
　このアーカイブには，表題の記事の中で作成したプログラム・ファイルやデータ・ファイルが収録されています．
　詳しくは該当記事を参照してください．
　アーカイブは，ZIP形式によって圧縮されています．

================
動作確認
================
　データ・ファイルは筆者の元で動作を確認済みです．

===========
著作権
===========
　収録したプログラム，データおよびドキュメントなどの著作権は，各著作権者（すなわち筆者）にあります．
　Copyright (C) 2024 geachlab
　Copyright (C) 2024 Yasushi Maruishi

============
免責
============
(1)プログラムやデータの使用により，使用者に損失が生じたとしても，著作権者とＣＱ出版(株)は，その責任を負いません．
(2)プログラムやデータにバグや欠陥があったとしても，著作権者とＣＱ出版(株)は，修正や改良の義務を負いません．

=================
試し方
=================
1. uf2ファイルの書き込みと音声出力確認方法

本稿の実験は，以下のビルド済み実行ファイル(uf2)を利用して手早く試すことができます．


File Name               掲載号   新ラズパイPico DACの製作 解説記事
--------------------------------------------------------------------------------------------
pico_1bit_dac_v2.20.uf2 2024/ 8  第11回 DMAでCPUリソース節約！再生フォーマットの可視化
                                         
※１．上記uf2ファイルは，新/旧基板(pico_diy_dac_v2 / pico_1bit_dac)共用です．
※２．新/旧連載に対応するuf2ファイルの履歴は，文末付録２に記載しています．


1. uf2ファイルの書き込みと音声出力確認方法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(0) Raspberry Pi Pico基板(以下Pico)と，ラズパイPico DAC基板を組み合わせた状態にします．
	
(1) Pico の BOOTSEL ボタンを押しながら，USB ケーブルで PCに接続し，BOOTSELボタンを離します．
    PC上では Pico が "RPI-RP2" という名称のドライブとして認識されます．

(2) PC上で "pico_1bit_dac_v2.uf2" ファイルを "RPI-RP2" ドライブにドラッグ＆ドロップします．
    書き込みが完了すると，Pico が自動的に再起動し，PC上に新しいオーディオ・デバイス
	"Pico Examples Sound Card" が認識されます．

(3) Windows11の場合，画面下タスクバー上のスピーカーアイコンにマウスカーソルを当てると，
    "スピーカー(Pico Examples Sound Card):***%"と表示されます．(***部分は0~100の音量値)
    基板のPhoneコネクタにはテスト用のイヤフォンやオーディオ機器などを接続します．
    スピーカーアイコンをクリックし，音量スライダを左右して確認音が出力されたら成功です．

(4) 旧基板(pico_1bit_dac)の場合は，そのまま USB DAC として利用可能です．
　　新基板(pico_diy_dac_v2)の場合は，ボードの組み合わせによって動作モードが切り替わります．

    a. pico基板＋新基板単体              ：USB DACモード
    b. pico基板＋新基板＋Raspberry Pi 3/4：HAT DACモード(I2S通信) -> (5)へ

(5) Raspberry Pi 3/4 にオーディオ再生ソフトウェアをインストールし、PCやスマホ等から
    設定・操作を行い、音源を再生します※注：


    動作確認済みソフトウェア と PC/スマホからのアクセスポイント
    M. moOde 9.0.2    https://moodeaudio.org/  http://moode.local
    V. Volumio 3.703  https://volumio.com/     http://volumio
      
    DAC設定:
    t. RPI-DAC (I2Sターゲット設定)
    c. Hifiberry DAC+ PRO (I2Sコントローラ動作)

    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

     Raspberry Pi 5でI2Sターゲット動作を行うと、fsが176.4kHz以上で再生ピッチが不正となる問題があります。
    詳細は，インターフェース誌2023/3～2024/6月号「新ラズパイPico DACの製作」記事を参照してください．




2. ビルド・開発環境
~~~~~~~~~~~~~~~~~~~
ご自身で本稿のPico DAC用ソフトウェアのビルドや，ソース改変を試されたい方は，こちらを参照してください．

以下(1)～(4)は，Raspberry Pi 3/4を用いたRaspberry Pi財団公式の開発環境構築と，Pico DAC用ソフトウェアのビルド手順です．
公開ソフトウェアは，本環境で動作確認をしています。
なお，Windows～Raspberry Pi間リモート開発環境や，Windows WSL(Windows Subsystem for Linux)上での
開発環境構築は，以下の書籍が詳しいので，併せて参照してください．
CQ出版社 ラズベリー・パイPico/Pico W攻略本 https://shop.cqpub.co.jp/hanbai/books/44/44771.html

(1) Raspberry Pi財団公式 C/C++ Pico SDK のセットアップ
公式マニュアル"Getting started with Raspberry Pi Pico※"を入手します．

※English  : https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf
※日本語   : https://datasheets.raspberrypi.com/pico/getting-started-with-pico-JP.pdf

マニュアルの"Chapter 1. Quick Pico Setup(第1章. Pico のクイックセットアップ)" に従い，
Raspberry Pi 3/4に Pico SDKをセットアップします．最低限必要な手順は以下4コマンドです．
環境にもよりますが，3コマンド目の pico_setup.sh の実行には30分～1時間程度必要です．

$ wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
$ chmod +x pico_setup.sh
$ ./pico_setup.sh
$ sudo reboot


(2) SDK USBライブラリのバグ修正

ソフトウェアのビルド前に，Pico SDKのUSBライブラリのバグ修正を行います．
(Interface2022年4月号p137 連載第5回 ハイレゾ対応②参照)
下記ファイルの該当箇所(90行目付近)のメンバ変数 data_len，data_max型定義を
uint8_t から uint16_tに修正してください．これを行うことで、USBのハイレゾ
音声を正しく再生出来るようになります．

/pico/pico-extras/src/rp2_common/usb_device/include/pico/usb_device.h
    
    struct usb_buffer {
        uint8_t *data;
        uint16_t data_len; // uint8_t -> uint16_t
        uint16_t data_max; // uint8_t -> uint16_t
       // then...
        bool valid; // aka user owned
    };

(3) 開発環境へのソースコード一式の展開

本 readme.txt と同一フォルダ内にある cq_raspi_pico.zip がソースコード一式の圧縮ファイルです．
これを pico フォルダ上にコピーして展開します．

$ cd ~/pico
$ unzip cq_raspi_pico.zip       # ダウンロードサービスで入手したファイルを展開

ファイル展開後の主要なフォルダ構造は以下となります．
pico_1bit_dac_v2フォルダ内のプロジェクトファイル概要については付録１を参照願います．

pico                            # 公式SDKフォルダ
+-- cq_raspi_pico               # Pico記事用フォルダ
    +-- pico_1bit_dac_v2        # 新Pico DAC記事用ソースコード本体
        +-- lufa                # USBライブラリ
        +-- uf2                 # 新旧Pico DAC連載 uf2履歴
            +-- season-1        # 旧Pico DAC連載 uf2履歴
            +-- season-2        # 新Pico DAC連載 uf2履歴


(4) コマンドラインでのビルド方法例

次の手順でビルドを実行します。この手順でコンパイラの最適化がReleaseビルドになります．
Debugビルドでは処理が間に合わないため，Debugオプションは指定しないでください．

$ cd cq_raspi_pico              # ファイル展開済みフォルダへ移動
$ mkdir -p build && cd build    # buildフォルダを作成し移動
$ cmake -DPICO_COPY_TO_RAM=1 .. # ビルド用環境設定 Pico の RAM 上で実行されるようにする
$ cd pico_1bit_dac_v2           # ビルドフォルダに移動(旧連載用ファイルの場合は _v2部分を _HR2 等に変更する)
$ make -j4                      # コア4並列でコンパイル

ビルドが正常に終了すると，/pico/cq_raspi_pico/build/pico_1bit_dac_v2.01.uf2が生成されます．
これを1．の手順で ラズパイ Pico DACに書き込んでください．


付録１：Pico_1bit_dac プロジェクトファイル構成
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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     # システム定義(バージョン番号等)
  # Core1用:
    pdm_output.c/h     # 後段x8オーバーサンプリング、ΔΣ、PWM出力
      pdm_output_asm.S # ΔΣ変調処理本体(アセンブラ記述)
      pdm_output.pio   # PIO 差動PWM出力処理(PIOASM記述)
  # その他:
    CMakeLists.txt     # CMake用ビルド環境設定
    changelog.txt      # 変更履歴
    readme.txt         # 解説


付録２：新旧連載対応 uf2ファイル履歴
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
＜新連載 uf2ファイル＞
cq_raspi_pico/pico_1bit_dac_v2/uf2/season-2/
File Name                       掲載号   新ラズパイPico DACの製作 解説記事
--------------------------------------------------------------------------------------------
/IF2408/pico_1bit_dac_v2.20.uf2 2024/ 8  第11回 DMAでCPUリソース節約！再生フォーマットの可視化
/IF2404/pico_1bit_dac_v2.10.uf2 2024/ 4  第8回 I2Sコントローラ対応 ラズパイ音源のビット・パーフェクト再生
/IF2311/pico_1bit_dac_v2.uf2    2023/11  第7回 パラメータ調整機能の実装②
                                               オーバサンプリング補間方式/ΔΣ次数/量子化ビット数の可変化
/IF2307/pico_1bit_dac_v2.uf2    2023/ 7  第5回 I2Sデータ受信対応④…ASRC処理改善
                                2023/ 6  第4回 I2Sデータ受信対応③…サンプリング・レート変換(ASRC)
                                2023/ 5  第3回 I2Sデータ受信対応②…設計＆評価編
/IF2304/pico_1bit_dac_v2_usb_i2s_trial.uf2
                                2023/ 4  第2回 I2Sデータ受信対応①…検討編 I2S対応試作版

＜旧連載 uf2ファイル＞
cq_raspi_pico/pico_1bit_dac_v2/uf2/season-1/
File Name                       掲載号   連載 ラズパイPico DAC 解説記事
--------------------------------------------------------------------------------------------
/IF2212/pico_1bit_dac_HR2.uf2   2023/ 1  第9回 ひずみ率0.002%! ΔΣ処理の高次化
                                2022/12  第8回 オーバサンプリング処理の高精度化
                                2022/ 9  第7回 分解能16倍＆処理時間1/4！音量処理の最適化
/IF2204/pico_1bit_dac_HR.uf2    2022/ 4  第5回 ハイレゾ対応②…ソフトウェア＆ハードウェアの実装・改造
/IF2112/pico_1bit_dac_NR.uf2    2021/12  第2回 ノイズ低減編…3次ΔΣ変調＆出力4ビット化
/IF2111/pico_1bit_dac_4844.uf2  2021/11  第1回 44.1kHz/48kHz両対応! サンプリング・レート切り替え機能の実装
/IF2108/pico_1bit_dac.uf2       2021/ 8  初出  48kHz音源を1チップで再生! USBオーディオDACの製作
