I'm trying to use an Aardvark I2C controller over the SMBUS_TEST1 header on an ASRock IMB-A8000 motherboard to read voltage and current from an RT3674AE regulator. I don't have a schematic for the motherboard, but through trial and error I've determined that there's a PCA9545A switch on the bus, with the CPU on one side, and both the RT3674AE and the SMBUS_TEST1 header pins on the other.
[CPU] ---- [ i2c controller ] ---- [ PCA9545A 3] ---- [RT3674AE] ------- [others]
[ 2] ---- [SMBUS_TEST1] ---- [Aardvark]
[(disabled) 1] ----
[ 0] ----
The RT3674A is at address 0x20. I can get the chip id (register 0xfb, value 0x74) from both sides of the switch, using a Linux shell on one side of the switch, and Python to drive the Aardvark on the other.
The problem is when I try to read the two voltage registers at 0x8b and 0x8c, usually after writing to set the page but not always, I get two completely different values; the one I get from the Linux shell makes sense, but the one I get from the Aardvark doesn't. I've attached some screen shots of the transactions from both sides. I thought it may be an address conflict but as far as I can tell from using i2cdetect
there are no other slave devices with address 0x20.
Has anyone seen anything like this before? Another thought I had was maybe there's a multi-master issue, but I only see traffic on the I2C bus at boot, and never when I'm trying to query the regulator.
Attached are some waveforms of both controllers initiating reads, captured parallel to the Aardvark and the SMBUS_TEST1 header.
Any help or insight is much appreciated. Thanks.
Aardvark writing page 0x3 (rail A)
Linux writing page 0x3 (rail A)
Aardvark reading voltage high byte
Linux reading voltage high byte