前回書いたとおり、EZUSBをaudio classで動かせないかと思っていて、まだ調査段階.
EZUSBをいじくり回す前に他の選択肢を調べてみた.
EZUSBと同じCypress社のPSoC(EZUSBとは別シリーズ)を使えないかなと調査してみたのだけど、撤退した.
PSoCにはCPUグレード別に5種類ある.
PSoC1 CPU M8C
PSoC3 CPU Intel 8051
PSoC4 CPU ARM Cortex M0
PSoC5LP CPU ARM Cortex M3
PSoC6 CPU ARM Cortex M4
これらのうち数100円で買える1と3を調べたのだが、USB転送レートが12Mbpsしか出ない.ARMが載っている456はお値段高そうで採用不可だった.撤退、撤退、
PSoCの他に探したのは、Silicon LabsのUSB Audio ICも安くていいんだけど、12Mbpsなのさ.48kHz24bitぐらいしか通せないだろ、なので撤退.
というわけで、お値段安くて480Mbpsが出るEZUSB CY7C68013Aは有能なのさ.
------
Audio Classを実装したことなどないわたしだ.先人の足跡を辿るべくググる.
Cypressの質問コーナーに「Audio Classやった人いる?」みたいなスレがあるけれど、まとまった情報にはありつけなかった.
EZ-USBでAudio Classをやっているサイトは唯一ここだけかもしれない.ありがたく参考にさせていただきます.
このサイトには、EZ-USBをAudio Classで動かすためのdescriptorが書かれている.USBデバイスを作るには最初のとっかかりとしてdescriptorが判らないと身動きとれない.なのでここの情報には感謝しかない.
descriptorを知らない人が居るかもなので少し説明すると、USB機器をPCに繋いだときにPCが「オマエはどんな機能なのだ?」と探りを入れる.USB機器は「わたしはHiRes Audioを奏でる者です」などと回答する.USB機器がする回答がdescriptorだ.descriptorはUSB機器に記憶され、サイズは数100BYTEsぐらいだ.
長いので同サイトのdescriptorをここに転記はしないが、そのdescriptorには特徴がある.TIのUSB DAC IC PCM2704のdescriptorに似ているのだ.descriptorの最初の方にはメーカー名と製品名の記載がある.そこがTI PCM2704になっている.
つまり、EZUSBをPCM2704もどきに擬態している.そうすることで、windowsのデバドラにPCM2704と誤解させて音を出すという目論見があるのだろう.
USB Device Tree Viewerというtoolがある.
これを利用するとUSB機器のdescriptorを全部表示させることができるので、「擬態PCM2704」をチェックしてみたところ、いくつかのエラーが表示されていた.
エラー1:
string descriptorを読めてない.原因は、EZUSBの仕様でstring descriptorをword境界で配置すべきなのに、半端だったこと.同サイトのdescriptorにはMAKE_EVENというコンパイラ制御コマンド?が記述されているがわたしが使っているKeil IDEはMAKE_EVENが通らなかった.
MAKE_EVEN ;; macro (FX2LP needs 2bytes alignment)
なので、string descriptorの直前に db 00 を入れて1BYTEずらして回避した.
エラー2:
同サイトのdescriptorにはHID report descriptorが書かれておらず、そこにもエラーが表示されていた.しかしHID report descriptorなんか初耳なんだな. →参考はここ
参考サイト曰く、
・HIDクラスでは、レポートと呼ばれる単位でデータを転送する・レポートのデータ構造はレポートディスクリプタによって定義される
・レポートディスクリプタは、他のディスクリプタと構造が全く違う
・HIDディスクリプタに続いて送られ、可変長
・レポートディスクリプタのサイズはHIDディスクリプタのwDescriptorLengthで定義
これは初耳なので難物だなぁ.
エラー状況は、wDescriptorLength=24Hと定義されているのに中身が無いという状況だ.
PCM2704のdescriptorには謎の36BYTEs(24H)のバイナリが存在するので、それをコピペしたらどうだろうか? 少なくともエラーは無くなるはずだ.追加した36BYTEsはこれ.
db 09,02,BEh,00h,03,01,00,80h,FAh,09,04,00h,00h,00,01,01
db 00,00,09h,24h,01,00,01,28h,00h,01,01,0Ch,24h,02,01,01db 01,00,02h,03h
でもエラーは消えなかった.36BYTEs全部ゼロも試したのだがwindowsがハングアップした.このエラーについては原因不明で放置プレイ.
EZUSBに焼いたdescriptor fileをこちらに置いときます.
------
次の取り組みとして、USB Device Tree Viewerで採取したdescriptorをじっくり読んでみる.またこの2つを比較してみる.
・真正PCM2704のdescriptor →こちら
・擬態PCM2704(EZUSB)のdescriptor →こちら
datasheetから、真正PCM2704のエンドポイントの対応はこうなっているらしい.
・Isochronous-out audio data-stream endpoint (EP2)
・HID endpoint (EP5)
要するに、volumeはEP0、PCMはEP2、HIDはEP5、 ということだ.
HIDはvolume/play/stopなどの操作を含む.
descriptorからそれを確認した.
一方、EZUSBではHIDをEP1に割り当てている.(EP2,EP5は同じ)
descriptorからそれを確認した.
比較してわかったことは、、、
・両者のdescriptorはとてもよく似ている
・真正PCM2704にはステレオ/モノラルのdescriptorがある
・擬態PCM2704(EZUSB)にはステレオだけしかない
・ICによりFIFOサイズには違いがあるのでMaxPacketSizeが違っている
・擬態PCM2704(EZUSB)にはHID report descriptorがない
このくらい.
EZUSBに仕込むdescriptorはこんなもんで良いでしょ、というところまではわかった.
かしこ
→INDEXページへ
descriptorからそれを確認した.
比較してわかったことは、、、
・両者のdescriptorはとてもよく似ている
・真正PCM2704にはステレオ/モノラルのdescriptorがある
・擬態PCM2704(EZUSB)にはステレオだけしかない
・ICによりFIFOサイズには違いがあるのでMaxPacketSizeが違っている
・擬態PCM2704(EZUSB)にはHID report descriptorがない
このくらい.
EZUSBに仕込むdescriptorはこんなもんで良いでしょ、というところまではわかった.
かしこ
→INDEXページへ
「PSoC」といえば、「アップルiPodのホイール部分の静電容量センサーの制御」で、
返信削除一世を風靡してましたが、なんか最近はラズパイやArduinoにも使われてる「ARM勢」
に、押されて「パッとしないなー」と、思っていたら、PSoC自体が「ARM化」してたんですね。
※最近の組み込み系って、この傾向が多いですね。ルネサスやNECも「独自路線」
を捨てて、「ARM化」に走ってるし。過去の資産とか、どーすんだろ?
PSoCは「アナログ制御がマトモに出来る、組み込みCPU」と、思っていたのですが、
なんか単に「A/D,D/Aコンバータが付いてるARM」に、成り下がったような気がする。
EZUSBですけど、その昔OMRON?が「2400Baud」のUSBモデム(携帯用だったと思う)
の制御に使ってましたね。なので、それ位まではいけるのかな?
ハイレゾオーディオは、厳しいかもです。
>ハイレゾオーディオは、厳しいかもです。
削除すみません。あんまりよく調べないで、言ってました。資料ページみたんですが、
・bcdUSB は、0x200(USB2.0) にしたほうがいいのでは?
(PCM2704のほうは、対応してないんで 0x110(USB1.1)なんだと思いますが)
・bInterfaceProtocol を、0x20(IP_VERSION_02_00)に、することで、
USB Audio Class 2.0 に、なるようです。(でないと、ハイレゾ対応しない。
あと、もう既に3.0なんて規格があるんですね・・・)
この辺は、https://www.wdic.org/w/TECH/USB%20%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%20%E3%82%AF%E3%83%A9%E3%82%B9 とか、ここ
https://www.usb.org/document-library/usb-audio-devices-rev-30-and-adopters-agreement
(これは、本家です。ちなみに何故か、USB_Audio_v2.0.zip はありませんw
あと、CONTRIBUTORS に、Google, Inc.の人が居るのが、時代を反映してますね・・・)が、参考になるかも。
※スペックちゃんと見てないのですが、最近のチップは、高性能だから
処理時間は問題ないか・・・ というか、メーカーの能書きにちゃんと、
Video Processing(!) Audio Equipment って、ありますね。
※あと、ホントどうでもいいことですが、Cypressのロゴ(木陰の絵)って、昔はもっと、
「高解像度」というか、こんなドット絵じゃなかったような気がするのですが・・・
気のせいかな?
いつもの通りすがり様こんにちわ
削除>PSoCは「アナログ制御がマトモに出来る、組み込みCPU」
わたしもそう思ってたんです.プログラマブルなOPAMPかなと.
>PSoC自体が「ARM化」してたんですね。
いえてます、笑い.みーんなARMで孫さんウハウハ
「A/D,D/Aコンバータが付いてるARM」 ← 爆笑
削除だったらSTM32でも同じじゃんとも思います.
>bcdUSB は、0x200(USB2.0) にしたほうがいいのでは?
削除そうですね.デバドラさんを悩ませないために.
Cypressってのは植物名でしたか.ブレードランナーの最初の画像を思い出します.
Cypress社の、旧ロゴ?を、発掘しました。
返信削除https://makezine.jp/event/wp-content/uploads/sites/2/2016/07/04_Cypress.jpg
こんなのもありました。
http://2.bp.blogspot.com/-6EBsK3bcpPg/VWnjdNT4O5I/AAAAAAAAAzc/57YQ1r5jMEA/s1600/DSC_0009.JPG
https://fastly.4sqi.net/img/general/width960/253490_Ir0vUokqx_IY0CD0nmHMVt3yY-8f4NQY40lfKQdOEzc.jpg
ちなみに、新(現行)ロゴ
https://www.cypress.com/sites/all/themes/cypress_3/images/cypress.svg
※旧ロゴだとsvg化しずらいので、デザインを変えたのかな? ファミコンのドット絵みたい。
個人的には、旧ロゴの方が好き。
>Cypressってのは植物名でしたか.
Wikipediaによると、和名は「イトスギ」「セイヨウヒノキ」で、クリスマスツリーに使われているそうです。
小さいのは、街路樹とかに使われているそうです。たしかに、この細長い葉っぱは
どこかで見たことがあります。
3枚目の入口写真を見たら、外資のofficeてどこでもあんな感じなのねって思っちゃいました.無人で受話器を取ると代表の人が出るんですね.
削除やっぱアニメっぽく手描きの色トレスが一番ですよ.旧ロゴでよろしくお願いしたいです.