Circuit review & bench-test guide
AXC-005 — nRF24L01+ socket carrier PMOD module
Document purpose#
This document explains the axc-005-nrf24 PMOD module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on generate_design.py, README.md, and the ERC report in reports/.
This board has never been fabricated. Repository status is schematic generated, ERC clean (0 errors / 0 warnings), netlist reviewed; PCB layout not started; not released. There is no PCB, no BOM export, no DRC record, and no first-article bench result. Every number below is a target to verify against real hardware, not a proven result.
1. What the board does#
The board is a socket carrier for the ubiquitous nRF24L01+ 2.4 GHz packet-radio breakout — no RF silicon lives on this PCB. A standard 2×4 socket (J2) accepts the breakout; the carrier adds the platform's SPI conditioning, the CE/~IRQ control network, and — critically — bulk capacitance at the socket to survive the transmit power-amp ramp. It is a PMOD Type 2A "expanded SPI" module: SPI mode 0 at ≤ 8 MHz (10 MHz absolute max), CE to trigger/gate the radio, and an active-low ~IRQ on a PMOD pin per the platform interrupt rule. It is the cheap two-way robot remote, pairing with the joystick (axo-013) and the actuator line.
Functional block diagram#
PMOD host (3.3 V) Carrier nRF24L01+ breakout
┌────────────────┐ ┌──────────────────────┐ ┌────────────────────┐
│ 1 CS_N ────────┼──>│ J2.4 CSN │ │ SPI slave │
│ 2 MOSI ────────┼──>│ J2.6 MOSI │ │ 2.4 GHz ShockBurst │
│ 3 MISO <──R1───┼───│ J2.7 MISO │ │ PCB antenna ►► │
│ 4 SCK ─────────┼──>│ J2.5 SCK │ │ (hangs off-board) │
│ 7 IRQ_N <─R2───┼─┬─│ J2.8 IRQ (R3 10k PU)│ │ │
│ 8 CE ──────────┼─│─│ J2.3 CE (R4 10k PD)│ │ 1 GND 2 VCC │
│ 6/12 3V3 ──────┼─│>│ J2.2 VCC ─ C1 100n + │ │ │
│ 5/11 GND ──────┼─┴─│ J2.1 GND C2/C3 2×10µ │
└────────────────┘ └──────────────────────┘ └────────────────────┘
2. Safety and scope boundaries#
- Everything is 3.3 V; hazard to people is negligible. The two real risks are brownout during the TX power-amp ramp (the classic nRF24 failure: works in RX and on the bench supply, resets or "goes deaf" the moment it transmits from a thin rail) and a reversed breakout silently swapping VCC onto GND.
- ORIENTATION CHECK — before applying power. J2 pin 1 is the breakout's GND corner and pin 2 is VCC. The generic nRF24 breakout has its own 2×4 key/silkscreen; match the breakout's own pin-1 marking to J2 pin 1 before plugging it in. A 180°-reversed module puts 3.3 V onto the GND pin and ground onto VCC — instant damage. There is no keyed connector enforcing this on rev 1 (silkscreen only), so it is a manual check every time.
- The nRF24L01+ is a 3.3 V part; its logic is NOT 5 V tolerant on VCC. Never feed 5 V at J2. There is no regulator on this board — the socket VCC is the PMOD/external 3.3 V directly.
- Standalone bench work must use a current-limited 3.3 V supply set to ~250 mA. A 100 mA limit will collapse the rail during the TX ramp and produce the exact brownout signature you are trying to avoid.
- RF keep-out is a layout promise: the socket sits at the board edge so the breakout's PCB antenna overhangs off-board. Do not operate it pressed against metal or a ground plane.
- ERC-clean is a schematic check only. Bulk-cap placement at the socket pins and antenna overhang are layout obligations, not proven facts.
3. Power and control sequence#
- Socket VCC (J2.2) comes from PMOD 3V3; C1 (100 nF) + C2/C3 (2 × 10 µF) sit right at the socket to source the TX-ramp current the breakout's own small caps cannot.
- The breakout powers up in Power Down and the host brings it through Standby to active modes via the CONFIG register.
- CE idles low — R4 (10 k) is a pull-down, so the radio stays in Standby-I until the host deliberately drives CE high. This prevents a floating CE from starting an unwanted transmit at power-on.
- ~IRQ (J2.8) is active-low and pulled up by R3 (10 k) on-carrier; it asserts on TX-done, RX-done, or MAX_RT and reaches the host through R2.
- SPI mode 0: CSN low selects the radio; commands (R_REGISTER / W_REGISTER / W_TX_PAYLOAD, etc.) clock at ≤ 8 MHz.
- To transmit: load a payload, then pulse CE high for > 10 µs; the PA ramps (the current spike) and the packet goes out with auto-ack. To receive: hold CE high to keep the radio listening.
4. Interfaces#
| Reference | Pins/signals | Intended use |
|---|---|---|
| J1 | 12-pin PMOD plug, Type 2A | 1 ~CS(CSN), 2 MOSI, 3 MISO (via R1), 4 SCK, 7 ~IRQ (via R2), 8 CE, 5/11 GND, 6/12 3V3, 9/10 NC |
| J2 | 2×4 pin socket, 2.54 mm | nRF24L01+ breakout socket: 1 GND, 2 VCC, 3 CE, 4 CSN, 5 SCK, 6 MOSI, 7 MISO, 8 IRQ. Pin-1 = GND corner; match the breakout key |
There are no dedicated test points; bench probing is at J1 pins, the socket pins, and the passive bank.
5. Component-by-component review#
5.1 Socket and radio#
| Ref. | Part | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| J2 | 2×4 pin socket, 2.54 mm (PinSocket_2x04_P2.54mm_Vertical); plug-in = nRF24L01+ breakout | Accepts the radio breakout and carries VCC/GND/SPI/CE/IRQ | No radio | Reversed breakout swaps VCC↔GND — kills the module. A bent/open socket pin gives partial SPI (looks dead or intermittent); the breakout is 3.3 V, not 5 V-tolerant |
5.2 SPI/IRQ conditioning and CE default#
| Refs. | Value | Function | If omitted or wrong |
|---|---|---|---|
| R1 | 100 Ω | Series protection on the module-driven MISO line | Open = host reads no SPI data: CONFIG/STATUS read as 0x00/0xFF, radio looks dead though fine |
| R2 | 100 Ω | Series protection on the module-driven ~IRQ line | Open = host never sees the interrupt: TX/RX/MAX_RT events appear to hang |
| R3 | 10 kΩ to 3V3 | ~IRQ pull-up (active-low interrupt idles high on-carrier per line rule) | Missing = ~IRQ floats; spurious or missed interrupts |
| R4 | 10 kΩ to GND | CE pull-DOWN — radio stays in Standby until the host drives CE high | Missing = CE floats; the radio can start transmitting/listening at power-on unbidden. A pull-up here would be wrong (auto-TX) |
5.3 Socket bulk and decoupling#
| Refs. | Value | Function | If omitted or wrong |
|---|---|---|---|
| C1 | 100 nF 16 V X7R | Socket HF decoupling | Rail noise into the synthesiser; spurs, unstable link |
| C2, C3 | 10 µF 10 V X5R each (20 µF total) | Socket bulk for the TX power-amp ramp — the classic nRF24 brownout fix | Brownout on transmit: resets, MAX_RT storms, "works in RX only". Do not shrink or omit — this is the whole point of the carrier |
| #FLG01–02 | ERC power flags (3V3, GND) | Bookkeeping only | — |
Every ref-des is covered: J1, J2, R1–R4, C1–C3.
6. Datasheet summary and design interpretation#
| Device | Key manufacturer facts used here | Board-specific interpretation |
|---|---|---|
| Nordic nRF24L01+ | 1.9–3.6 V supply (not 5 V tolerant on VCC); SPI mode 0 ≤ 10 MHz (design uses ≤ 8 MHz); CONFIG register at address 0x00, power-on reset value 0x08 (EN_CRC set); CE > 10 µs pulse triggers TX, CE high sustains RX; ~IRQ active-low on TX_DS/RX_DR/MAX_RT; TX PA ramp draws a current spike (tens of mA, up to ~115 mA transient class at 0 dBm+PA settings) | The CONFIG read (expect 0x08 after POR) is the SPI bring-up gate. R4's CE pull-down enforces safe Standby default. The 2×10 µF bulk targets the PA-ramp spike |
| nRF24 breakout module | Generic 2×4 pinout: 1 GND, 2 VCC, 3 CE, 4 CSN, 5 SCK, 6 MOSI, 7 MISO, 8 IRQ; PCB or +PA/LNA variants | Orientation is the hazard — pin 1 is the GND corner; the design flags this on schematic and (at layout) silkscreen |
| Enhanced ShockBurst | Auto-ack, auto-retransmit (ARC/ARD), 6 RX pipes, CRC | The two-module ping test exercises addressing + auto-ack end to end |
The nRF24L01+ datasheet is the Nordic Product Specification; verify the exact breakout variant (plain PCB-antenna vs +PA/LNA SMA), as the +PA/LNA variant draws far more TX current and needs even more bulk.
7. Expected values before bench testing#
All values are design targets for a board that does not yet exist.
| Quantity | Target | How to measure |
|---|---|---|
| VCC-to-GND, unpowered (breakout removed) | High (caps only), both polarities | DMM |
| MISO / ~IRQ series | ~100 Ω to the PMOD pin | DMM at R1/R2 |
| ~IRQ idle | ≈3.3 V (R3 pull-up) after power | DMM/scope |
| CE idle | ≈0 V (R4 pull-down) | DMM/scope |
| Socket pin-1 vs breakout pin-1 | GND-corner aligned | Visual + continuity |
| CONFIG register (0x00) after POR | 0x08 | SPI read, logic analyzer |
| Idle current (Standby-I) | ~tens of µA class (breakout dependent) | Bench supply |
| TX-ramp current spike | tens of mA (up to ~115 mA class on +PA/LNA); record actual | Current probe / 0.1 Ω shunt + scope — a DMM cannot catch it |
| Rail droop at socket during TX | VCC stays > 3.0 V | Scope, AC-coupled, at C2/C3 |
| Two-module link | TX node gets TX_DS (auto-ack RX), RX node gets RX_DR | STATUS register / ~IRQ on both nodes |
8. Manual schematic and assembly review checklist#
- Confirm J2 pin numbering: pin 1 = GND corner, pin 2 = VCC; verify against the specific breakout's key/silkscreen. Mark orientation on the board silkscreen at layout.
- Verify R4 is a pull-down to GND (CE default-standby), not a pull-up.
- Confirm R3 pulls ~IRQ to 3V3 and R1/R2 sit in the module-driven MISO/~IRQ paths; SCK/MOSI/CSN/CE are direct.
- Confirm C2/C3 are the 10 µF parts and (at layout) sit tight to the socket VCC/GND pins.
- Layout (future): socket at the far edge so the breakout antenna overhangs off-board; no metal/pour under the antenna.
- Confirm host gateware idles CSN high and CE low except during deliberate TX pulse / RX hold.
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record board serial, breakout variant and marking, and supply identity. Verify breakout orientation before every power-on.
A. Unpowered inspection and resistance tests (breakout removed)#
- Visual: socket, passive bank, silkscreen orientation mark.
- DMM: VCC-to-GND both polarities; MISO/~IRQ series ≈ 100 Ω; ~IRQ to 3V3 ≈ 10 k; CE to GND ≈ 10 k. Confirm no VCC-GND short.
B. Orientation and power-on#
- Confirm the breakout's pin-1/GND marker aligns with J2 pin 1, then seat it fully.
- Power at 3.3 V, 250 mA limit. Expect a small idle current, no heating. Any large current draw = suspect a reversed breakout — remove power.
C. SPI identity and register bring-up#
- With a logic analyzer or host in a safe mode (CE held low), read CONFIG (0x00); expect 0x08 after a fresh power-on. A wrong value stops the test — debug SPI/CSN/orientation first.
- Write and read back a scratch register (e.g. an address register or RF_SETUP) to confirm write access.
- Read STATUS and the FIFO_STATUS to confirm sane defaults.
D. Transmit-ramp / brownout characterisation (the carrier's core test)#
- Insert a current probe/shunt in the 3.3 V feed; scope it and VCC (at C2/C3) simultaneously.
- Configure a PTX, load a payload, and pulse CE high > 10 µs. Capture the PA-ramp current spike and the minimum VCC. VCC must stay > 3.0 V.
- Deliberately reproduce the brownout signature once for the record: set the bench limit to 100 mA and transmit repeatedly; document the resets / MAX_RT behaviour so field failures are recognisable. Restore 250 mA after.
E. Two-module ping test (the real RF test)#
- Bring up a second nRF24 node (a second AXC-005 is ideal) with matching channel, data rate, address, and auto-ack.
- PTX pulses CE, sends a payload; confirm TX_DS (auto-ack received) on the transmitter and RX_DR on the receiver via STATUS/~IRQ.
- Log packet-error rate over N packets; sweep a couple of data rates and channels. Check antenna overhang / no nearby metal.
F. Host (PMOD) bring-up and robustness#
- Repeat C–E through the FPGA fabric SPI; compare against a logic-analyzer tap. Exercise the CE-pulse and ~IRQ handling from gateware.
- Measure PMOD 3V3 droop at the socket during a TX ramp before trusting long sessions.
- 50 power cycles with a transmit each time; count failures.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| Large current at power-on / hot module | VCC-GND, orientation | Reversed breakout (VCC↔GND) — power off immediately |
| CONFIG ≠ 0x08 / reads 0x00 or 0xFF | SPI lines, CSN, MISO at R1 | R1 open, CSN wiring, orientation, dead/absent breakout |
| Radio transmits at power-on unbidden | CE idle level | R4 wired as pull-up instead of pull-down, or CE floating |
| ~IRQ never asserts | ~IRQ at R2, R3 pull-up | R2 open, R3 missing, DioMapping/config |
| Resets / MAX_RT storms on TX | Shunt + VCC droop at C2/C3 | Supply limit too low, C2/C3 missing, thin rail — the classic brownout |
| Link fails despite good SPI | Channel/rate/address match, antenna | Mismatched RF config, antenna against metal, +PA/LNA needs more bulk |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial; breakout variant + marking | |
| Orientation verified (pin-1/GND) | |
| Supply / shunt / analyzer IDs and calibration | |
| Unpowered resistance results (9.A) | |
| CONFIG read after POR | |
| TX-ramp peak current, min VCC | |
| Brownout reproduction notes (9.D.3) | |
| Two-module ping result (TX_DS / RX_DR, PER) | |
| Channels / data rates tested | |
| Host rail droop measurement | |
| Deviations, photos, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
This carrier carries no radio silicon — its whole value is the socket, the control-default network, and the bulk. The two features that earn it are R4's CE pull-down (radio powers up safely in Standby, never transmitting on a floating pin) and the 2 × 10 µF socket bulk that keeps the TX power-amp ramp from browning out the rail. The two operating disciplines are the orientation check (pin-1 = GND corner; a reversed breakout swaps VCC onto GND and destroys it) and the CONFIG = 0x08 read as the SPI bring-up gate. The most valuable bench activity is the shunt-and-scope TX-ramp capture in 9.D, and the two-module ping in 9.E is the real RF proof. Open risks: no PCB exists (bulk placement and antenna overhang are promises), and the +PA/LNA breakout variant, if used, needs even more bulk than rev 1 provides.