You are probably going to have to add some active components to this board to get it to work with Raspberry Pi cameras.
I’m working on doing something similar for the Orange Pi 5 (which unfortunately opted to use a painfully tiny 0.4mm SMT connector). The RPi boards use 3.3V I/O, including for the I2C and GPIO used for the camera connectors. Consistent with that, at least one camera schematic (for v2 camera) showed an onboard 3.0V regulator for DOVDD.
However, the Rock 5B is using only 1.8v I/O for those signals. For example, on page 15 of the Rock 5B schematic, the VCCIO1 domain, which provides the camera I2C signals (pins G27 and G39), is set to 1.8V and these signals also have pull-up resistors to 1.8V. The OPi5 is the same. You might get lucky and have the camera module interpret 1.8V logic signals correctly, but you’ll likely run into it not working at all or not working sometimes.
So, you can do one of several things to address this:
- Identify the DOVDD regulator on the camera module, and swap in a 1.8V regulator. This probably works for most of the Omnivision cameras. I don’t know about the Sony cameras.
- Add a couple of level translator ICs to the adaptor board. There are even I2C specific translators that handle the bidirectional signaling and high Z states for SDA. You will likely need to send 1.8V power to your adapter board, or also add a little 1.8V regular to your board.
- Route a few of the 3.3V logic level signals from the GPIO connector to the adapter board, such as pins 3 and 5 for I2C. You’ll have to revise the device tree accordingly, since you’ll be changing the I2C device and GPIO. You also end up with two sets of wires going between the Rock 5B and your board. One possible plus is that you likely can take the already made adapter board and rework it by cutting a few traces and soldering on wires for the GPIO connector.
Since I was stuck needing to make a PCB anyway, I’ve opted for number 2. Just sent the PCB design off to OSH Park, with fingers crossed that I’ve got all my pinouts correct. Unfortunately, given the difference in connectors, my board is not useful for the Rock 5B.
FWIW, differential length matching is pretty easy in KiCAD 7. The feature was there in earlier releases, but the trace length calculations were buggy and not fixed until 7.0 rc1. Each differential trace pair must be very closely matched (0.15mm) to each other - dealt with by the differential skew menu item. Then the three (or five for 4 lanes) pairs need to be the same lengths - there is a menu item for hitting a target length. Finally, you need to work out the width and spacing for the pairs of traces to have 100 ohm impedance - there are calculators for this. A four layer board is pretty much mandatory to have controlled impedance. Only thing that was a pain was rerouting trace pairs - KiCAD doesn’t treat them as a unit when pushing traces around.
Good luck!