I am developing a system with multiple (four) distinct PCBs containing devices that need control from a central MCU via SPI plus a smattering of gpio and other slower signals. My plan is to connect them all with a common backplane PCB.
I need to choose connector hardware and understand any special layout or driver requirements. Boards, including the backplane, will all be four layer (SIG / GND / PWR / SIG). The SPI bus target maximum speed is 25 MHz. Which puts it right on the edge of "high speed design".
On a given board, SPI traces may be up to 200mm. Over the backplane, approx 60mm. Boards will have a buffer IC so they do not form an enormous SPI "star".
Backplane Connectors:
If I search for high speed backplane connectors with a specified impedance or high bandwidth, they either (a) cost a lot or (b) have very fine pitch SMT footprints or both.
My cost target is $5 or less for each connector. 4 boards x 2 (F + M halves) means I need 8 connectors total.
I am not averse to SMT but the pads need to be accessible (I assemble via hot air pencil, I lack a reflow oven) and pin pitch of 1.27mm+ is preferred. Shielded SMT connectors also advertise multi-GHz performance which seems like overkill. I don't need to pay for 10GHz performance, but I haven't seen anything advertised with a 100 MHz (say) target.
Mechanically I have a fair bit of width to work with per board but boards will be packed fairly close together in the depth direction; total target depth is 55mm. So longer/thinner connectors are better than a more square shape.
From a mechanical and cost standpoint, 64-pin DIN 41612 (Eurocard) connectors (type B / dual row) are attractive. But they specifically call out a 3 MHz max design speed. This feels like undershooting; I have driven SPI point to point at 10 MHz from an MCU on a breadboard over flying wires.
Main question here: Am I crazy to think this connector will work? Is there something else worth looking at instead? And do I do anything to impedance-match the pcb traces to the pin connections?
Pin arrangement
I will have plenty of pins for GND, although not so many that I can just bury each of the SPI signals in an isolated "C" of GND pins built over the two rows.
There will be eight SPI chip select pins; I was planning to multiplex their use with four "board select" pins as well. Since CS and BS signals will be frozen during an SPI transaction, can I use these as some of the "reference shield"?
That is, assuming "g" is GND, "c" is a CS or BS signal, and "S" is a main high speed SPI signal like MOSI or CLK, is something this a smart / feasible way to do the pinout?
g S c S c ...
g g c g c ...
Driver and termination
I planned to have SPI signals buffered at the entry point to each board, e.g. via SN74AHC245. The CS pins would be similarly buffered, with a "board select" signal disabling the CS buffer when CS signals are relevant to a different board.
There will unavoidably be stubs coming off the backplane to each driver IC although it will be fairly short / close to the connector.
Some advice I'd seen elsewhere is to have SPI devices wired point to point and then use series termination. p2p is not possible on a bus, it's necessarily a kind of star / daisy chain-ish configuration. If the driver chips (the '245s) have CMOS / high Z inputs, is the issue with the stub or with the receiving IC pin / transistors? If the latter can I use the DIR and OE pins of 74AHC245 to make it look like the '245 input is effectively disconnected from the trace when not in use? Or does it not matter? (Short of a relay, I can't mechanically disconnect the deselected boards.)
My default idea for driving the bus is the output of another SN74AHC245 with a source-side series resistor as terminator.
On a given PCB, the input driver / buffer's output will fan out to up to 8 SPI devices. Daisy chain them, use source termination to 50 or 100 ohm, and control trace impedance to the same? Or don't worry?
With all of the above implemented, the connection chain would be:
MCU MOSI/CLK output GPIO - SN74AHC245 - 27R - backplane c'tor - '245 (x4) - 27R - (board-specific devices x1-8)
... Or do I need parallel termination in some place(s)? I'm not sure how to do this with multiple devices on a board or bus though.