← AXS-006

Circuit review & bench-test guide

AXS-006 — DS18B20 1-Wire temperature PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-006-ds18b20 PMOD module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the authoritative generator script (generate_design.py), the generated schematic, the README, the ERC report in this directory, and the DS18B20 datasheet.

This board has never been fabricated. Its status is schematic-only: ERC clean (0 errors, 0 warnings), netlist reviewed, PCB layout not started, not released. Every voltage, current, and timing number below is a design target to verify on a future first article, not a proven measurement.

1. What the board does#

The board carries one DS18B20U 1-Wire digital thermometer (catalog #6, level L2) on a single shared open-drain data line, OW, pulled to 3V3 by a 4.7 kΩ resistor. OW appears on PMOD pins 1 and 7 (same net, twice). A DNP 1×3 header, J2, extends the same bus to a second DS18B20 or a waterproof probe so the lesson grows into multi-drop ROM search. The sensor is VDD-powered (3V3 wired to its VDD pin); parasite power is not used. There is deliberately no series resistor on DQ — the line is open-drain and the pull-up already limits fault current; a series element would only degrade the shared bus edges.

The host must drive OW only as open-drain: output 0 or release to input, never drive 1. All protocol timing — reset, presence, and 60 µs bit slots — is generated by the FPGA fabric; that is the exercise.

Functional block diagram#

   3V3 (PMOD 6/12) ──┬───────────────┬──────────────┐
                     │               │              │
                    R1 4.7k         C1 100n        (J2.1, DNP)
                     │               │              │
   OW (PMOD 1, 7) ───┴──── DQ ── U1 DS18B20U ── VDD─┘
                     │            │
                     ├───────── (J2.2, DNP: external probe DQ)
                     │
   GND (PMOD 5/11) ──┴──── U1 GND ── C1 ── (J2.3, DNP)

2. Safety and scope boundaries#

3. Power and signal sequence#

  1. 3V3 and GND arrive on PMOD pins 6/12 and 5/11 (or the bench supply). C1 decouples U1's VDD locally. R1 pulls OW to 3V3: the idle bus state is high and must be, or nothing works.
  2. At power-up U1 auto-recalls its EEPROM (TH, TL, config) to the scratchpad and loads the temperature register with the power-on default +85 °C (0x0550) — reading 85.0 °C means "no conversion performed yet," a diagnostic sign, not a fault.
  3. The master begins every transaction with a reset pulse: OW driven low for ≥ 480 µs, then released. R1 pulls the line high; U1 waits 15–60 µs, then answers with a presence pulse (low for 60–240 µs).
  4. The master sends one ROM command (first bring-up read: 0x33 Read ROM, single device only), then a function command (e.g. 0x44 Convert T, then reset + ROM + 0xBE Read Scratchpad).
  5. Bits move in master-initiated 60–120 µs time slots, LSB first. During conversion (≤ 750 ms at 12-bit) the master may poll read slots: 0 = busy, 1 = done — possible only because VDD is wired (a parasite-powered part would need the line held high instead).

Why VDD-powered and not parasite#

With VDD wired, conversions draw their up-to-1.5 mA operating current from 3V3, so the bus stays available for done-polling and other traffic, multiple sensors can convert simultaneously, and no strong (MOSFET) pull-up is needed. Parasite mode would require VDD grounded and the master to clamp DQ high within 10 µs of issuing 0x44/0x48 for the full conversion/copy time; the datasheet also discourages parasite power above 100 °C. The 0xB4 Read Power Supply command must return 1 on this board — a 0 indicates U1's VDD pin is not actually powered (open joint), the classic hidden assembly fault.

4. Interfaces#

PMOD pin123456789101112
NetOWNCNCNCGND3V3OWNCNCNCGND3V3

OW on both pin 1 and pin 7 lets either standard PMOD GPIO position own the bus; connect the master to one and probe on the other.

ReferencePins/signalsIntended use
J1PMOD 2×6 plugSole host interface: power plus OW
J2 (DNP)1: 3V3, 2: OW, 3: GNDOptional second DS18B20 or waterproof probe on the same bus for ROM-search exercises

No test points exist in the current schematic; probe the PMOD pins, R1 pads, and U1 pads directly.

5. Component-by-component review#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J1Generic 2×6 right-angle 2.54 mm male header (PMOD plug, MPN TBD)Sole power and signal interfaceNo board functionMirrored assembly swaps 3V3/GND or puts the rail on OW; buzz before first plug-in
U1Analog Devices/Maxim DS18B20U+, µSOP-8, programmable 9–12-bit 1-Wire thermometer, 3.0–5.5 V, ±0.5 °C (−10…+85 °C), abs max −0.5…+6.0 V any pin, family code 0x28The sensor: unique 64-bit ROM, scratchpad, CRC generator, open-drain DQ (~100 Ω sink FET, ≥4 mA at 0.4 V)Bus idles high but no presence pulse ever answers a reset — the module is inertRotated package puts 3V3 on DQ or GND on VDD (abs-max risk); DQ–GND solder bridge holds the bus low permanently (host sees endless reset condition); an open VDD joint silently flips the part into parasite-like starvation — conversions return garbage or 85 °C while ROM reads still work, and 0xB4 returns 0
R14.7 kΩ 0603, Yageo RC0603FR-074K7LThe single bus pull-up (datasheet recommends ≈5 kΩ): defines idle-high, sources the rising edges for every device, and limits any drive-fight current to ~0.7 mABus floats: no defined idle level, no presence pulse visible, reads are noiseToo large slows rising edges beyond slot budgets (a read-1 must cross VIH within 15 µs of slot start — marginal with long J2 probe cables); too small overloads the ~100 Ω sink FETs and raises VOL; a short ties OW hard to 3V3 so neither master nor sensor can pull low — bus stuck high
C1100 nF 16 V X7R 0603, Murata GRM188R71C104KA01DLocal VDD decoupling for U1's up-to-1.5 mA conversion current bursts and digital switchingConversion-time supply droop at the end of a PMOD cable: flaky conversions, CRC errors, possible resets mid-transactionA shorted C1 is a hard 3V3–GND short (supply current limit trips); wrong tiny value merely weakens decoupling
J2 (DNP)1×3 2.54 mm vertical headerMulti-drop expansion: parallels a second sensor/probe onto 3V3/OW/GNDNothing lost for single-sensor lessons (it ships unpopulated)If populated: pin-order mistake on a probe cable puts 3V3 on DQ or reverses the sensor's supply (abs-max/latch risk); every added device and cable adds capacitance that slows edges — recheck rise time after attaching

(#FLG01/#FLG02 are ERC power flags, not physical parts.)

6. Datasheet summary and design interpretation#

Primary reference: DS18B20 datasheet (Analog Devices) (mirror used for this review); DS18B20 product page. Pull-up: Yageo RC series. Check the latest revision before procurement.

Datasheet factValueBoard-specific interpretation
Supply / logicVDD 3.0–5.5 V; VIH ≥ 2.2 V (local power), VIL ≤ 0.8 V; abs max −0.5…+6.0 V3.3 V operation is in range but near the 3.0 V floor: budget for cable drop, and note VIH 2.2 V is 67% of rail — rising edges must genuinely reach the rail
CurrentsStandby ≤ 1 µA (typ 750 nA), active ≤ 1.5 mA, DQ sink ≥ 4 mA at 0.4 V, DQ load 5 µAIdle module current ≈ µA-scale; a conversion shows a ~1 mA supply blip. The 0.7 mA pull-up load is far below the 4 mA sink spec, so VOL will be near GND
Accuracy / range±0.5 °C from −10 to +85 °C; ±2 °C over −55…+125 °CBench sanity: room readings should sit within ~±0.5 °C of a reference
Resolution / conversion9/10/11/12-bit → max 93.75/187.5/375/750 ms; default 12-bitFabric must wait or poll; a fixed 750 ms wait is the safe first implementation
Reset / presenceMaster low ≥ 480 µs (bus low > 480 µs resets everything); slave waits 15–60 µs after release, presence low 60–240 µsThe single most informative scope capture — see section 7 timing table
Bit slotsSlot 60–120 µs + ≥1 µs recovery. Write 0: low 60–120 µs. Write 1: low 1–15 µs then release. Device samples 15–60 µs after falling edge. Read: master low ≥ 1 µs, data valid only 15 µs from falling edge — sample just before 15 µsThese numbers are the pass/fail criteria for the FPGA 1-Wire master; a master that samples reads after 15 µs will read 1s where 0s were sent
ROM commands0x33 Read ROM (single device only), 0x55 Match ROM, 0xCC Skip ROM, 0xF0 Search ROM, 0xEC Alarm Search; ROM = 8-bit family code 0x28 + 48-bit serial + 8-bit CRCFirst bring-up read is 0x33 with only U1 on the bus; the first byte back must be 0x28. Once J2 has a second device, 0x33 and 0xCC produce wired-AND collisions — switch to 0xF0 search + 0x55 match
Function commands0x44 Convert T, 0xBE Read Scratchpad (9 bytes, byte 8 = CRC), 0x4E Write Scratchpad (TH, TL, config — all three, in order), 0x48 Copy Scratchpad, 0xB8 Recall E², 0xB4 Read Power Supply0xBE + CRC check is the integrity gate for every reading; 0xB4 must return 1 on this VDD-powered board
CRC-8Polynomial x⁸ + x⁵ + x⁴ + 1, init 0, LSB first; covers ROM (byte 8) and scratchpad (byte 9)Implement in fabric or software and reject readings on mismatch — it catches the slow-edge/marginal-timing faults this module is designed to teach
Power-up stateTemperature register = 0x0550 = +85 °C; EEPROM auto-recall; EEPROM 50k writes / 10-year retentionA persistent 85.0 °C reading means conversions are not happening (missing 0x44, VDD open, or timing broken), not a hot room
Parasite powerNeeds VDD grounded + strong pull-up within 10 µs of 0x44/0x48, held > t_conv / 10 ms; not recommended above 100 °CNot applicable as built; documented so nobody grounds VDD "to try it" without also adding the strong pull-up

7. Expected values before bench testing#

All values are calculated/datasheet targets — no board has ever been built or measured.

DC values:

QuantityDesign targetWhat to measure
Idle OW level3.30 V (rail, via R1; U1 leakage ≤ 5 µA drops < 25 mV)DMM on PMOD pin 1 or 7
OW driven low (by U1 or master)< 0.4 V; expect ≈ 70 mV (100 Ω FET vs 4.7 kΩ)Scope low level during presence pulse
Idle supply current≈ 1 µA (U1 standby ≤ 1 µA typ 750 nA)Bench supply / µA meter
Supply current during conversionup to 1.5 mA for ≤ 750 msSupply readout while 0x44 active
OW-to-3V3 resistance, unpowered≈ 4.7 kΩ (R1)Ohmmeter
3V3-to-GND resistance, unpoweredopen (C1 charges then > MΩ)Ohmmeter before first power
OW rise time constantτ = 4.7 kΩ × C_bus; ~25 pF gives ~0.1 µs (10–90% ≈ 0.26 µs); grows with J2 cableScope on any released rising edge

1-Wire timing capture expectations (scope, 2–5 V/div is not needed — 1 V/div, 100 µs/div for reset, 10 µs/div for slots; trigger falling edge):

EventDatasheet limitsWhat a correct capture shows
Master reset pulse (t_RSTL)low ≥ 480 µsOne long low from the master; if your master emits < 480 µs, U1 may not reset — measure, don't trust the HDL constant
Bus release to presence start (t_PDHIGH)15–60 µsLine pulled high by R1, then U1 yanks it low again within this window
Presence pulse low (t_PDLOW)60–240 µsThe sensor-driven low; its VOL (~70 mV) may differ slightly from master-driven lows — a useful way to tell who is driving
Post-reset master RX window (t_RSTH)≥ 480 µs before next slotMaster must not start slots early
Write-0 slotmaster low 60–120 µs, then ≥ 1 µs recoveryFull-width low
Write-1 slotmaster low 1–15 µs, released; U1 samples 15–60 µs after the edgeShort low spike, then rail for the rest of the ≥ 60 µs slot
Read slotmaster low ≥ 1 µs; U1 data valid ≤ 15 µs from falling edge; master must sample before 15 µsRead-0: U1 holds the low past the master's release, up to slot end. Read-1: line springs back via R1 immediately. Sampling later than 15 µs misreads 0s as 1s
Slot period / recoveryt_SLOT 60–120 µs, t_REC ≥ 1 µsRegular slot cadence; recovery gaps visible at rail
Convert T duration≤ 750 ms at 12-bit (≤ 93.75 ms at 9-bit)Poll read slots after 0x44: 0 while busy, 1 when done; time it

Protocol bring-up expectations:

StepExpected result
Reset → presencePresence every time, both PMOD pin 1 and pin 7
0x33 Read ROM (U1 only on bus)8 bytes: first byte (family code) = 0x28; last byte = CRC-8 of the first 7 (poly x⁸+x⁵+x⁴+1) — must verify
0xCC + 0xBE before any 0x44Scratchpad bytes 0–1 = 0x50, 0x05 (+85 °C power-on default); byte 4 (config) = 0x7F (12-bit); byte 8 = valid CRC of bytes 0–7
0xCC + 0x44, wait/poll, reset, 0xCC + 0xBEPlausible room temperature (raw/16 °C at 12-bit), CRC valid, and the 85 °C default gone
0xCC + 0xB4 + read slot1 (externally powered). 0 means U1's VDD joint is open — stop and rework
Finger on U1Reading climbs toward ~30 °C over a few conversions

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record board serial, equipment, and operator. Phases A–D are standalone (bench supply + any 1-Wire-capable master or the FPGA dev board wired manually); phase E is the PMOD host context; phase F is multi-drop.

A. Unpowered inspection and resistance tests#

  1. Complete the section 8 checklist under magnification.
  2. Ohmmeter: 3V3-to-GND open; OW-to-3V3 ≈ 4.7 kΩ; OW-to-GND high (not ~100 Ω or 0 — that suggests a DQ bridge or damaged U1).
  3. Buzz U1 pin 3 (VDD) to PMOD pin 6 and U1 pin 5 (GND) to PMOD pin 5.

B. Standalone power-up (current-limited bench supply)#

  1. Bench supply 3.30 V, current limit ≤ 50 mA, + to PMOD 6/12, − to 5/11.
  2. Power on: supply current ≈ µA-scale (below most supplies' resolution). mA-scale idle current means a short (C1, U1) — power down.
  3. DMM OW: 3.30 V idle on both pin 1 and pin 7.
  4. Briefly short OW to GND through the meter/probe and release: line returns crisply to 3.30 V (pull-up alive).

C. Standalone reset/presence capture (the go/no-go test)#

  1. Keep the bench supply. Connect a 1-Wire master to OW/GND (FPGA pin configured open-drain, a USB 1-Wire adapter, or an MCU running a known 1-Wire library — any master works; the module doesn't care).
  2. Scope OW at 100 µs/div, single-shot on falling edge. Issue a reset.
  3. Verify against section 7: master low ≥ 480 µs; after release, a sensor-driven presence low beginning 15–60 µs later and lasting 60–240 µs. This single capture proves power, pull-up, U1 life, and DQ connectivity simultaneously.
  4. No presence: see section 10 before touching anything else.

D. Standalone protocol bring-up#

  1. Issue reset + 0x33 Read ROM. Verify family code 0x28 and the ROM CRC. Record the full 64-bit ROM (it identifies this exact unit forever).
  2. Issue reset + 0xCC + 0xBE. Verify the +85 °C power-up default (0x50, 0x05), config 0x7F, and scratchpad CRC.
  3. Issue reset + 0xCC + 0xB4 + one read slot. Expect 1 (VDD powered).
  4. Issue reset + 0xCC + 0x44. Poll read slots: 0 (busy) then 1 (done); time it — ≤ 750 ms. Watch the supply current blip (~1 mA).
  5. Reset + 0xCC + 0xBE: read all 9 bytes, verify CRC-8, convert (raw/16 °C) and sanity-check against a reference thermometer (±0.5 °C class).
  6. Capture write-0, write-1, and read slots on the scope and check each against the section 7 slot table — especially that your master samples reads inside 15 µs.
  7. Optional: 0x4E write TH/TL/config to 9-bit (config 0x1F), re-convert, confirm ≤ 93.75 ms and 0.5 °C granularity; power-cycle to confirm the volatile scratchpad reloads from EEPROM (or 0x48 Copy to persist).
  8. Hold OW low > 480 µs mid-transaction on purpose: everything resets and the next reset/presence works — confirms the documented bus-recovery behavior.

E. PMOD host context (host provides 3.3 V)#

  1. Confirm in the host constraints that the OW pin is open-drain or emulated as such (drive 0 / high-Z), with the host's internal pull-up disabled, before loading the bitstream.
  2. Plug into the host PMOD socket. Repeat phase C's reset/presence capture probing OW on whichever PMOD pin (1 or 7) the master is not using.
  3. Run the fabric 1-Wire master through the phase D sequence (ROM read, 85 °C default, 0xB4, convert, scratchpad + CRC).
  4. Re-measure OW rise time in-system: host socket, cable, and FPGA pin add capacitance; edges must still satisfy the 15 µs read budget.

F. Multi-drop extension (J2 populated)#

  1. Power down, populate/verify J2, attach the second DS18B20 or probe with the pin order triple-checked (3V3 / OW / GND).
  2. Repeat reset/presence: presence pulses now overlap (wired-AND) and may look longer; that is normal.
  3. Confirm 0x33 now returns corrupted/ANDed data (expected — this is the lesson), then run 0xF0 Search ROM to enumerate both ROMs, and 0x55 Match ROM to read each sensor individually with CRC checks.
  4. Re-measure rise time with the probe cable attached; if read slots start failing CRC, edge speed versus the 15 µs read window is the first suspect (a stronger pull-up, e.g. 2.2 kΩ, is the classic mitigation but is a design change — record it, don't bodge it silently).

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
OW idles at 0 VOhm OW to GND unpoweredDQ solder bridge, U1 damaged/rotated, master stuck driving low
OW idles low-ish (e.g. ~1.6 V)Who else is pulling? Ohm OW to GNDHost pin driving push-pull 0 against R1, second unintended pull-down
No presence pulse after valid resetU1 VDD pin voltage; reset width on scopeU1 unpowered (VDD joint), reset < 480 µs, U1 dead, DQ open to U1
Presence OK, ROM read garbageSlot widths and read-sample timing on scopeMaster samples after 15 µs, write-1 low too long (> 15 µs reads as 0), slow edges
First ROM byte ≠ 0x28Repeat with CRC check; count devicesBit-order error (LSB first!), second device on bus, timing marginal
Reading stuck at +85.0 °CDid 0x44 run? Poll busy; check 0xB4Convert never issued/aborted, VDD open (0xB4 = 0), conversion polling broken
Reading = −0.06 °C / 0xFFFF or all-1sScope a read slotU1 not responding (reads float high): addressing or reset lost mid-sequence
Intermittent CRC failuresRise time, VOL, supply droop during convertBus capacitance vs 15 µs window, R1 value, C1 missing/ineffective, cable too long
0xB4 returns 0 on this boardBuzz U1 VDD to PMOD pin 6Open VDD joint — the board is not designed for parasite power; rework
Works standalone, fails in hostHost pull-up setting, pin constraintHost pin not open-drain, host internal pull-up fighting timing, wrong pin mapped
Second sensor breaks everythingRise time; J2 wiring orderProbe cable capacitance, 3V3/GND swapped at J2, using 0x33/0xCC with 2 devices

11. Bench record template#

FieldRecord
Board revision / serial
Assembly checklist result (section 8)
Bench supply / DMM / scope / master IDs and calibration
Unpowered resistance results (A)
Idle level and idle current (B)
Reset/presence capture: t_RSTL, t_PDHIGH, t_PDLOW (C)
64-bit ROM code and CRC result (D)
Power-up 85 °C default confirmed (D)
0xB4 Read Power Supply result (D)
Convert T duration and reading vs reference (D)
Slot-timing captures: write-0/write-1/read (D)
OW rise time, standalone and in host (D/E)
Host-context results and constraint hash (E)
Multi-drop search results, if run (F)
Deviations, photos, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The circuit is the canonical VDD-powered single-sensor 1-Wire node — sensor, one 4.7 kΩ pull-up matching the datasheet's ≈5 kΩ recommendation, one decoupler — and its deliberate omissions (no series resistor on DQ, no ESD parts, no host-side pull-up) are consistent with an open-drain shared bus and are documented rather than accidental. The design decisions that most deserve bench confirmation are the ones software can silently mask: that U1's VDD pin is genuinely soldered and powered (0xB4 must return 1), that the master's read sampling lands inside the 15 µs valid window at real in-system bus capacitance, and that rise time survives the J2 probe-cable extension. The +85 °C power-on default and the CRC-8 on every ROM and scratchpad read are built-in diagnostics — use them, don't skip them. The principal open risk is simply that no board has ever been fabricated: every number in this guide is a datasheet or calculated target awaiting a first article, and PCB layout (decoupler placement, OW routing to both PMOD pins) has not even started.