I am designing a PCB that connects to a 40pin header (similar to RPi HAT header) on an AAEON embedded computer. The computer has a SIO chip and an API that allows I2C communication from the device.
The I2C bus has 2 devices connected to it: PCA9685 PWM LED dimmer, and a TCA9548A I2C MUX (for connecting many IO expansion boards in the future).
Initially I was using this board to test the TCA9548A, which worked on both the AAEON computer and an Arduino Uno I was using for testing.
After that I started designing the PCB in Altium. It's a 4-layer board (SIG-GND-3v3-SIG), and it has both the PCA9685 and TCA9548A on it.
Now here is the issue:
I am able to communicate with the PCA9685 perfectly fine. I can dim LED's individually and all my register writes are successful. But the TCA9548A is constantly misbehaving: even if it probes successfully, I am only able to send a value '2' to its control register and read it back, every other value written results in a '0' received back when I subsequently read the data after a write.
I connected the board to an Arduino Uno (and used a TCA9548 library) and the results are the same. Since the PWM chip works, I believe nothing is critically incorrect about my I2C bus. However, it seems to be the case that something is routed incorrectly to the TCA9548A, though I'm not sure what. As you can see on the schematic, the connections are pretty trivial
How could one route the TCA9548 multiplexer incorrectly?
P.S. The AAEON board has built in pull-ups on the I2C bus, and for the Uno I add 10k pullups on SCL,SDA.
P.P.S. All the MUX sub channels are pulled up to Vcc with 10k pullups and there are no devices connected to those sub-channels when testing
Day 2 Update: I made some scope shots with an arduino connected to the adafruit board and my PCB:
Arduino communicating with the Adafruit board: With this board, I am able to read the data back after I write it (as expected)
The issue appears when I use my PCB instead of the adafruit breakout: Here I am writing 0x0C to the board and reading 0x00 back:
Additional info
The board TCA9548A connections TCA9548A zoomed in on the board