Circuit review & bench-test guide
AXS-046 — GPS/GNSS carrier PMOD module
Document purpose#
This document explains the axs-046-gps PMOD carrier 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 passive PMOD carrier for a 3.3 V UART GPS/GNSS breakout with PPS, intended to be an ATGM336H-class module (e.g. an ATGM336H-5N31 breakout, built on the AT6558 GNSS chip). The breakout plugs into a 1x5 socket; the carrier adds the Digilent PMOD Type 3 (UART) interface with the 1 Hz PPS signal riding in the pin-1 CTS position, series resistors on the two module-driven lines, and local decoupling. There is no active silicon on the carrier itself.
The FPGA host receives 9600-baud 8N1 NMEA sentences, parses them in fabric, and can discipline a fabric counter against the 1 Hz PPS edge.
Functional block diagram#
PMOD host (3.3 V) Carrier Plug-in breakout
┌───────────────┐ ┌──────────────────────────┐ ┌─────────────────┐
│ J1 pin 1 PPS │<─────│ PPS ──R2 100Ω── GPS_PPS <├───────│ PPS │
│ J1 pin 2 TXD ├─────>│ TXD ────────────────────>├──────>│ RX ATGM336H- │
│ J1 pin 3 RXD │<─────│ RXD ──R1 100Ω── GPS_TX <├───────│ TX class GNSS │
│ 3V3 (6, 12) ├─────>│ 3V3 ──┬──┬──────────────>├──────>│ VCC breakout │
│ GND (5, 11) ├──────│ GND C1 C2 ├───────│ GND + antenna │
└───────────────┘ │ 100n 10µ │ J2 └─────────────────┘
└──────────────────────────┘ 1x5 socket
TXD/RXD are named from the host FPGA's viewpoint: host TXD → module RX, module TX → R1 → host RXD.
2. Safety and scope boundaries#
- Voltages are limited to 3.3 V, so electrical hazard is low. The real risks are module destruction from a mis-ordered breakout (section 9.B) and wasted hours from indoor fix attempts (section 7).
- GPS breakout pin orders vary between vendors — VCC/GND/TX/RX appear in different sequences and some boards add EN or BAT pins. Never insert a breakout without completing the pin-order verification in 9.B.
- Standalone bench work must use a current-limited 3.3 V bench supply (100 mA limit; the module draws ~25 mA at 3.3 V, more briefly during acquisition).
- The module supply range is 2.7–3.6 V. Never apply 5 V to a 3.3 V-only ATGM336H breakout unless that specific breakout documents an onboard regulator.
- GNSS reception indoors is unreliable: a module may never achieve a fix indoors. Do not diagnose the carrier as faulty from an indoor no-fix alone; NMEA output (which starts before any fix) is the electrical health signal.
- ERC-clean is a schematic check only. No PCB exists; layout, DRC, fabrication, and assembly quality are all unverified.
3. Signal and power sequence#
- 3V3 and GND arrive from the PMOD host (pins 6/12 and 5/11) or the bench supply. C2 buffers acquisition-current peaks; C1 decouples the socket.
- The module boots and, within roughly 1 s, begins transmitting NMEA sentences at 9600 baud 8N1 on GPS_TX — boot banners (
$GPTXT) followed by$GNGGA,$GNRMC, etc. with empty position fields before a fix. - GPS_TX reaches the host RXD through R1 (100 Ω); the host UART receiver can be verified immediately, fix or no fix.
- Host TXD → module RX is only needed to send configuration commands (e.g. CASIC/
$PCASsentences to change rate or baud); the module works with this line idle high or even disconnected. - After the module computes a position fix (GGA quality field 0 → 1, RMC status V → A), position fields populate and — module-firmware dependent — PPS begins pulsing once per second through R2 to PMOD pin 1.
4. Interfaces#
| Reference | Pins/signals | Intended use |
|---|---|---|
| J1 | 12-pin PMOD plug (2x6 right-angle male, Digilent spec 1.2) | Host connection, PMOD Type 3 UART: pin 1 PPS (in the CTS position), pin 2 TXD (host out), pin 3 RXD (host in), 4/7/8/9/10 NC, 5/11 GND, 6/12 3V3 |
| J2 | 1x5 socket, 2.54 mm vertical | Breakout socket: 1 = 3V3, 2 = TXD (to module RX), 3 = GPS_TX (module TX), 4 = GPS_PPS, 5 = GND |
PMOD pin map (Type 3 UART, host viewpoint):
| PMOD pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | PPS | TXD | RXD | NC | GND | 3V3 | NC | NC | NC | NC | GND | 3V3 |
Note the non-standard use of the Type 3 CTS position for PPS: a generic PMOD UART host design that actively drives CTS would contend with the module's PPS output through R2 — the AruviX host gateware must treat pin 1 as an input.
There are no test points defined yet (no layout exists); bench probing is at J1/J2 pins and passives.
5. Component-by-component review#
5.1 Connectors#
| Ref. | Part | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| J1 | Generic 2x6 right-angle 2.54 mm male header (MPN TBD) | PMOD plug; carries 3V3/GND, UART pair, and PPS to the host | No power, no signals | Odd/even numbering mistake in layout swaps rows and can put 3V3 on a signal pin — verify against Digilent PMOD spec 1.2 before fab |
| J2 | Generic 1x5 socket 2.54 mm vertical (MPN TBD) | Holds the GPS breakout in the carrier's 3V3/RX/TX/PPS/GND order | No module; host RXD floats (add a fabric pull-up or expect UART noise) | A breakout with a different pin order gets power on data pins or reversed supply — swapped power can destroy the module; swapped TX/RX is silent but harmless (section 9.B) |
5.2 Line conditioning#
| Ref. | Value / part | Purpose | If absent/open | If shorted or wrong value |
|---|---|---|---|---|
| R1 | 100 Ω, Yageo RC0603FR-07100RL, 1% 0603 | Series protection between the module-driven GPS_TX and host RXD; limits fault current if the host pin is misconfigured as an output, damps the stub | Host receives no NMEA — carrier looks dead even though the module is fine | Short removes the modest protection; a grossly large value (reel mix-up) with ~10–20 pF pin capacitance still passes 9600 baud easily, so wrong-value symptoms are subtle — verify by measurement, not behavior |
| R2 | 100 Ω, Yageo RC0603FR-07100RL, 1% 0603 | Same role for the module-driven PPS line; also limits contention current if host gateware wrongly drives the CTS-position pin | No PPS at the host; NMEA still works | As R1; a hard short plus a host driving pin 1 puts full contention current through the module's PPS driver |
Note there is deliberately no series resistor in the host-driven TXD → module RX path: the host drives it, the module only listens, and both are 3.3 V logic.
5.3 Decoupling#
| Ref. | Value / part | Purpose | If absent/open | If shorted or wrong value |
|---|---|---|---|---|
| C1 | 100 nF 16 V X7R, Murata GRM188R71C104KA01D, 0603 | High-frequency decoupling at the breakout socket | More rail noise into the module's RF/correlator supply; degraded sensitivity, longer TTFF | Short is a 3V3-to-GND short — host supply or bench limit trips |
| C2 | 10 µF 10 V X5R, Murata GRM21BR61A106KE19L, 0805 | Bulk reservoir for acquisition-current peaks at the end of the PMOD cable | Rail droop during acquisition bursts; symptoms are resets or acquisition stalls that worsen with cable length | Short is a rail short; much smaller value reintroduces droop |
#FLG01/#FLG02 are ERC power-flag symbols only — no physical parts.
5.4 The plug-in module (in scope)#
| Ref. | Part | Function | If absent | If wrong module/orientation |
|---|---|---|---|---|
| (plug-in at J2) | ATGM336H-5N31 breakout or equivalent 3.3 V UART GNSS with PPS | The actual receiver: AT6558-based multi-constellation GNSS (BDS/GPS/GLONASS/Galileo/QZSS/SBAS), 2.7–3.6 V, ~25 mA at 3.3 V, −148 dBm acquisition sensitivity, 2.5 m CEP, ~35 s cold TTFF spec, 9600-baud NMEA out, 1 Hz PPS | Carrier is inert; RXD floats | A breakout with different pin order: reversed power can destroy it; TX/RX swap gives silence (recoverable). A 5 V-only breakout (rare for this class) or one lacking PPS loses the pin-1 lesson |
6. Datasheet summary and design interpretation#
| Device | Key manufacturer facts | Board-specific interpretation |
|---|---|---|
| ATGM336H-5N31 (Zhongkewei/ICOFCHINA, AT6558 core) | 2.7–3.6 V supply, ~25 mA at 3.3 V, 3.3 V I/O; UART NMEA-0183 out, default 9600 baud; multi-constellation BDS+GPS (+GLONASS variants); cold TTFF ~35 s typical; −148 dBm acquisition sensitivity; 2.5 m accuracy; PPS output; −40…+85 °C; 10.1 × 9.7 mm SMD module | 3.3 V supply and I/O match the carrier exactly — no shifting needed. The ~35 s TTFF figure assumes open sky; treat it as a best case. The carrier defers the castellated SMD footprint and takes a socketed breakout instead, so the breakout PCB (antenna, backup battery, LED) is between this datasheet and reality |
| NMEA-0183 / CASIC protocol behavior | Sentences at 1 Hz by default; $GNGGA field 6 is fix quality (0 = none, 1 = GPS fix); $GNRMC field 2 is status (V = void, A = active); $GPTXT carries boot/antenna messages | The fabric parser lesson keys on exactly these fields; empty-field sentences before fix are normal and prove the UART path without any sky view |
| PPS behavior | 1 pulse per second, 3.3 V CMOS level; on this module class PPS typically appears only after a valid fix, and default pulse width is firmware-set (commonly ~100 ms; configurable) — verify on the actual breakout | R2 passes it to PMOD pin 1. Record measured width, level, and whether it runs before fix; do not assume |
| Murata GRM188R71C104KA01D / GRM21BR61A106KE19L | 100 nF X7R 0603; 10 µF X5R 0805; X5R/X7R DC-bias derating modest at 3.3 V in these sizes | Adequate. Do not shrink the 10 µF to 0603/0402 |
| Yageo RC0603 series | General-purpose thick film, 1 %, 100 mW | Values non-critical to ±5 % |
Official references: ATGM336H-5N datasheet PDF (LCSC mirror), ATGM336H-5N31 at LCSC (C90770), example ATGM336H breakout (Tinytronics), Murata GRM188R71C104KA01D, Murata GRM21BR61A106KE19L, Yageo RC thick-film series. The ATGM336H datasheet is Chinese-language in places and the breakout board's own schematic (regulator? level shift? pin order?) is a separate document you must obtain for the specific breakout purchased.
7. Expected values before bench testing#
All values are design targets for a board that does not yet exist.
| Quantity | Target | How to measure |
|---|---|---|
| 3V3-to-GND resistance, unpowered, no module | High (meter-dependent, caps only) | DMM at J1 pin 6 to 5, both polarities |
| J1 pin 3 to J2 pin 3 | ~100 Ω (R1) | DMM |
| J1 pin 1 to J2 pin 4 | ~100 Ω (R2) | DMM |
| J1 pin 2 to J2 pin 2 | ~0 Ω (direct) | DMM |
| Supply current, module fitted, acquiring | ~25 mA typical at 3.3 V (record peaks) | Bench supply readout |
| First NMEA output after power | within ~1 s: $GPTXT banner then $GNGGA/$GNRMC etc. with empty fields, 9600 baud 8N1 | Scope/logic analyzer on J1 pin 3, or terminal |
| UART idle level | 3.3 V (idle high) | Scope at J1 pin 3 |
| Cold-start TTFF, outdoors, clear sky | ~30–35 s typical; the very first ever start (blank almanac) can take minutes | GGA quality field, stopwatch |
| TTFF indoors / near window | minutes to never — not a carrier fault | Same |
| Fix indication | GGA field 6: 0 → 1 (or 2 with SBAS); RMC status: V → A; satellite counts in GSV | Terminal log |
| PPS | 1 Hz after fix (verify whether this module pulses before fix); ~3.3 V amplitude at J1 pin 1; width firmware-set (commonly ~100 ms) — record actual | Scope, 1 s/div then zoomed |
| PPS timing stability | period 1 s with edge jitter far below UART timing needs; drift vs bench counter is the fabric-disciplining lesson | Scope persistence / counter |
| Position sanity | within ~2.5–10 m of known bench location outdoors | Parsed GGA vs map |
8. Manual schematic and assembly review checklist#
- Verify J1 odd/even pin numbering against the Digilent PMOD spec on the first layout: 3V3 on PMOD 6/12, GND on 5/11. A row swap is the most dangerous plausible layout error.
- Verify J2 net order on the physical board: 1 = 3V3, 2 = TXD, 3 = GPS_TX, 4 = GPS_PPS, 5 = GND. Buzz it before any module is inserted, and make sure the silkscreen labels each J2 pin by function, not just pin number.
- Confirm R1 and R2 are both 100 Ω in the GPS_TX→RXD and GPS_PPS→PPS paths and that the host-driven TXD line is direct.
- Confirm C1/C2 placement close to J2 in the eventual layout; keep the eventual antenna area clear per the README's 20 × 40 mm plan.
- Confirm host gateware treats PMOD pin 1 (CTS position) as an input.
- Confirm the eventual layout keeps switching noise away from the module's antenna area (GNSS signals are below thermal noise; this matters).
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record board serial, breakout identity (vendor, exact silkscreen), equipment, and location/sky view.
A. Unpowered inspection and resistance tests (no module fitted)#
- Visual inspection under magnification: J1/J2, R1, R2, C1, C2; no bridges.
- DMM: 3V3-to-GND high resistance both polarities; the three J1-to-J2 path measurements from section 7 (100 Ω / 100 Ω / 0 Ω); J2 pin 1 to J1 pin 6 ≈ 0 Ω; J2 pin 5 to J1 pin 5 ≈ 0 Ω.
B. Breakout pin-order verification (BEFORE first insertion — mandatory)#
GPS breakouts do not share a standard pin order. The same "ATGM336H breakout" is sold with VCC-first, GND-first, and TX/RX in either order; some add EN/BAT pins and become 1x6.
- Buzz out the carrier socket with a DMM: identify which J2 position carries 3V3, GND, TXD, GPS_TX, GPS_PPS (per this design: 1/5/2/3/4 respectively). This is the carrier's ground truth from
generate_design.py. - Read the breakout's own silkscreen pin by pin and, if available, its schematic. Map each breakout pin to the J2 position it will land in.
- Every position must match by function: breakout VCC → J2 3V3, breakout GND → J2 GND, breakout TX → J2 GPS_TX, breakout RX → J2 TXD, breakout PPS → J2 GPS_PPS. A 1x6 breakout does not fit — do not force-offset it.
- Consequences of getting this wrong: swapped VCC/GND is reverse polarity and can destroy the module instantly (most breakouts have no reverse protection). Swapped TX/RX is harmless — two outputs never fight here because R1 sits in one path and both are firmware inputs/ outputs at 3.3 V — the symptom is simply silence: no NMEA at the host.
- If the pin order does not match, do not plug it in. Rework options are a header adapter or choosing a matching breakout — never "close enough".
C. Standalone module smoke test (bench supply, module alone)#
- Power the bare breakout from a current-limited 3.3 V supply (100 mA limit). Confirm ~25 mA-class draw, no heating.
- Attach a 3.3 V USB-UART or scope to the breakout's TX: NMEA sentences at 9600 8N1 must appear within ~1 s of power, fix or no fix.
- Only a breakout that passes this goes into the carrier.
D. Standalone carrier bring-up (bench supply into J1 3V3/GND, no host)#
- With the verified module fitted, feed the current-limited 3.3 V supply into J1 pin 6 (3V3) and pin 5 (GND). Confirm current as in C.1.
- Scope J1 pin 3 (host RXD side of R1): 9600-baud NMEA bursts once per second, idle high at 3.3 V, clean edges.
- Attach a 3.3 V USB-UART (RX to J1 pin 3, GND to GND) and log: expect
$GPTXTboot text, then$GNGGA,,,,,,0,.../$GNRMC,...,V,...sentences with empty position fields — this proves the whole carrier signal path with zero sky view. - Move outdoors or to a window with sky view. Watch GGA quality go 0 → 1 and RMC V → A; record TTFF (expect ~30–35 s outdoors from cold, possibly minutes on the first-ever start; indoors may never fix).
- Scope J1 pin 1 for PPS after fix: 1 pulse per second, ~3.3 V high level, record pulse width (commonly ~100 ms on this module class) and whether any pulses occurred before fix.
- Optionally send a
$PCASrate/config command into J1 pin 2 from the USB-UART TX and confirm the module accepts it (proves the TXD path).
E. Hosted bring-up (PMOD host providing 3.3 V)#
- Confirm the host gateware maps pin 1 as input before plugging in.
- Plug the carrier into the FPGA PMOD port. Confirm the host 3.3 V rail is happy with the ~25 mA load (trivial for a real host, but record it).
- Bring up the fabric UART RX at 9600 8N1 on RXD; verify received bytes match a parallel USB-UART tap character-for-character.
- Run the NMEA parser: display fix quality, satellite count, time, and position. Repeat the TTFF observation from D.4 through the fabric path.
- Discipline a fabric counter against PPS: measure the host-clock count between PPS edges over minutes; the spread is your oscillator error — this is the module's L3 lesson working end to end.
- If configuration is implemented, exercise host-TXD commands (rate change) and confirm the effect, then return to defaults.
F. Robustness checks#
- Power-cycle behavior: repeated cold/warm starts; record warm-start TTFF (seconds, thanks to retained ephemeris/RTC if the breakout has a backup battery — note whether it does).
- Long PMOD cable (if used): re-verify UART edge quality and rail droop during acquisition.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| No NMEA at host, module LED alive | scope module TX pin directly, then J1 pin 3 | R1 open, J2 pin 3 open, TX/RX-swapped breakout (silent, harmless) |
| No NMEA and module dead | 3V3 at J2 pin 1, current draw | reversed/mis-ordered breakout (possibly destroyed), J2 solder, supply |
| Garbage characters | scope bit timing at J1 pin 3 | wrong baud (not 9600), host clock error, marginal edges on long cable |
| NMEA fine, never fixes | GSV satellite counts, antenna, sky view | indoors/no sky view, antenna damage, RF interference — usually not the carrier |
| Fix but no PPS at host | scope module PPS pin, then J1 pin 1 | module doesn't assert PPS before/without fix, R2 open, J2 pin 4 open, host pin misconfigured |
| PPS present but host contention suspected | current draw delta, pin-1 gateware direction | host driving CTS position — fix gateware; R2 limited the damage |
| Config commands ignored | scope J2 pin 2 while sending | TXD path open, breakout RX not where expected (pin-order) |
| Supply trips at power-on | 3V3-to-GND resistance | C1/C2 short, mis-ordered breakout shorting rail |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial | |
| Breakout identity, vendor, silkscreen pin order, backup battery? | |
| Pin-order verification result (9.B) — mapped table | |
| Supply / USB-UART / scope IDs and calibration | |
| Location and sky view for fix tests | |
| Resistance and continuity results (9.A) | |
| First-NMEA time after power; sentences observed before fix | |
| Cold TTFF; warm TTFF; fix-quality/status transitions | |
| PPS: present before fix? width, level, period stability | |
| Fabric-vs-USB-UART byte comparison result | |
| PPS-disciplined counter spread | |
| Deviations, photos, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
The carrier is deliberately minimal and coherent for its L3 lesson: the two module-driven lines (GPS_TX, PPS) get 100 Ω of series protection, the host-driven line is direct, and C1/C2 handle acquisition current at the end of a PMOD cable. Placing PPS in the PMOD Type 3 CTS position is a pragmatic but non-standard choice that obligates the host gateware to treat pin 1 as an input. The design's single sharp edge is breakout variability: pin orders differ across vendors, and a reversed supply can destroy the module, so the 9.B verification procedure is mandatory, not advisory. The principal open risks are that no PCB exists yet (J1 row order, J2 order, and antenna-area layout are all unbuilt and unverified), PPS behavior (before-fix output, pulse width) is firmware-dependent and must be measured rather than assumed, and every figure in section 7 comes from datasheets and protocol definitions rather than a bench.