pixalynx/nrf9151-gps-tracker
A compact 44×32 mm, 4-layer nRF9151 LTE-M/NB-IoT/GNSS tracker PCB with nPM1300 LiPo/USB-C power, nano-SIM/eSIM switching, nRF7002 Wi‑Fi scanning, accelerometer, antennas, buzzer, LEDs, SOS button, and SWD/debug connectors.
- Version
- 0.1.4
- License
- unset
- Stars
- 0
research/nrf7002.md
# nRF7002 integration notes (verified 2026-09-23)
Primary source: **nRF7002 Product Specification v1.2 (4486_184)**, read from a distributor copy of the Nordic PDF
(docs.nordicsemi.com bundle `ps_nrf7002`). Section/table numbers below refer to that document.
## Pins (Table 24, QFN 6 x 6 mm, 0.4 mm pitch)
| Pin | Name | Use here |
| --- | --- | --- |
| 1 | OTPVDD | tied to PWRIOVDD (C57 100 nF) |
| 2-6, 21-24 | N.C. | open |
| 7 / 9 | TXRF1 (5 GHz) / TXRF0 (2.4 GHz) | to the diplexer high / low band |
| 8 / 10 / 12 | PAVDD1 / PAVDD0 / PALDO | tied together, C52 100 nF + C51 4.7 µF |
| 11 | SXLDO | C54 0.47 µF |
| 13 | VBAT | 3.3 V rail, C46 4.7 µF (bottom side, as Nordic's layout) |
| 14 | RFVDD | C53 22 nF |
| 15 | RFBUCKVDD | VDD_BUCK, C43 0.22 µF |
| 16 | XOLDO | C55 2.2 µF |
| 17 / 18 | XOP / XON | 40 MHz crystal, no load capacitors |
| 19 | AFELDO | C56 1 µF |
| 20 | AFEVBAT | 3.3 V rail, C45 1 µF |
| 25 | BUCKVBAT | 3.3 V rail, C41 4.7 µF |
| 26 | BUCKOUT | L5 3.3 µH -> VDD_BUCK (C42 4.7 µF) |
| 27, 28 | BUCKVSS | GND |
| 29 | BUCKVMID | C48 10 nF |
| 30 | BUCKEN | host GPIO (P0.01), 100 kΩ pull-down |
| 31 | BUCKVBATS | 3.3 V rail, C47 2.2 µF |
| 32 | PWRBUCKVDD | VDD_BUCK, C44 0.47 µF |
| 33 | DIGVDD | C50 1 µF |
| 34 | PWRIOVDD | C49 2.2 µF ("internally generated ... used for supplying OTPVDD ... cannot be used for anything else", §14.3.5) |
| 35-38 | SPI CLK / SS / MOSI / MISO | nRF9151 P0.28-P0.31 |
| 39, 40 | QSPI_DATA2/3 | open (SPI mode) |
| 41-45 | COEX_*, SW_CTRL0/1 | open (no Bluetooth radio to coexist with) |
| 46 | HOST_IRQ | P0.00 |
| 47, 49 (EP) | VSS | GND, 3 x 3 via array in the paddle |
| 48 | IOVDD | 1.8 V via nPM1300 load switch 2, C58 2.2 µF |
The JLC/EasyEDA footprint of C5370744 puts pin 1 at the left end of the bottom row (the datasheet view rotated
90 degrees CCW); `lib/footprints.tsx` `Nrf7002Qfn48` follows JLC so the assembly rotation needs no correction.
## Reference circuit (Figure 19 / Table 28)
C1-C18 as mapped above (Nordic designator + 40 = this board's designator), L1 3.3 µH 1 A 200 mΩ, X1 40 MHz 1612
CL = 8 pF ESR ≤ 100 Ω, U2 "2.4/5 GHz WLAN dual band diplexer". Buck-ground capacitors C1, C2, C4, C8 go to "an isolated
metal plane on top layer with vias to isolated metal plane on layer2 connecting only near thermal vias on the IC
paddle" — simplified here to the common ground (documented limitation).
## Supplies and sequencing (Table 11, §14.3.5, Table 14)
- VBAT 2.9-4.5 V (3.6 V nominal), IOVDD 1.62-3.6 V.
- Power-up: VBAT → wait ≥ 6 ms → BUCKEN → wait ≥ 1 ms → IOVDD.
- Power-down (made explicit in PS v1.3): drive all host-side I/Os low → IOVDD off → BUCKEN low → VBAT off. There are no delays, only the order.
- Shutdown 1.7 µA, sleep 15 µA, scan average 60 mA (~100 APs), TX 191 mA (2.4 GHz MCS7) / 260 mA (5 GHz) at max power.
- Because VSYS follows VBUS (up to 5.5 V) and BUCK2 of the nPM1300 is limited to 200 mA, VBAT comes from an RT9080-33
LDO (C841192) enabled by the host; Thingy:91 X uses a dedicated 3.3 V buck (nPM6001 BUCK3) for the same reason.
## Host software hooks (nRF Connect SDK)
- Zephyr `drivers/wifi/nrf_wifi/.../rpu_hw_if.c`: requires `bucken-gpios` and either `iovdd-ctrl-gpios` or
`iovdd-regulator`; asserts BUCKEN, waits 1 ms, then enables IOVDD.
- Thingy:91 X (`boards/nordic/thingy91x`): nRF7002 on `spi3` at 8 MHz, BUCKEN P0.07, IOVDD_CTRL P0.04, HOST_IRQ P0.05,
and a board hook `nrf_wifi_if_zep_start_board()` that switches the Wi-Fi supply regulator on first.
## Parts (jlcsearch, 2026-09-23)
| Ref | Part | LCSC | Stock |
| --- | --- | --- | --- |
| U5 | NRF7002-QFAA-R7 | C5370744 | 42 (JLC global sourcing may be needed) |
| X1 | K2B400000810 40 MHz 2016 8 pF ±10 ppm 30 Ω | C2835990 | 20k |
| FL1 | TDK DPX165950DT-8148A1 2.4/5 GHz diplexer 1.6 x 0.8 | C307668 | 6.7k |
| L5 | APLH2016-3R3MPTD9 3.3 µH 1.25 A 250 mΩ 0806 | C50325850 | 4k |
| U9 | RT9080-33GJ5 LDO | C841192 | 67k |
## Revision 1 Errata [9]: IOVDD leakage with floating pins
docs.nordicsemi.com, "nRF7002 Revision 1 Errata", anomaly [9] (build codes QFAA-B00, CEAA-A00). Floating pins raise IOVDD leakage; the part stays functional. Recommendations:
- pins 2–5: now called Reserved, connect to GND;
- pin 6: Reserved, leave unconnected;
- 35 QSPI_CLK/SPI_CLK, 37 QSPI_DATA0/SPI_MOSI and 38 QSPI_DATA1/SPI_MISO: pull down, on the PCB or through a host GPIO;
- 39 QSPI_DATA2, 40 QSPI_DATA3, 41 COEX_STATUS0, 42 COEX_REQ and 45 COEX_STATUS1/SW_CTRL1: GND if unused, otherwise pull down.
43 COEX_GRANT and 44 SW_CTRL0 are not listed. This board follows the table (index.circuit.tsx `wifi_gnd_*` ties, docs/firmware.md for the pull-downs).
## PS v1.3 recheck (docs.nordicsemi.com, 24 Sept 2026)
v1.3 (May 2026) is the current nRF7002 Product Specification. Its revision history lists changes to QSPI timing, electrical specs (IRX, ISCAN, boot current), pinout drawings/tables, reference designs ("Moved C20 entry to separate row", WLCSP), WLCSP mechanics, the power-down sequence, and a new "antenna switch signal" topic. Checked against this board:
- **Pin table (Table 1, QFN):** matches. Pins 2–5 are Reserved "Connect to ground", 6 and 21–24 are Reserved "Do not connect", 35/37/38 "Pull down", 39–42 and 45 "Connect to GND or pull down. Connect to GND if not used". These are the Errata [9] rules, now in the PS itself.
- **Reference schematic (Figure 3) and BOM (Table 6, QFN):** C1–C18, L1 3.3 µH, X1 40 MHz 8 pF and the diplexer have the same values and nets as C41–C58, L5, X1 and FL1 here. The figure also grounds pins 2–5 and leaves 6 open. It has no resistors, so no pull-downs on the reference PCB.
- **Supply sequencing:** power-up unchanged. The power-down order is new (see above and docs/firmware.md).
- **Antenna switch signal:** only concerns SW_CTRL0 driving a Wi-Fi/Bluetooth LE antenna switch. There is none here (passive diplexer, own U.FL), so SW_CTRL0 stays open.
- **Diplexer note:** separate low/high-band antennas instead of a diplexer would need a low-pass filter per port. Not applicable.