ちょっと Tea Time!? I2Cだけで基板やデバイスの区別はできるか? 2025.1.30

現在 Renew DIV5142とCONTROLLER UNITをつかって統合システムを作ろうとしていますが、
過去につくった基板も接続できるようにすると、無駄にならなくて済みます。
課題は、接続した基板やそこで使われているデバイスが何かがわかることです。
外部からパラメータ等で明示するのがもっとも確実ですが、そのためのプログラムを作るのも
あまりスマートではありません。多くの基板がI2Cで動いていることもあり、それをつかって
わからないかなあ〜というのが今回のTea Time!?です。

区分可能かどうかのポイントはI2Cをつかっているデバイスのアドレスの違いです。

1.DAIやSRCについて

 CONTROLLER UNITに接続できそうな基板は下記になりそうです。 
下記の4つで比べると、全部ことなることがわかりました。SRC4137とRenewSRC4137は
似ていますが、SRC4137の方がPCA9539を2個つかっているので、これから区別できそうです。

基板名 I2Cアドレス
Renew Simple DAI
 for CS8416
CS8416:0x20
Renew DAI9211 PCM9211:0x80
SRC4137 DIX9211: 0x80
AK4137:0x20
PCA9539:0xee
PCA9539:0xec
Renew SRC4137 DIX9211: 0x80
AK4137:0x20
PCA9539:0xee

2.DACについて
 手元にあり使えそうなものを調べてみました。条件はPCM(I2S)入力があるものです。
こうやって眺めてみると、かなり意外と構成がバラバラなこともあり、区別はできそうです。

基板名 I2Cアドレス 備考
DAC34301
DAC34352
PCM9211:0x80
BD34301/52
0x38〜0x3e
PCA9539:0xec
BD34301とBD34352の違いは
IDレジスタで判別可
DAC343XX CS8416:0x20
BD34301/52:0x38〜0x3e

PCA9539:0xec
同上
DAC343XX-S BD34301/52:0x38〜0x3e 同上
DAC1795-I2C PCM1795:0x98〜0x9e
PCA9539:0xe8〜0xee
DAC179X-2.1 CS8416:0x20
PCM179X:0x98
PCM179X:0x9a
チップの違いは?
DAC4497-2.1 AK4497: 0x20
AK4497: 0x24
DIX9211:0x80
PCA9539:0xee
DAC4493-5 AK4493: 0x20
AK4493: 0x22
AK4493: 0x24
AK4493: 0x26
DIX9211:0x80
PCA9539:0xee
DAC4493-I2C AK4493: 0x20〜0x26
PCA9539:0xe8〜0xee
DAC4499 AK4499: 0x20〜0x26

その他、ES9018などをつかったDACもあるけど、回路図が手書きでかなり省略しているので、
なにがなんだかプログラムから紐解かないといけないので、ちょっとパスです。

SRC4137をCONTROLLER UNITに繋いでみよう!

基板箱の中からSRC4137が見つかったので、これを繋いでみましょう。
ちょっと埃がついていたので、コンプレッサーで吹き飛ばしたら綺麗になりました。

改造はPICのところのみで行いますので、別のICソケットを用意してそこに配線をして、
ICを差し替えます。I2Cの取り出しはスイッチの接続ポートを流用です。そこには
47kΩのプルアップ抵抗があるので、除去しておきましょう。I2Cのプルアップ抵抗に
47kΩが追加されても、問題ないのですがCONTROLLER UNITのプルアップ抵抗が
1kΩと低くしていることもあり、これ以上の負荷をかけたくなったので念のため削除です。
当然のことながら、SRC4137のI2Cのプルアップ抵抗であるR4,R5も取り除きます。

なお、システムクロックは本来は色々と可変できるようになっていますが、ここでは
24.576MHzに固定しておきます。SRC4137には未使用のI/O拡張期のポートが沢山
あるので、それらでコントロールしてもいいけど、まずはシンプルに動かすところを目指します。


SRC4137を繋いでみましょう。以前にSLAVE UNITで使っていたものです。


基板端子をツつかってI2C信号を取り出します。



あっても大丈夫だろうけど、不要なプルアップ抵抗は取り除いておきます。


I2Cのプルアップ抵抗R4,R5も取り除いておきます。



PICの代わりにこのような配線を行ったICソケットを差し込みます。

認識するかな?

CONTROLLER UNITのI2C-1に接続してテストです。
無事、すべてのICを認識するかな?

CONTROLLER UNITに接続してテストです。

あれ?AK4137と通信できない?

電源をいれて、I2Cの接続状況を確認しますが、基板上のAK4137(0x20)だけが
I2C通信ができません。その他のICは大丈夫です。
どうやら原因はAK4137のPDN(POWER DOWN &RESET)端子の取り扱いにあるようです。
電源投入時にはLowレベルになっている必要があったので、ずっとHighレベル固定ではだめなようです。


AK4137のPDNは電源投入時にはLowレベルになっている必要があるようです。

原因がわかったので、CR回路をつかってPDNの立ち上がりにディレイをかけます。
そうすることによって、SRC4137上のすべてのICとI2C通信ができるようになりました。

CR回路によるPDNのディレイを追加しました。


ICソケット上の配線の回路です。


これで、SRC4137上のすべてのICをコントロールできるようになりました。

別のICソケットに配線を行ってPICと差し替える方法を今回はつかいましたが、
若干見た目が悪いかなあ〜。CR回路の代わりにPICを使う手もありますが、
高々数10バイト程度と思われるプログラムにPICを使うのも勿体ないので、
これが一番安上りの方法でしょう。

CONTROLLER UNITのソフトに組み込んでみましょう!

しかし、SRC4137のソフトを組んだのって、もう10年くらい前なのでなにも覚えていないなあ〜。
既存のプログラムがわかりやすく書いてあれば、いいのだけどなあ〜。

(つづく)