BoardRepo electronics project sharing
100%
Open file
cm5-reveng BCM2712_GND view

Imported from GitHub: schlae/cm5-reveng · commit 7fe61ca

Description

Reverse engineered Raspberry Pi Compute Module 5

README

Reverse Engineered Raspberry Pi Compute Module 5

Board layout with all the layers turned on

This is the reverse engineered schematic and layout for a Raspberry Pi Compute Module 5. It's not meant to be fabricated--critical signal integrity parameters aren't correct, it's not 100% faithful to the original, the footprints aren't a perfect match, and the bill of materials is not reverse engineered. You also won't be able to obtain most of the chips since they are custom for this design or only available to large customers, not through a distributor.

I'm sure folks will want the schematic of the regular Pi 5, but I don't have plans to reverse engineer that.

Schematic PDF

Bonus schematic of the RM0 WiFi/Bluetooth module

Why?

I needed to solve some design issues with a project that uses one of these modules, but the schematic was not available. Fortunately, with a little reverse engineering work, I was able to back out the schematic and solve my design issues.

It's useful mainly for educational purposes or advanced hacking. For example, now that the PMIC pinout is known, the I2C register map could be explored. It's a great little part--if you accidentally blow up a CM5, you might be able to remove everything except for the PMIC, program it over I2C, and use it to power another project.

How?

I removed all the parts from the board, measured them with an LCR meter (and VNA, in the case of the ferrite beads), and then sanded down the board one layer at a time, imaging each with a flatbed scanner at 9600 DPI. KiCad layout lets you embed images which is great for tracing.

Fun Trivia

The resistors in the upper right corner that select the memory and eMMC configuration are not zero-ohm devices. Each possible position has a specific resistor value, forming a resistor divider with a 10K resistor, so that the RP1 can measure the voltage with two ADC inputs and determine the configuration.

The board has 10 layers. It is what's known as a 2+6+2 configuration since it has four layers of microvias: layer 1-2, 2-3, 8-9, and 9-10. There are buried mechanical vias from layers 2-9, and standard through-board vias from layers 1-10.

The PMIC has a hot-swap function to limit the inrush current to the >350uF of capacitance on the 5V rail. External capacitance on the carrier board is probably unnecessary.

The WiFi and Bluetooth functions can be disabled (through GPIO) from the BCM2712 as well as the connector pins. You can detect this externally by monitoring the voltages on the BT_nDISABLE and WL_nDISABLE pins.

The CM5 with onboard eMMC will not conflict with an external SD card (wired to the pins on the connector). This is because the SD pins are unconnected on this version of the module.

The original board has no designators, so the ones in this design are made up, with the exception of the test points, which are documented in the official RPi datasheet.

The 5V input goes through a hot-swap circuit with a series pass MOSFET. Since there is a test point on either side of the MOSFET and the part number is known (DMG7430LFG), you could monitor the voltage across and compute the supply current based on the MOSFET RDSON.

Board Stackup

By very carefully sanding through the board one layer at a time, I figured out the approximate stackup using digital calipers.

LayerApproximate Thickness (mm)Function
1Cu0.0522Top layer
PP0.0450
2Cu0.0522Ground, PMIC LX, some signals. Reference layer for 1 and 3.
PP0.0600
3Cu0.0348Signal and power.
PP0.1400
4Cu0.0348Ground.
Core0.0600
5Cu0.0522Power, limited signal.
PP0.1176
6Cu0.0522Power.
Core0.0600
7Cu0.0348Ground.
PP0.1400
8Cu0.0348Signal and power.
PP0.0348
9Cu0.0522Ground. Reference layer for 8 and 10.
PP0.0450
10Cu0.0522Bottom layer

Updated Test Point List

The Raspberry Pi Compute Module 5 datasheet has a table of test points, but most of them are listed as "reserved." Here's a complete table. The coordinates are relative to the lower left corner of the board (if the board had a rectangular corner instead of being rounded off), increasing to the right and upwards. Note that, in the KiCad layout, the lower left corner is at 100mm x 100mm, and the Y axis is flipped, decreasing as you move up. To change a coordinate from this table to KiCad, add 100 to the X coordinate, and subtract the Y coordinate from 100.

ReferenceXYNAMEDESCRIPTION
MH451.536.5Mounting Hole
MH33.536.5Mounting Hole
MH251.53.5Mounting Hole
MH13.53.5Mounting Hole
TP114.3417.54+5VRaw 5V power to board.
TP28.81.3RUNUnknown PMIC status output, possibly power good.
TP351.232.6GND
TP44.813PMIC INTPMIC interrupt output (likely).
TP724.27.5GND
TP81.6515.05GND
TP91.510.05VREF_3V3Analog 3.3V to RP1 for ADCs.
TP1048.415.1VREGUnknown regulated voltage to RP1.
TP1342.67.3GND
TP1514.76.6VDD_0V8_LDO0.8V LDO regulator to BCM2712.
TP169.334.9nRPIBOOTHold low for boot mode.
TP1737.48.1VDD_3V3_2Secondary 3.3V rail for NOR flash and eMMC.
TP2124.512514.025nRESET_OUTBCM2712 reset output (status).
TP2213.087511.225PMIC_SIGUnknown PMIC signal. Could be for PMIC OTP programming.
TP2617.720.2GND
TP2743.622.3VDD_1V1_RP1RP1 1.1V core voltage supply.
TP2815.416VDD_BCM_COREBCM2712 core voltage rail. Nominally 0.8V.
TP2923.6521.55VDD_0V8_BCMBCM2712 auxiliary 0.8V rail.
TP3037.234.9VDD_0V6LPDDR4 VDDQ supply.
TP319.13.2VDD_1V1LPDDR4 VDD2 supply.
TP321.513VDD_3V7_WIFI3.7V rail for WiFi radio.
TP334736CM5_3V3Main 3.3V supply rail.
TP3450.515.5CM5_1V8Main 1.8V supply rail.
TP351137.8DEBUG_UART_TXDebugging UART transmit output.
TP368.537.1DEBUG_UART_RXDebugging UART receive input.
TP3922.16.1EN_LOAD_SWITCHEnables VDD_3V3_2 and VDD_1V8_2 when asserted.
TP406.715.2PMIC_SCLPMIC I2C bus clock.
TP418.715.3PMIC_SDAPMIC I2C bus data.
TP4211.434.9PWR_BUTPower button signal to PMIC.
TP4451.730.2VDD_2V5_RP1RP1 internal voltage regulator: 2.5V supply.
TP4553.128.7VDD_1V1_RP1RP1 internal voltage regulator: 1.1V supply.
TP46734.7GND
TP4821.615.4SOC_TRST_NBCM2712 JTAG test reset input.
TP4921.613.3SOC_TDIBCM2712 JTAG test data input.
TP5020.417.2SOC_TDOBCM2712 JTAG test data output.
TP5120.38.8SOC_TMSBCM2712 JTAG test mode select.
TP5219.911.9SOC_TCKBCM2712 JTAG test clock.
TP5753.232RP1_TPUnknown RP1 signal.
TP604838.7GND
TP616.5751.225GND
TP6222.231.6GND
TP638.718.25V_SENSEMain board 5V rail, after hot-swap/inrush limiting MOSFET.
TP6447.35.4VDD_1V0_PHYBCM54210 internal voltage regulator: 1.0V supply.
TP6528.27.5USBC_D_NBCM2712 USB 2.0.
TP6626.17.5USBC_D_PBCM2712 USB 2.0.
TP67738.6LED_nPWRPower LED, driven by RP1.
TP681337.5LED_nACTActivity LED, driven by BCM2712.
TP6938.825.9ETH0_P
TP7039.624.2ETH0_N
TP7143.814.1ETH1_N
TP7245.613.1ETH1_P
TP7342.431.7ETH2_P
TP7442.633.7ETH2_N
TP7541.637.8ETH3_P
TP7642.936.1ETH3_N
TP7714.3719.52+5VRaw 5V power to board.

RP1 Pinout Mysteries

There are some pins that have not been identified because they're not connected on the CM5:

PinGuess
A2
B3
C2
C3
C4
D1
E3
E10
E15
F1
F2
F3
F7
G1
G2
H1
H3
H7
H17USB 2.0?
H18USB 2.0?
J15
J17
L13
L15
M17USB 2.0?
M18USB 2.0?
R4
T3
T4
T13
T14
V2
V3

Future Work

  • PCIe (BCM2712 to RP1) net identification
  • RP1 to BCM2712 net identification
  • PMIC I2C register map

License

CC BY-SA 4.0