I have a custom four-layer PCB (Signal, Ground, Power, Signal) with an STM32F4 (72 MHz) connected to a Si4684 receiver and a Si4711 FM transmitter through SPI.
It seems that my design has some signal integrity issues. I can communicate with the Si4711, but I can only communicate short commands with the Si4684. Communication with Si4684 fails (some bits are incorrect) when transferring the firmware image from the STM32 to the chip (large data transfer).
When I connect my logic analyzer to the Si4711 MISO pin, this turns around. No communication is possible with the Si4711, but communication with Si4684 works flawlessly. If I connect the logic analyzer to the Si4711 MISO pin and send the POWER_UP command to the Si4711, it seems like there is no reply from the chip. Probing at the Si4711 MOSI pin clearly shows that the command is being received correctly.
The behavior is the same if I run the clock at 300 kHz or 8 MHz. Unfortunately I don't have a oscilloscope available, but I guess this could be a slew-rate-issue since it's independent of the clock.
What could be the reason that I need to connect the logic analyzer to the MISO pin to get the Si4684 working, and why does this make the Si4711 stop working?
What I've tried so far: - Series termination (50 ohm, 100 ohm) on the CLK line - Adjusting the GPIO speed of the SPI pins on the STM32 (LOW, MEDIUM, HIGH). I believe this sets the slew rate of the pin. - Connecting the logic analyzer to the other SPI pins. - Double checked that I have the correct SPI mode (0,0) set
I understand that I will have to make a new design, but I would very much like some input on why this happens.
Please find layout and partial schematic below. SCK, MOSI and MISO signals are highlighted.
UPDATE: I moved the Si4711 to I²C instead, and now there are no issues.