Circuit review & bench-test guide
AXS-006 — DS18B20 1-Wire temperature PMOD module
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.3 V logic only. The DS18B20 tolerates up to 5.5 V, but the PMOD host does not necessarily; never mix a 5 V bus master onto this module's OW net.
- Absolute maximum on any DS18B20 pin is −0.5 V to +6.0 V. Long external probe leads on J2 act as antennas — keep probe cables short on the bench and add transient thinking before any field/waterproof-probe deployment; the module has no ESD or surge parts on OW by design.
- The host FPGA pin on OW must be open-drain (drive 0 / release). Driving a hard 1 while U1 or a J2 device transmits a 0 fights a ~100 Ω internal sink transistor with no series limit — this is the module's one real electrical-abuse path.
- In standalone testing use a current-limited bench supply (3.3 V, limit 50 mA or less).
- Do not hold OW low more than 480 µs unintentionally: every device on the bus resets (this is also a useful deliberate recovery action).
- Parasite-power experiments (VDD grounded, strong pull-up) are not supported by this schematic as built — U1 VDD is hard-wired to 3V3.
- Passing these bench tests is not EMC, ESD, safety, or environmental qualification, and the sensor's ±0.5 °C accuracy claim is untested until compared against a reference thermometer.
3. Power and signal sequence#
- 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.
- 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.
- 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).
- 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).
- 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 pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | OW | NC | NC | NC | GND | 3V3 | OW | NC | NC | NC | GND | 3V3 |
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.
| Reference | Pins/signals | Intended use |
|---|---|---|
| J1 | PMOD 2×6 plug | Sole host interface: power plus OW |
| J2 (DNP) | 1: 3V3, 2: OW, 3: GND | Optional 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 summary | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| J1 | Generic 2×6 right-angle 2.54 mm male header (PMOD plug, MPN TBD) | Sole power and signal interface | No board function | Mirrored assembly swaps 3V3/GND or puts the rail on OW; buzz before first plug-in |
| U1 | Analog 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 0x28 | The 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 inert | Rotated 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 |
| R1 | 4.7 kΩ 0603, Yageo RC0603FR-074K7L | The 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 mA | Bus floats: no defined idle level, no presence pulse visible, reads are noise | Too 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 |
| C1 | 100 nF 16 V X7R 0603, Murata GRM188R71C104KA01D | Local VDD decoupling for U1's up-to-1.5 mA conversion current bursts and digital switching | Conversion-time supply droop at the end of a PMOD cable: flaky conversions, CRC errors, possible resets mid-transaction | A 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 header | Multi-drop expansion: parallels a second sensor/probe onto 3V3/OW/GND | Nothing 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 fact | Value | Board-specific interpretation |
|---|---|---|
| Supply / logic | VDD 3.0–5.5 V; VIH ≥ 2.2 V (local power), VIL ≤ 0.8 V; abs max −0.5…+6.0 V | 3.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 |
| Currents | Standby ≤ 1 µA (typ 750 nA), active ≤ 1.5 mA, DQ sink ≥ 4 mA at 0.4 V, DQ load 5 µA | Idle 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 °C | Bench sanity: room readings should sit within ~±0.5 °C of a reference |
| Resolution / conversion | 9/10/11/12-bit → max 93.75/187.5/375/750 ms; default 12-bit | Fabric must wait or poll; a fixed 750 ms wait is the safe first implementation |
| Reset / presence | Master low ≥ 480 µs (bus low > 480 µs resets everything); slave waits 15–60 µs after release, presence low 60–240 µs | The single most informative scope capture — see section 7 timing table |
| Bit slots | Slot 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 µs | These 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 commands | 0x33 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 CRC | First 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 commands | 0x44 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 Supply | 0xBE + CRC check is the integrity gate for every reading; 0xB4 must return 1 on this VDD-powered board |
| CRC-8 | Polynomial 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 state | Temperature register = 0x0550 = +85 °C; EEPROM auto-recall; EEPROM 50k writes / 10-year retention | A persistent 85.0 °C reading means conversions are not happening (missing 0x44, VDD open, or timing broken), not a hot room |
| Parasite power | Needs VDD grounded + strong pull-up within 10 µs of 0x44/0x48, held > t_conv / 10 ms; not recommended above 100 °C | Not 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:
| Quantity | Design target | What to measure |
|---|---|---|
| Idle OW level | 3.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 conversion | up to 1.5 mA for ≤ 750 ms | Supply readout while 0x44 active |
| OW-to-3V3 resistance, unpowered | ≈ 4.7 kΩ (R1) | Ohmmeter |
| 3V3-to-GND resistance, unpowered | open (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 cable | Scope 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):
| Event | Datasheet limits | What a correct capture shows |
|---|---|---|
| Master reset pulse (t_RSTL) | low ≥ 480 µs | One 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 µs | Line pulled high by R1, then U1 yanks it low again within this window |
| Presence pulse low (t_PDLOW) | 60–240 µs | The 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 slot | Master must not start slots early |
| Write-0 slot | master low 60–120 µs, then ≥ 1 µs recovery | Full-width low |
| Write-1 slot | master low 1–15 µs, released; U1 samples 15–60 µs after the edge | Short low spike, then rail for the rest of the ≥ 60 µs slot |
| Read slot | master low ≥ 1 µs; U1 data valid ≤ 15 µs from falling edge; master must sample before 15 µs | Read-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 / recovery | t_SLOT 60–120 µs, t_REC ≥ 1 µs | Regular 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:
| Step | Expected result |
|---|---|
| Reset → presence | Presence 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 0x44 | Scratchpad 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 + 0xBE | Plausible room temperature (raw/16 °C at 12-bit), CRC valid, and the 85 °C default gone |
| 0xCC + 0xB4 + read slot | 1 (externally powered). 0 means U1's VDD joint is open — stop and rework |
| Finger on U1 | Reading climbs toward ~30 °C over a few conversions |
8. Manual schematic and assembly review checklist#
- Verify J1 pin 1 location and orientation against the PMOD spec; buzz all 12 pins pad-to-socket. Confirm OW really lands on PMOD pins 1 and 7.
- Confirm U1 (µSOP-8) orientation dot against the footprint. Per the datasheet pinout for the 8-pin package: GND pin 5, DQ pin 4, VDD pin 3, others NC. A rotation is an abs-max event — check before power.
- Confirm U1 VDD pad is soldered (the "hidden parasite" fault): after assembly, buzz U1 VDD pin directly to PMOD pin 6.
- Measure R1 = 4.7 kΩ from OW to 3V3; confirm nobody substituted a series resistor into DQ (design rule: there must be none).
- Confirm C1 sits close to U1's VDD/GND in the eventual layout (layout not started; carry this to layout review) and is not shorted.
- Confirm J2 is DNP for the core build; if populated for a lesson, verify the 3V3/OW/GND order printed on the silk against the schematic before attaching any probe.
- Confirm no pull-up was added at the host side too (two parallel pull-ups lower the effective resistance and raise VOL stress on small sinks — one 4.7 kΩ on the module is the design).
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#
- Complete the section 8 checklist under magnification.
- 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).
- 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)#
- Bench supply 3.30 V, current limit ≤ 50 mA, + to PMOD 6/12, − to 5/11.
- Power on: supply current ≈ µA-scale (below most supplies' resolution). mA-scale idle current means a short (C1, U1) — power down.
- DMM OW: 3.30 V idle on both pin 1 and pin 7.
- 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)#
- 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).
- Scope OW at 100 µs/div, single-shot on falling edge. Issue a reset.
- 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.
- No presence: see section 10 before touching anything else.
D. Standalone protocol bring-up#
- 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).
- Issue reset + 0xCC + 0xBE. Verify the +85 °C power-up default (0x50, 0x05), config 0x7F, and scratchpad CRC.
- Issue reset + 0xCC + 0xB4 + one read slot. Expect 1 (VDD powered).
- Issue reset + 0xCC + 0x44. Poll read slots: 0 (busy) then 1 (done); time it — ≤ 750 ms. Watch the supply current blip (~1 mA).
- 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).
- 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.
- 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).
- 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)#
- 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.
- 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.
- Run the fabric 1-Wire master through the phase D sequence (ROM read, 85 °C default, 0xB4, convert, scratchpad + CRC).
- 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)#
- Power down, populate/verify J2, attach the second DS18B20 or probe with the pin order triple-checked (3V3 / OW / GND).
- Repeat reset/presence: presence pulses now overlap (wired-AND) and may look longer; that is normal.
- 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.
- 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#
| Symptom | First measurements | Likely areas |
|---|---|---|
| OW idles at 0 V | Ohm OW to GND unpowered | DQ 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 GND | Host pin driving push-pull 0 against R1, second unintended pull-down |
| No presence pulse after valid reset | U1 VDD pin voltage; reset width on scope | U1 unpowered (VDD joint), reset < 480 µs, U1 dead, DQ open to U1 |
| Presence OK, ROM read garbage | Slot widths and read-sample timing on scope | Master samples after 15 µs, write-1 low too long (> 15 µs reads as 0), slow edges |
| First ROM byte ≠ 0x28 | Repeat with CRC check; count devices | Bit-order error (LSB first!), second device on bus, timing marginal |
| Reading stuck at +85.0 °C | Did 0x44 run? Poll busy; check 0xB4 | Convert never issued/aborted, VDD open (0xB4 = 0), conversion polling broken |
| Reading = −0.06 °C / 0xFFFF or all-1s | Scope a read slot | U1 not responding (reads float high): addressing or reset lost mid-sequence |
| Intermittent CRC failures | Rise time, VOL, supply droop during convert | Bus capacitance vs 15 µs window, R1 value, C1 missing/ineffective, cable too long |
| 0xB4 returns 0 on this board | Buzz U1 VDD to PMOD pin 6 | Open VDD joint — the board is not designed for parasite power; rework |
| Works standalone, fails in host | Host pull-up setting, pin constraint | Host pin not open-drain, host internal pull-up fighting timing, wrong pin mapped |
| Second sensor breaks everything | Rise time; J2 wiring order | Probe cable capacitance, 3V3/GND swapped at J2, using 0x33/0xCC with 2 devices |
11. Bench record template#
| Field | Record |
|---|---|
| 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.