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

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

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

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

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

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

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


File Name                       掲載号   新ラズパイPico DACの製作 解説記事
--------------------------------------------------------------------------------------------
pico_1bit_dac_v2.uf2            2023/ 7  第5回 I2Sデータ受信対応④…ASRC処理改善
                                         
※１．上記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)の場合は，ボードの組み合わせによって動作モードが切り替わります．

    pico基板＋新基板単体              ：USB DACモード
    pico基板＋新基板＋Raspberry Pi 3/4：HAT DACモード(I2S通信)

    詳細は，インターフェース誌2023/3～7月号「新ラズパイ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履歴


(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.uf2が生成されます．
これを1．の手順で ラズパイ Pico DACに書き込んでください．


付録１：Pico_1bit_dac プロジェクトファイル構成
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CMakeLists.txt                  # CMake用ビルド環境設定 
pico_1bit_dac_v2                # プロジェクトフォルダ
    CMakeLists.txt                  # CMake用プロジェクトソースファイル/ターゲット/指示・命令ファイル
    audio_state.h                   # オーディオ処理用構造体・変数定義
    bsp.c,      bsp.h               # Board Specific Program ; Pico基板，DAC基板固有の設定値定義，プログラム類
    dsp.c,      dsp.h               # DSP処理(音量・オーバサンプリング・ASRC等)
    i2s_rx.c,   i2s_rx.h            # I2S受信処理
    i2s_rx.pio                      # I2S受信PIOアセンブラ、初期化関数
    main.c                          # 処理統括・メインループ
    pdm_output.c, pdm_output.h      # ΔΣ演算，PDM～PCM変換部
    pdm_output.pio                  # PDM出力PIOアセンブラ
    pio_pwm_?bit.pio                # PWM出力PIOアセンブラ、初期化関数 ?:PWM分解能
    simple_queue.c, simple_queue.h  # Core0/Core1間キュー(バッファ処理)
    usb_audio.c,usb_audio.h         # USB受信処理


付録２：新旧連載対応 uf2ファイル履歴
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
＜新連載 uf2ファイル＞
cq_raspi_pico/pico_1bit_dac_v2/uf2/
File Name                       掲載号   新ラズパイPico DACの製作 解説記事
--------------------------------------------------------------------------------------------
pico_1bit_dac_v2.uf2            2023/ 7  第5回 I2Sデータ受信対応④…ASRC処理改善
                                2023/ 6  第4回 I2Sデータ受信対応③…サンプリング・レート変換(ASRC)
                                2023/ 5  第3回 I2Sデータ受信対応②…設計＆評価編
/trial/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の製作
