復旧

諸事情で相応の期間アクセス出来ない状態が続いておりまして、その間にプロバイダの事情でブログ表示が不可能になってしまいました。

こちら側で指示通りの対処が出来なかったのが原因です。

ひとまず応急処置で最低限の閲覧ができるようにしましたが、この先の復旧予定は未定となりますので、どうかお許しください。

アーム(腕ではありません)

最近、基板を作る機会がめっきり減りました。

ちょっとした機能検討なら市販の評価ボードを買う方が安くつくからです。大規模なFPGAデバイスなどは、DigiKeyなどからチップを単体で調達するよりも、こういったボードを買ってしまう方がさらに安い、という場合すらあります。

ということで、死蔵しておりました、こんな基板を使ってSDカードトランスポートを作ってみました。

昨年、我が家からついに光ディスク再生装置が放逐されたのに伴い、CDプレイヤーの代替は必要になったからです。たまには、ネットワークや大げさなストレージにつながっていない、スタンド・アローンな装置がよいというのが気持ちの中にありました。

普及率はそれほど高くはないかもしれませんが、標準化を目指して策定されたであろう、Pmodコネクタというのが複数ついていて、オプションのMicroSDカードスロットなどを増設することができます(そうです。手を汚さずに)。

表示はAmazonで売っている1.3インチOLEDディスプレーモジュール基板(SPI 128×64)を採用しました。こちらはPmodに非対応なので、「手を汚して」取り付けました。

前振りが長くなりましたが、昨年後半に、私の良く使うFPGAメーカーであるXilinx社のFPGAに、Arm(アーム)社のCortex-M3/Cortex-M1(≒0)というマイコンがライセンスフリーで提供が開始され、早速これをArtix-7というFPGAに組み込んでみたかった、というのも大きな理由であります。要するに、FPGA用に暗号化されたソースコードの配布が始まった、ということです。

カードへはSPIでのアクセス(C言語と組込みファイルシステムを駆使)になりますが、カード読み出しの速度的に、DSD2.8MHzまでは大丈夫そうな感じです(趣味を兼ねた研究用途ゆえ、ダメならあきらめてしまえます)。

で、ひとまず44100Hz/16bitのWaveファイルは再生できているので、前回記事のSSDACも入れてDSD変換してやろう、と、手始めに(変換されるであろう)DSD2.8MHzにDoPフラグを付けて176400Hz/24bitのS/PDIFに変換する回路を入れて準備しました。SDIF-3出力などの硬派な出力を使わず、あえてS/PDIFなのはマニアの風上にも置けませんが、小型でそこそこ音が良いという理由で相変わらず愛用しているMytekの初代DACが、S/PDIFでのDoP-DSD2.8を受けられるので試してみたい、というのがあります。

しかし、果たして肝心のSSDACは動きませんでした。機能シミュレーションでは動作しているのですが、Artix-7向けにXilinxのツールで論理合成(回路化)してゲートレベル(実際の論理回路レベル)シミュレーションすると出力が変になってしまうのでした。皮肉なことに、というか当然ですが実機の動作ともそれは一致します。SSDACはAlteraのFPGAで動作確認されていますので致し方ないところです。自分が何かポカをやらかしている可能性も十分ありますが、仕方ないので当面放置です。

***2022/12 現在、Xilinxのデバイス上で動作することを確認しております。なお、工業所有権の申請中とのことですので、これ以上は立ち入らないことにします。

SSDAC

トランジスタ技術誌10月号に掲載された “SSDAC” が興味深かったので、同誌11月号付録DVDに収録された設計データを使用してシミュレーションを行いました。

SSDACが「時間軸」に対して非常に理想的な性質を示すのは記事中からも明白ですが、「周波数軸」は一体どのような性質となっているのかを確認したかったというのも一つの理由です。

VHDLで記載されたソースコードをModelSim Altera Editionを使用し、「名目上」48kHzのデータを入力ベクタとして “SSDAC” に喰わせて、その出力をキャプチャしてWaveSpectraにてモニタしてみました※。

最初にインパルス応答の時間軸における挙動を、ModelSimの波形ウィンドウの結果をもって示します。

上が入力で下が出力ですが、一切の「シュート」が付きません。見事に”NOSDAC” を彷彿とさせます。

次に、10kHzのサイン波を変換した場合の出力を「周波数軸」で見たときの様子を示します。

続いていわゆる「f 特」。いずれも対数表示で右端の周波数を(48kHz/2)×64=1536kHzとしています。

実機動作には、16bitパラレル入力の工業用のDAC ICが載った専用基板を購入する必要がありますが、私的には設計者の意図とは離れてしまうのを覚悟で、これをDSD変換して手持ちのUSB基板+DSD1794Aなどで音の傾向を確認できると思われます。

可聴帯域外のスプリアスが音にどう影響するかですが、前出のマルチビットDACとDSDとではまたかなり違ってくるんでしょうね。DSD変換の音は新潟精密のフルエンシーDAC的な音傾向になる予感がします。

※3次スプライン関数の設定を選択してシミュレーションできていると思いますが、万一結果に間違いがあるようでしたら、ご指摘いただければ訂正いたします。

SSDACに興味のある方はトラ技を入手しましょう。

以下、権利者様の著作権表示となります。

===========
著作権
===========
・SSDAC24642ソースプログラムは 小林芳直 が著作権を持っています。
・個人の研究目的には、修正、改造など自由に使用できます。
・発表される際はこの著作権表示部分を表示してください。
・このプログラムの全部もしくは一部を製品に組み込んだり販売するなどの商業的利用はおやめください。
・本製品SSDACに使用されているデータ補間技術は、小林芳直により発明されSLDJ合同会社により現在特許出願中です。
・本キットに含まれる回路、ソースコードは個人的使用に限り自由に修正、改造ができます。
・本キットに含まれる回路、ソースコードの商業的利用については別途契約が必要です。higon@nifty.comまでご連絡ください。

 

UDA BULK ASIO driver 公開します

UDA BULK ASIO driver を公開いたします。 <====== サポートのご要望はご容赦ください。

これが一体どの様なものか、どういった趣旨なのか、については今年に入ってからの過去記事をご覧ください。ざっと一言でいえば下記のようなものです。

古い初代UDA基板のファームウェアを、ユーザー様にてこちらから提供するファームウェアに書き換えて頂きます。そして新しく書き起こしたASIOドライバーをインストールし、ASIO対応のバルク転送対応USB AUDIO基板として息を吹き返して頂けたら、というものです。

一応、対応環境はWindows10 64bit 「Fall Creators Update」となります。この環境で最新のVisual Studioにてすべてのプログラム類をビルドし、動作テストを行いました。が、ほかの環境でも動作する可能性はあると思います。

ファームウェア・アップデート、ならびにASIOドライバーのインストールに関しては、最初に説明書をお読みいただき、手順が飲み込めた段階で始めてくださるようにお願いします。

プログラム類はこちらになります。

記事や説明書をご覧頂いた上で、なおもご不明な点がございましたらお気軽にメールにてお尋ねください。

(2/11)  Windows7 64bitでの update ならびに動作報告をいただきました。

UDA BULK ASIO対応に関して(その2)

申し訳ありませんが、アップデート作業は全自動とは行きませんでした。
作業は少し複雑なので、行うことの概要を最初にご説明します。

アップデートするデバイスは、

1.サイプレス社USBマイコンのファームウェアを格納したEEPROMと呼ばれる不揮発性メモリ
2.FPGAの回路情報を格納したコンフィグレーションROMとよばれる不揮発性メモリ

の2つになります。それぞれの書き換えのことを、USBマイコンの書き換え、FPGAの書き換えと称することにします。対象はUDA基板のRev.1.0から1.61までとし、それ以降の基板は対象外となります。

Rev.1.01基板。懐かしいほぼ初代基板です。

Rev.1.61 最終リビジョン。

アップデート作業は、

1.USBマイコンがFPGAの書き換えを実行する
2.PCからUSBマイコンを書き換えを実行する

の、2段階となります。
サイプレス社のUSBマイコンは通常、電源投入後にファームウェアが格納されたEEPROMからプログラムを読みだして動作を開始しますが、このUSBマイコンはUSB経由でPCからファームウェアを直接ダウンロードして動作することもできます ( その場合はEEPROM上のファームウェアは使われません )。

そこでまず、

1.PCからUSBマイコンにFPGA書き換え用のファームウェアをUSB経由でダウンロードする
2.USBマイコンがFPGAを書き換える
3.PCからUSBマイコン用ファームウェアをUSB経由で転送してUSBマイコンを新BULK転送用に書き換える

という順番で実行します。

以降は次回の記事に….。アップデート説明書を書きましたのでここに置きます。興味のある方は先行でご確認いただければと思います。説明内容に不明点がございましたらメールにてお尋ねください。

UDA BULK ASIO対応に関して

古いUDA基板をバルク転送の汎用的なUSBアダプタに生まれ変わらせるプロジェクト(大げさですね・・・;^^)ですが、ひとまず希望される方に基板のファームアップとASIOドライバのインストールを行って頂けるレベルになったと思います。

対象の基板は、UDA基板のRev1.0からRev1.6までと考えております。UDA2基板以降は対象外です。ファームアップデートのために基板を返送して頂く必要はありません。

無償ですが、アップデート後に元の環境に戻すための昔のファームウェアのご提供は致しておりませんので、今現在日常的にお使い頂いている方はご注意ください。また、今回ご提供する機能はバルク転送のASIO環境のみで、アイソクロナス転送のクラス2.0は含まれておりません。UDA(USB DUAL AUDIO)という名前は嘘になってしまいます。ただし今後、上記UDA基板のRev1相当には、DoP対応クラス2.0のファームウェア(ドライバレス)もご提供したいと考えております(皆様のお声次第ですが・・・)。

当方の動作確認環境がWindows10の64bit最新アップデート環境のみであり、32bit環境やWindowsの旧バージョン上でのテストはしておりません。また、今後それらの環境を用意してテストする予定もありません。したがって、それらの環境で不動作である旨のご報告を頂くことは歓迎しますが、修正対応は致しかねます。さらに、特定のアプリでの動作不具合に関して、当方が所有しない有料アプリでの不具合に関しては、対応ができない可能性が高いことをご理解ください。

対応サンプリング周波数は44,100Hzから384,000Hz、そしてDSD2.8MHzとDSD5.6MHz(DoP)です。ASIO Native DSDには現状は未対応です。今後ユーザー様が増えてきてご要望が多く上がれば技術的には対応は可能です。

現在、アプリケーションからASIOコントロールパネルを呼び出してバッファサイズを変更できるようにしてありますが、アプリケーションによってはサイズの変更後に更新が反映されないものがあります。これに関しては今後ドライバの仕様を変更して対応したいと考えています。

現在ドキュメント類の準備中です。アップロードまではまだ少しお時間を下さい。先行人柱希望の方大歓迎です。メールお待ちしています。

近況

長いことブログをほったらかしにしてしまいました。1年半ぐらいでしょうか。何か、デジタル的なオーディオにはお腹がいっぱいになってしまいまして、何故かというべきか、当然というべきか、しばらくの間レコードに熱中していました。30年位前まで熱中していたレコード再生ですので、始めると当然のごとく夢中になってしまい、デジタルを忘れてしまいました(これは嘘)。

この間、自作オーディオの核はラズパイに、ゆえにトラポとDACとの接続I/FはI2Sに、一方でUSB DACは、といえば、クラス2.0とJPLAY、というようになってしまい、私としては特にやりたい事もない状況が続いています(笑)。

考えてみたのですが、この「デジタルオーディオ実験室」は、もとはといえばバルク転送のUSBアダプター基板から始まっているわけでして、いつのまにかクラス2.0にシフトしてしまってバルク転送を放置してしまっているのはあまり良い状況ではないと思い、実は昨秋から少しづつ手を入れています。

どういうことかと言いますと、UDA基板というものを頒布しておりましたが、専用アプリからしか使えないバルク転送モードと、クラス1.0や専用アプリを使わなければDSD再生ができないようなクラス2.0との「二刀流」でお分けしていた時期がしばらくあって、そういう基板をお持ちの方は現在ほとんどお使いになられておらず、部品箱か何かの片隅で埃をかぶっていたりするのではないかと思うのです。

それで、最近手を入れて汎用的に使えるようになったバルク転送モードのファームウェアと入れかえて使って頂いてみてはどうかと考えました。

具体的には、バルク転送の転送原理はそのままに、オーディオデータの転送ビット数やちょっとした仕様を変更してUAA(ユニファイド・オーディオ・アーキテクチャー)仕様で使いやすいようにし、その結果foobar2000などの一般的な再生ソフトから使用できるようになりました(その他、TuneBrowser、WaveSpectram、SONY Music Center、DAWではSOUND FORGEなどで動作中です)。

その実現のために、Windows用にバルク転送のASIOドライバーを新たに書きおこしました。
実は、昨秋にはLinuxのALSAから使用できるように、Linux用の野良ドライバもでっちあげていました。ということで、つい最近、LinuxとWindowsの2刀流で標準アプリからバルク転送が使えるようになったのです。現状、DSDはDoPでの対応になります。

また、古いUDA基板をお使いの方が、お手元のWindowsPCでこの新しいファームウェアに書き換えることができるような、ファームアップのためのソフトウェアも新しく書き起こし、そちらの方もどうやら動き始めました。

原点に返る、というような大げさな話ではありませんが、このまま消え去ってしまうのは忍びないので、以上のようにバルク転送に手を入れました。近いうちにソフト類を公開したいと考えていますので、気長にお待ち頂ければ幸いです。気の短い方はメールを頂ければ人柱になって頂けるかもしれません。よろしくお願いします。

もっともシンプルなオーディオ・プロセッサに!

ZYBOに搭載されたFPGA + ARMコアのSoCチップ (ZYNQ)ですが、実はこのデバイスはほかのARMプロセッサなどと違ってディスプレー出力のための専用回路を含んでません。

画面出力のためのディスプレー・コントローラ、VRAMとメモリ間のデータ転送を担うDMAC、そしてHDMIやVGA出力のためのロジック回路は、ZYNQを使う設計者がFPGA内に回路として作りこまなければ実現できないようになっています。

通常は設計者がゼロから回路設計をしなくても済むように、FPGA内に実装可能な回路コアが提供されていて、それを組み込めば良いようになっています。

実際、現行のZYBOに組み込んだFPGA内の設計データである “zybo_base_system” には、下の図のようにネットワーク・オーディオには不要なこれらの回路も組み込まれています。クリックで拡大

接続するのがUSB DACであれば、I2Sコントローラも不要ですから、極論すればZYNQだけあれば良いのです( 前述のとおり、”ZYNQ”はFPGA + ARMコアのSoCチップでありますが、回路図中とここでは FPGA部無しのARMコア自体を “ZYNQ” と称しています )。そこで、ディスプレー関連の機能をすべて削除してシンプルなオーディオ・プロセッサとして使ってみようと思います。

具体的には、下の図のようにまで回路を減らすことができます。クリックで拡大

ZYBOの上には、アナログ・デバイスのSSM2603といういわゆるコーデックが載っていて、ZYBOのメーカーであるDigilent社のサンプルプロジェクトである、”zybo_base_system” でFPGAに組みこまれている「I2Sコントローラ」の出力がこのICにも接続されています。この際、I2Sコントローラも削除し、ついでにポートを強制的に内部でGndに接続することで、SSM2603の入力ポートがバタバタしないようにします。
その結果、非常にシンプルなネットワーク・オーディオ・プロセッサが出来上がりました。

すでにご利用されている方は、MicroSDカード内のBOOT.bin と devicetree.dtb をこちらのシンプルな方に入れ替えてみてください。MicroSDカードイメージの方も期を見て入れ替えます。

QNAPだけではなく、RockDiskNext (のTwonky Media Server )からもDSDまでトラブルなく再生できたというご報告をいただいております。

UPnP on ZYBO → 試験公開中, Kinsky, Kazoo, LUMIN app OK!

6/2:MPDをmpd-dsd-0.19.14 にアップデートしました。ダウンロード先のディスクイメージが新しいものに換わっています。そのほか、使い勝手向上のために若干仕様変更しています。お使い頂いている方は再読をお願いします。

昨年から思い出したように時々書いております「ZYBO」 ( XilinxのFPGA+ArmマイコンがOne ChipになったZynqプロセッサを搭載した組み込みボード) ですが、ハードウェア面では相変わらず進化もせずに使用しております。

が、ソフトウェア面では、昨年夏から秋にかけてMPDをUPnP/OpenHome化しまして、市販のネットワークPlayerのように使用できるようになっております。当初はLinnのKinskyのみを使っていましたが、最近ではKazooを使えるようにし、さらには最新バージョンのLUMIN appも使えるようになっています。アルバムアートワークが汚くなる、いわゆるトンキー病も、最新のバージョン8.2.0では直っているようで( Twonky Media Server )、快適に使用中です。

ハードウェア面では手を入れず、というのは、オリジナルのI2S/DSDコントローラの開発をさぼっていて、未だに自前のUSBクラス2.0基板で楽して楽しんでいます、という意味です。

余談ですが、この基板はコストをかけて作っていることが見てとれます。ずっしり重く、ノイズ対策などもしっかりしています。半導体メーカーからの協賛がないと、$190程度という破格の値段では売れないと思われます。玄人向けの基板だと思いますが、秋月でも売っているのですから驚きます。

基板の仕様で、USB端子には、いわゆる”USB OTG”ケーブルを介してUSBケーブルをつなぐ必要があったり、ソフト上の唯一の問題?で解決策が自分的にはクリアになっていない、DSDモードにおいてサンプリング周波数表示が正しくない、といった細かい問題は残っておりますが、気分よく使用しております。

サポートするファイルフォーマットがWAV, FLAC, そしてDSDのみで、汎用性が低いといわれそうですが、もともと「自家用」に構築したものなので、それでも良いから使ってみたいという方のために、この、ZYBOを「UPnP/OpenHome」で動作するネットワークトラポにするためのバイナリを公開しても良いのではないかと思っています。

Digilent社から提供されているLinixのカーネルソースから必要最小限のモジュールを組み込み、MPDと、それに必要な諸ソフト群をそれぞれのGitHubからGetしてきて、PC Linux(Fedora)上でクロス・コンパイルすることでバイナリファイルを作成しました。最終的には、MPDをUPnP化するためのupmpdcliというソフトが、UPnP化の決め手になっています。

UPnP対応なので、Twonkyメディア・サーバなどのファイルサーバーに音源が格納してあって、ルーターからDHCPで自動的にIPアドレスが割り当てられるようなネットワーク環境であれば、そこに繫ぐだけで何も設定なしに動作する ことが期待できます。

============================== 以下、長文注意 ===============================

試してみたい方へ・・・

ということで、ここから先はZYBOをお持ちで、実際にこの基板をUPnPネットワーク・オーディオ・トラポにしたいと考える方への内容になります。

まずはここからmicroSDカード用のディスク・イメージ・ファイル (upmpdcli.img.zip) をダウンロードします。ファイルはzipで圧縮されていますので、適当な手段で展開してください。Windowsであれば、このファイルを右クリックして「すべて展開」を選択します。展開後はupmpdcli.imgというフォルダの中にupmpdcli.imgというmicroSDカード用のイメージファイルが格納されています。同名で紛らわしいですがmicroSDに書き込むのはこのイメージファイルの方です。

4GB以上の空のmicroSDカードを (カードリーダを介して) PCに挿します。Win32DiskImager ( ご使用経験のない方はこちらから入手可能です ) を起動し、解凍してできた upmpdcli.img を microSDカードに書き込んでください。PCからmicroSDカードを取り外す場合などに、「このドライブで問題が見つかりました。今すぐドライブをスキャンして修復してください。」とPC上にバルーンが出る場合がありますが、無視してください。

書き込みが終了したらmicroSDカードをZYBOのmicroSDカードスロットへ挿入します。

ZYBOのUSBはOTGなので、この基板をUSBホストとして使用するために、OTGケーブル (AndroidのUSBホストケーブル) を介してUSB DACの接続されたUSBケーブルを接続します。ここをクリックすると拡大されます。

各ジャンパのピンヘッダを上図のようにします。ここをクリックすると拡大されます。

上図、基板表左側のUSBコネクタは給電用経路を兼ねたUSBシリアルコネクタになっていて、動作しているPCとつながっていると、本来のUSB端子に接続されたUSB DACとZYBOとの通信が停止します。なので、USB給電する場合はPCではなく充電用アダプタなどにつなぎます。DCジャックからの給電がより好ましいでしょう。後述しますが、USBシリアルコネクタは万一動かない場合のデバッグ用途でしか使いません。

ネットワーク・ケーブル、USBケーブル (USB DACはもちろん接続しておきます)、そして給電ケーブルがつながった状態で、ネットワークのルーター、TwonkyメディアサーバなどのUPnPファイル・サーバー(Twonkyメディアサーバのみ確認しました) が動作しているのを確認してZYBOの電源SWをオンにし、USB DACの電源も投入します。

しばらくしたら、コントロール・ソフトを立ち上げます。WindowsではLinnのKinsky、iOSでは同じくKinskyとKazoo。そしてLUMINのLUMIN app (最新版) で動作を確認しています。

Kinskyを使用する場合には、ZYBOのフレンドリ・ネームは下図のように”Main Room”を選択し、”Playlist”表示が出ることを確認してください。場合によって起動毎にこの設定が必要になりますので、ウザったいという場合には他の2つのソフトから選択されるとよいと思います。どうしてもKinskyが使いたいという方はメールを下さい。対処法があります。

さて、この状態でライブラリを選択してPlayすれば、基本的に設定不要で24bit/192kHz、DSD128までの音源が再生できる「筈 (願い)」です。音源のサポート・ファイル・フォーマットはこの記事の前半に書きました。

USDA基板、USDA_MINI基板をお使いの方で、Native DSD再生をしたい方は、microSDカードの中のmpd.confを適当なテキストエディタで編集してお試しください。デフォルトではDoP再生にしています ( どちらか一方を”yes”にします。図はDoPを選択した状態のmpd.conf )。

メーカー製のUSB DACをご使用の場合にはmpd.confを書き換えずに「DoP ”yes”」「dsd_native ”no”」のままでお使いください ( 標準仕様 )。

なお、UDA2基板、USDA基板、USBDAC基板ならびにUSDA_MINI基板を。この “upmpdcli on ZYBO” でお使いになる方のために、若干機能を改善したファームウェアがあります ( WindowsやMAC OS Xでのご使用には特に効用はありません )。希望される方はご連絡ください ( アップデートそのものは無償です)。

万一動かない場合・・・

どうしても動作しない場合、PCとUSBシリアル接続してブート時のメッセージを見ることで何かわかるかもしれません。Tera Term などのシリアル設定を下記のようにしてブート時のメッセージをコピペしてお送りいただくと、何かわかる場合があります。ポートの設定(COM*)はお手持ちの環境に合わせてください。

もう一つ、microSDカードをZYBOから抜き、Linuxの動作するPCに挿入して、下図に示す”ROOT_FS”パーティションにある”upmpdcli.log”をお送りいただくと、何かがわかる可能性があります。

このパーティションはWindowsマシンでは認識できませんので、必ずLinuxマシンでファイルを採取してください。Linuxマシンをお持ちでない場合、USBカードリーダーとラズパイがあればそちらでも可能です。

Special thanks to…