← AXC-003

Circuit review & bench-test guide

AXC-003 — ESP32-C3 WiFi/BLE co-processor PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axc-003-wifi 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 carries an Espressif ESP32-C3-WROOM-02 module (substituted per the line README for the catalog's ESP32-C3-MINI-1 — same C3 silicon) as a UART AT-command modem: the FPGA stays the brain, the ESP32 is the radio. PMOD Type 3 wiring adds EN (via solder jumper JP1) and GPIO9/BOOT so the host can drop the module into the ROM serial bootloader for reflashing. The SPI-capable GPIOs are routed to a DNP header (J2) so the esp-hosted upgrade is firmware + header only. Power is the board's defining constraint: WiFi TX bursts reach ~350 mA against a PMOD rail that should only be assumed good for ~100 mA, so the module carries 30 µF of local bulk and a JP2 rail-source jumper for external 3.3 V.

Functional block diagram#

PMOD host (3.3 V)             Module
┌────────────────┐   ┌────────────────────────────────────────┐
│ 1 EN_HOST ─────┼──>│ JP1 (bridged) ── EN (R1 10k PU, C1 1µ) │
│ 2 TXD ─────────┼──>│ U1 RX (IO20)      U1 ESP32-C3-WROOM-02 │
│ 3 RXD <───R5───┼───│ U1 TX (IO21)      (PCB antenna ►►      │
│ 4 BOOT ────────┼──>│ GPIO9 (R2 10k PU)  faces off-board)    │
│ 6/12 3V3 ──────┼──>│ JP2 1-2 ─┬─ ESP_3V3                    │
│ 5/11 GND ──────┼───│          │  C2 100n + C3/C4/C5 3×10µ   │
└────────────────┘   │ J3 EXT 3V3 (DNP) ─ JP2 2-3             │
                     │ straps: R3 (IO2), R4 (IO8) 10k PU      │
                     │ J2 (DNP 2×3): IO6/7/2/10 + IO3/4 SPI   │
                     └────────────────────────────────────────┘

2. Safety and scope boundaries#

3. Power and boot sequence#

  1. ESP_3V3 comes from PMOD 3V3 through JP2 1-2 (default) or from J3 external 3.3 V through JP2 2-3. Cutting the 1-2 side fully isolates the PMOD 3V3 pin. C2 (100 nF) + C3/C4/C5 (3 × 10 µF) buffer TX bursts.
  2. EN rises through R1 (10 k) delayed/deglitched by C1 (1 µF); with JP1 bridged (default) the host can also drive EN via PMOD pin 1.
  3. Boot-mode straps sample while EN rises: GPIO9 (BOOT) high via R2 → normal SPI-flash boot; GPIO2 high via R3 and GPIO8 high via R4 — both must be 1 for the valid boot modes. Host drives GPIO9 low and pulses EN low → ROM serial download mode for flashing.
  4. In normal boot the AT firmware starts, prints a boot banner on its UART, and answers the AT command set at 115200 8N1 (AT firmware default).
  5. FPGA TXD (PMOD pin 2) drives ESP RX (IO20) directly; ESP TX (IO21) reaches PMOD pin 3 through R5 (100 Ω).
  6. On AT+CWJAP (join AP) the radio transmits: current bursts to ~350 mA. This is where thin rails fail.

4. Interfaces#

ReferencePins/signalsIntended use
J112-pin PMOD plug, Type 31 EN (via JP1), 2 TXD (host out), 3 RXD (host in), 4 GPIO9/BOOT, 5/11 GND, 6/12 3V3, 7–10 NC
J22×3 header (DNP)esp-hosted SPI upgrade: IO6/IO7/IO2/IO10 + IO3/IO4 handshake — pin roles are firmware-defined; confirm against esp-hosted docs at bring-up
J3Phoenix screw terminal (DNP)External 3.3 V feed (1 = +3V3, 2 = GND, common with PMOD GND); fit for JP2 2-3
JP12-pad solder jumper, bridgedHost control of EN; cut to isolate
JP23-pad solder jumper, 1-2 defaultESP rail source: PMOD 3V3 / external J3

There are no test points defined yet; bench probing is at J1/J2/J3 pins, the jumpers, and the WROOM castellations.

5. Component-by-component review#

5.1 Module and expansion#

Ref.PartFunction and why neededIf absent/openIf shorted, wrong, or misassembled
U1Espressif ESP32-C3-WROOM-02-N4WiFi 4 + BLE 5 modem, 4 MB flash, PCB antenna, AT firmwareBoard inertCastellation opens on 3V3/GND/UART give partial function; copper or silkscreen under the antenna area (layout) wrecks RF; a module shipped without AT firmware looks dead on UART — flash it (9.C)
J22×3 pin header, DNPesp-hosted SPI path (IO6/7/2/10 clock/data + IO3/IO4 handshake/data-ready)Nothing — rev 1 runs UART ATPopulating it adds stubs to strap line IO2: keep unfitted until the esp-hosted lesson, then re-verify boot
J3Phoenix MKDS-class screw terminal, DNPExternal 3.3 V for TX-heavy useNothing in default buildReverse polarity at J3 kills the module — mark polarity on silkscreen at layout

5.2 Straps, EN network, and UART conditioning#

Refs.ValueFunctionIf omitted or wrong
JP1solder jumper, bridgedHost EN control from PMOD pin 1Cut: module runs standalone off R1 — host reset impossible (fine for soak tests)
R110 kΩ to ESP_3V3EN pull-up: module boots with JP1 cut or host pin floatingMissing + JP1 cut = EN floats, module may not start
C11 µFEN delay/glitch filter — EN must rise after the rail is stableMissing = occasional cold-boot failures, worse with slow supplies
R210 kΩ to ESP_3V3GPIO9/BOOT pull-up: normal flash boot; host drives low for download modeMissing = boot mode at the mercy of a floating pin — intermittent download-mode entry
R310 kΩ to ESP_3V3GPIO2 strap (must be 1 in both boot modes)Missing = invalid boot mode possible; J2 population makes this worse
R410 kΩ to ESP_3V3GPIO8 strap (must be 1 for download mode)Missing = flashing intermittently fails while normal boot works — confusing signature
R5100 Ω seriesProtection on the module-driven ESP TX → host RXD lineOpen = host sees no UART: module looks dead even though it banners fine at its own pin

5.3 Power selection and bulk#

Refs.ValueFunctionIf omitted or wrong
JP23-pad solder jumper, 1-2ESP_3V3 source select: PMOD (1-2) or J3 (2-3)Both bridged = PMOD rail hard-tied to external supply — never; both open = module dead
C2100 nFModule HF decouplingRail noise into the radio
C3, C4, C510 µF each (30 µF total)TX-burst bulk reservoir (line current-spike rule, ~350 mA bursts)Brownout during TX: resets when joining AP, RSSI-dependent crashes; do not shrink or thin these
#FLG01–03ERC power flagsBookkeeping only

Every ref-des is covered: U1, J1, J2, J3, JP1, JP2, R1–R5, C1–C5.

6. Datasheet summary and design interpretation#

DeviceKey manufacturer facts used hereBoard-specific interpretation
ESP32-C3-WROOM-02 (datasheet)3.0–3.6 V supply; TX peak ~350 mA class (802.11b high power); strap pins GPIO2/GPIO8/GPIO9 sampled at EN/reset; ROM download mode via GPIO9=0; PCB antenna with keep-out requirements; UART0 on IO20/IO21The strap plan (R2/R3/R4) and the download-mode procedure follow the datasheet's boot-mode table. Antenna keep-out is a layout obligation the schematic cannot prove
Espressif ESP-AT firmware docsDefault UART 115200 8N1; ATOK; AT+GMR prints firmware versions; AT+CWJAP/AT+CWLAP for WiFiFirst-command sequence in 9.C/9.D keys on exactly these. If the purchased module lacks AT firmware, flash the WROOM-02 ESP-AT release first — a silent UART is not a hardware fault yet
esp-hosted docsSPI slave pin roles are firmware-release-definedJ2's pin mapping is deliberately labeled "firmware-defined" — verify against the specific esp-hosted release before wiring a host
pmod-common/PMOD-SPEC-NOTES.mdAssume ~100 mA per PMOD rail350 mA ≫ 100 mA: the JP2/J3 external-feed path is not optional decoration for TX-heavy lessons; the ECP5 rail measurement is an open README item
Murata GRM / Yageo RC0603 (series)Standard passivesValues non-critical except keeping the full 30 µF bulk

7. Expected values before bench testing#

All values are design targets for a board that does not yet exist.

QuantityTargetHow to measure
ESP_3V3-to-GND, unpoweredHigh (caps only), both polaritiesDMM
PMOD 3V3 to ESP_3V3~0 Ω with JP2 1-2DMM
EN, BOOT, IO2, IO8 idle≈3.3 V (pull-ups) after powerDMM/scope
Idle current (AT firmware, not associated)~20–50 mA class (modem-sleep dependent)Bench supply
Boot bannerROM + AT banner at power-on on ESP TX, 115200 8N1Scope/terminal at J1 pin 3
AT responseOK within tens of msTerminal
AT+GMRAT core/SDK version stringsTerminal
TX current spike~350 mA peaks during association/TX bursts; record actualCurrent probe or 0.1 Ω shunt + scope — a DMM cannot see these
Rail droop at module during TXESP_3V3 stays >3.0 V at all timesScope, AC-coupled, at C3–C5
Download-mode entryGPIO9 low + EN pulse → ROM banner waiting for downloadTerminal
WiFi scanAT+CWLAP lists local APs with plausible RSSITerminal

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record board serial, module lot/marking, AT firmware version, and supply identity.

A. Unpowered inspection and resistance tests#

  1. Visual inspection: WROOM castellations, jumper states, passive bank.
  2. DMM: rail resistance both polarities; JP2 1-2 continuity; strap nodes to 3V3 ≈ 10 k; J1 pin 3 to ESP TX castellation ≈ 100 Ω.

B. Standalone power-on (bench supply, 3.3 V, 500 mA limit)#

  1. Feed J1 pins 6/5 (or J3 with JP2 2-3). Watch current: expect a brief inrush, then tens of mA. No heating.
  2. Scope ESP TX (module side of R5): boot banner burst at power-on. A 115200 banner proves the module, rail, EN network, and straps in one shot. If the banner is ROM-only gibberish ending in a boot-mode error, check the strap levels before suspecting the module.

C. AT firmware first contact (USB-UART, still no FPGA)#

  1. Attach a 3.3 V USB-UART: RX to J1 pin 3, TX to J1 pin 2, GND common.
  2. Power-cycle; capture the banner. Then send AT → expect OK, and AT+GMR → record every version line in the bench record.
  3. If there is no banner and no AT response: enter download mode (hold J1 pin 4 low, pulse EN low via pin 1, release pin 4), confirm the ROM loader banner, and flash the ESP-AT release for WROOM-02. A blank module is expected from some vendors — this step is bring-up, not repair.
  4. AT+CWLAP: scan and record APs/RSSI. This is the first real RF test.

D. TX current and brownout characterization (the board's core test)#

  1. Insert a current probe or 0.1 Ω shunt in the 3.3 V feed; scope the shunt and ESP_3V3 (at C3–C5) simultaneously.
  2. AT+CWJAP="ssid","pass": capture the association burst. Expect peaks toward ~350 mA; record actual peak, duration, and the minimum ESP_3V3 voltage. ESP_3V3 must stay above 3.0 V.
  3. Run sustained traffic (e.g. AT+PING loop or a TCP send loop) for 10 minutes; record droop and any resets.
  4. Deliberately reproduce the brownout signature once for the record: set the bench limit to 100 mA and attempt AT+CWJAP. Document the symptoms (reset banner mid-association, WIFI DISCONNECT, garbled output) so field failures are recognizable. Restore 500 mA after.

E. Hosted bring-up (FPGA PMOD host)#

  1. Measure the host rail: scope PMOD 3V3 at the module during a repeat of D.2 before trusting long TX sessions — this is the README's open ECP5 budget item. If droop approaches 3.0 V, move to JP2 2-3 + J3 external feed and record the decision.
  2. Fabric UART at 115200: repeat AT/AT+GMR/AT+CWLAP through the FPGA; compare against a parallel USB-UART tap.
  3. Exercise host-controlled reset (pin 1) and download-mode entry (pins 1+4) from gateware; confirm re-flash works through the PMOD.
  4. Run the MQTT/cloud lesson flow end to end (join, publish, disconnect) with current logging.

F. Robustness checks#

  1. 50 power cycles with association each time; count failures.
  2. JP2 2-3 external-feed configuration: verify isolation (PMOD 3V3 pin shows no connection to ESP_3V3) and repeat D.2.
  3. Range/orientation sanity: RSSI vs antenna orientation, and confirm no metal within ~10 mm of the antenna end during all tests.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No boot banner at module pinESP_3V3, EN level/riseJP2 open, C1/R1, EN held low by host, dead module
Banner at module, nothing at hostJ1 pin 3 continuityR5 open, USB-UART wiring, host pin direction
Banner OK, no AT responseTXD path (pin 2 → IO20), baudHost-TXD open, wrong baud, module lacks AT firmware (flash it)
Resets when joining APShunt capture + ESP_3V3 droopSupply limit too low, bulk caps missing, thin PMOD rail — the classic brownout
Download mode won't enterGPIO9/GPIO8 levels during EN pulseR2/R4 straps, host sequencing, JP1 cut
Boots to gibberish / boot loopStrap levels at EN riseGPIO2/GPIO8 (R3/R4), J2 stubs if populated
WiFi works, terrible RSSIAntenna surroundingsMetal near antenna, module on a ground plane, damaged module shield
Host rail sags others' modulesPMOD 3V3 scope during TXMove to JP2 2-3 external feed

11. Bench record template#

FieldRecord
Board revision / serial; module lot/marking
AT firmware version (AT+GMR, full output)
JP1/JP2 states; J2/J3 fitted?
Supply / USB-UART / current-probe IDs and calibration
Unpowered resistance results (9.A)
Boot banner capture reference
TX peak current, duration, min ESP_3V3
Brownout reproduction notes (D.4)
Host rail droop measurement (E.1) and feed decision
Power-cycle/association loop result
Deviations, photos, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The schematic is small but every part of it exists for a boot or power reason: three strap pull-ups and the EN RC decide whether the module boots at all, and the 30 µF bulk plus the JP2/J3 external-feed path decide whether it survives its own transmitter. The single most valuable bench activity is the shunt-and-scope TX capture in 9.D — it converts the line's "~350 mA vs ~100 mA PMOD budget" warning from folklore into a measured number for this host, and the deliberate brownout reproduction gives field debugging a reference signature. Open risks: no PCB exists (antenna keep-out and bulk placement are promises), the ECP5 rail budget is unmeasured, purchased modules may ship without AT firmware, and the J2 esp-hosted pin roles are firmware-defined and unverified.