Si5351A Linuxドライバの解析メモ

ドライバの実装仕様 Linux KernelのCommon Clk Frameworkに則り実装 Si5351シリーズに対応。最大8ch出力できる。 今回はSi5351A 10-MSOP品を制御対象としているの3chでの使い方に絞ってます 8ch出力時のclkout6/7のDivider制約にも対応していそう dtsでクロ…

Si5351Aを使って簡易I2Sマスタを作ってみる

外部クロックがらみでいろいろ調べていたところ、秋月電子通商でSilicon Labsの3CHクロックジェネレータSi5351Aモジュールを見つけたので、これでI2Sマスタを作ってみた。 クロック出力をちょうど3系統持っているので、MCLK/BCLK/LRCLKの3種を生成してみる。…

簡易外部クロック化について 補足

必要なスペック DAI(I2Sコントローラ)側 高いBCLK入力に対応可能であること NEO2(H5)では98.304MHzでも動いてた。ただし、12.288MHzより高い周波数はスペック範囲外となる。 RPi Zero(BCM2835)では24.576MHzまで確認。それ以上は未確認。 CBM_CFS動作が可能…

AK449Xの簡易外部クロック化について

旭化成のDAC AK449Xシリーズにて、複雑なクロック生成回路ではなく単純な発振器を用いて外部クロック化する手法の紹介。 前回(BCLK/LRCLK出力しかないRaspberry Piで旭化成のDAC IC(AK449xシリーズ)を鳴らす実験 - _tkz_ memo])は外部回路追加無しでしたが…

ALSA SoCドライバメモ No.004 外部クロック関連

外部クロックを使う場合 外部クロックを使うときのクロック制御はDAI LINKに組み込むか、CODECに組み込むか。どちらでも良さそう。 PCM5122のGPIOとDividerを利用しているHiFiBerry DAC+PROではdai link (sound/soc/bcm/hifiberry-dacpro.c)でやっている PCM…

ALSA SoCドライバメモ No.003 callbackシーケンス

ALSA SoCドライバ開発でいちいちgrepするのが面倒な情報をメモしておく Callbackシーケンスのメモ 制御でよく使いそうなhw_paramsとshutdownのみ ポイントは開始時はdai_link->codecs->cpudai。終了時はcpudai->codecs->dai_linkとなること codecsが複数ある…

ALSA SoCドライバメモ No.002 private data

ALSA SoCドライバ開発でいちいちgrepするのが面倒な情報をメモしておく それぞれのドライバでprivate dataをどこに置くのか? dai link snd_soc_cardが自分の持ち物 設定方法 (probe時にsnd_soc_register_card前にやる) snd_soc_card_set_drvdata(&hoge_card…

ALSA SoCドライバメモ No.001 ドライバ構成

ALSA SoCドライバの構成 ファイルの説明 DAI LINKドライバ 例: sound/soc/bcm/hifiberry-dac.c 関連するドライバをまとめ(dai link)て登録(snd_soc_register_card)するドライバ hifiberry-dac.cではほとんど制御は行わず、登録のみを行っている。 hifiberry-…

Raspberry Pi ZeroのI2S DACとポップノイズの関係 その3 MUTE制御の動き

概要 NosPiDAC Zeroなどで音楽を楽しんでいるときに気になるポップノイズについて調べたこと・やったことをメモ。 ちょっと時間が空いてしまいましたが、その3ではALSA SoCのCallbackを追っかけたメモを置いておきます。 調査 まずはsoc_pcm階層からのコー…

Volumio2のREST APIにgetqueueを追加する方法

REST APIでは再生キューのリストが取れないため調査したところ、volumio2に数行のコード追加で取得できるように改造可能とわかったのでその方法をメモ。 内部的には再生キューを生成するWeb Socket用のコードがすでに存在するため、REST APIのコードにgetque…

BCLK/LRCLK出力しかないRaspberry Piで旭化成のDAC IC(AK449xシリーズ)を鳴らす実験

Raspberry PiでDAI/ASRC/CPLDなどのクロック生成周辺回路を用いず、旭化成のDAC AK449Xシリーズを使用する方法についてメモ。 Raspberry PiのDACにAK449xシリーズの採用が少ない原因のひとつとして、AK449xの要求するMCLKをRaspberry Piから供給できない点が…

Linux向けAK449x Codec Driverの紹介

旭化成エレクトロニクス製 AK4490/AK4495/AK4497/AK4493向けLinux Driverの紹介です。NanoPi NEO2でAK449xシリーズを鳴らすために作成しました。 ALSA SoC Codecドライバとして実装しています。NanoPi NEO2/Raspberry Pi Zeroで動作確認済み。そのほかのSBC…

Raspberry Pi ZeroのI2Sオーディオドライバに非Codecドライバを追加登録する方法

概要 ALSA SoCドライバで電子ボリュームを利用する方法を調べてみた。 今回は電子ボリューム内蔵ヘッドフォンアンプIC TPA6130A2ドライバをhifiberry-dacドライバに登録してみる。 仕組み TPA6130A2のドライバはsound/soc/codecs/tpa6130a2.cを使用する TPA6…

NanoPi NEO2用Volumio2の機能切り替え(dtb差し替え)について

大まかな仕組み NEO2用Volumio2に採用しているLinuxカーネルはdevice treeという方法でドライバのパラメータなどを変更し実際の動作を切り替えています device treeの実行時バイナリはdtbとdtboの2種あります。 NanoPi NEO2の場合、現時点ではdtbのみを使用…

Raspberry Pi ZeroのI2S DACとポップノイズの関係 その2 まっとうにMUTE制御

概要 NosPiDAC Zeroなどで音楽を楽しんでいるときに気になるポップノイズについて調べたこと・やったことをメモ。 その2はCodecドライバを修正し、外部MUTE制御との連動を試してみます。 外部MUTE制御用のサンプルコード付。 MUTE機能つきのHPA IC(MAX9722…

Raspberry Pi ZeroでRJフォーマットDACを鳴らす方法のメモ

概要 TDA1545AやTDA1543AなどRJフォーマットを採用しているDACをRaspberry Piで鳴らす方法のメモです。 NosPiDACでTDA1545Aを鳴らしたかったので、調査・検証してみました。 仕組み 通常ALSAのSoCドライバではdai linkを設定するdriverでPCMフォーマットを設…

Raspberry Pi ZeroのI2S DACとポップノイズの関係 その1 力技でポップノイズを抑制

概要 NosPiDAC Zeroなどで音楽を楽しんでいるときに気になるポップノイズについて調べたこと・やったことをメモ。 ポップノイズは再生・停止・曲間で発生します。 発生メカニズムが確定では無いですが、RPi ZeroのI2SドライバがI2Sのクロックを止めることか…

NanoPi Neo2のビルド環境構築(公式サイトからToolchain取得)

概要 過去記事でNEO2用のビルド環境構築を解説したけど、MediafireからToolchainを持ってきたりでちょっと怪しい感じだったので、Linaroから直接Toolchainをとってきてビルドする手順を確認したのでメモします。 Ubuntu 18.04LTS AMD64環境で確認しました。3…

moode audioのカーネルをクロスビルドする手順メモ

moode audioで使用しているRaspbianのカーネルイメージをクロスビルドするにあたっていろいろハマったのでメモして置きます。 Ubuntu 18.04LTS AMD64環境で確認 ターゲットはRaspberry Pi Zero用。RPi3とか64bitの奴はツールチェインやビルドオプションが変…

NanoPi Neo2用 Volumio2

NanoPi Neo2 Volumio2 release NanoPi Neo2 I2S Audio Kernelを適用したVolumio2です。 バージョンはv2.413を採用しています。 2018/1012追記 ロット変更なのか、ブートローダを更新しないと起動しないNEO2があるようです。 もし、動作しないようであれば、…

NanoPi Neo2 I2S Audio Kernel alpha1 release

これは何? NanoPi Neo2用のカーネルにI2Sオーディオ関連のパッチを当てたものになります。 カーネルのみのリリースとなります。音を出すにはSoXやmpdなどを自力で導入する必要があります。 手軽に音を出したい方は、本カーネルを適用したVolumio2を作成予定…

NanoPiNEO2 HiFiBerry DAC+対応 β版

HiFiBerry DAC+ PRO対応のβ版リリース HiFiBerry DAC+ PROに対応しました。 twitterには書いてましたがこっちにも簡単にまとめます。 HiFiBerry DAC+ PROにて動作確認しています。クローンもたぶん動くはず。 HiFiBerry DAC+(外部クロックなし)は未検証で…

Amazonマーケットプレイスで購入した商品が不良品だった場合の対処方法 メモ

Amazonマーケットプレイス登録業者が商品を用意しAmazonが配送するスタイルの注文で、届いた商品が不良品だったので交換を依頼しました。 手順がとても分かりにくかったのでメモしておきます。 販売店のページを表示 まずは購入した商品のページを開く 「こ…

NanoPiNEO2 HiFiBerry DAC+対応 調査メモその1

HiFiBerry DACとはなんぞ? RaspberryPi向けの高音質DAC いくつか種類があり、RPiのクロックで動くものと、DACに乗っけたクロックで動くものがある。 RPi向けAudio用のディストロで対応したカーネルが配られている で? NanoPi NEO2でDAC側にマスタークロッ…

NanoPi NEO2 I2S AUDIO でMCLKを出すメモ

前提 Allwinner H5ではMCLKの出力が可能 PA6にアサイン可能 NanoPi Neo2でもこのPin(PA6)は出てる 作業内容とか dtsのi2s0 pinctrlにPA6を追加するもエラー PA6にi2s0のfunction設定が無いっぽい functionはpinctrlのdrivers/pinctrl/sunxi/pinctrl-sun50i-h…

NanoPi NEO2 I2S AUDIO 24bit再生でNG メモ

現象 16/32bitは再生OK 24bit再生はホワイトノイズ(かすかに音楽が聞こえる)となる 発生環境 20170909版のオフィシャルイメージ npi-configでPCM5102Aを選択 play(sox)で24/96,24/192フォーマットのFlacデータを再生 原因 24/32bit再生時の下記2レジスタの…

NanoPi NEO2 4.11系カーネルビルド手順メモ

概要 NanoPi NEO2用の4.11.xカーネルビルド方法のメモ。 公式イメージ20170909版のカーネルは本手順で生成できます。 公式ページの手順は3.10のころのものが混ざってる模様。 Ubuntu 16.04.3で確認 2018/07/21追記 Mediafireではなく、Linaroから直接Toolcha…