Ultra96にはPSのI2CからTI社のTCA9548APWRというI2C Muxを経由して、7つのI2Cバスに分岐する。
せっかくFPGAなんだから、PLのピンに接続しておけばいいのに、どうして、こういう風に部品を増やすかな?
ここからはデバッグのための手法です。
DeviceTreeにTCA9548APWRの定義が行われているなら、まず、削除する。
TCA9548APWRは次のようにSlave Addressの後にMux Bitに1を立てることで該当のI2Cバスにスイッチする。
Address | R/W | Mux bit |
そして、Ultra96にログインして次のように0x01を書き込むとMuxの1番目にスイッチする。
ちなみに0x75はTCA9548APWRのSlave Adressです。
$ i2cset -y 0 0x75 0x01
そして、次のようにi2cdetectを実行するとスイッチしているI2Cバスを探索する。
$ i2cdetect -y -r 0
ちなみにI2CデバイスのLinux Kernelドライバがない場合、DeviceTreeでTCA9548APWR経由のアクセスを表現するのは面倒です。