← AXS-034

Circuit review & bench-test guide

AXS-034 — INA219 current/power monitor PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-034-ina219 prototype at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the implemented schematic (generate_design.py, axs-034-ina219.kicad_sch), the module README, and the TI INA219 datasheet.

The board is schematic-only. ERC is clean (0/0) and the netlist has been reviewed, but no PCB layout exists, no board has been fabricated, and there is no recorded bench result of any kind. Every numeric value in this guide — register readbacks, calibration results, expected currents, resistances — is a verification target derived from the schematic and the datasheet, not a measured result. Treat nothing below as proof that an assembled board works.

1. What the board does#

The board is an I2C PMOD module around the TI INA219 high-side current, bus voltage, and power monitor. An external supply-and-load pair connects through J2; the load current flows through a 0.1 Ω 1 % 2 W shunt (R5) between J2 pin 1 (supply in) and J2 pin 2 (load out). The INA219 measures the shunt drop (±320 mV full scale at the default PGA = /8, i.e. 3.2 A with this shunt) and the bus voltage at IN− (0–26 V), and — once the calibration register is programmed — reports current and power directly over I2C.

The measured circuit must share ground with the PMOD host through J2 pin 3. The module teaches the INA219 calibration-register fixed-point exercise: choosing a Current_LSB, computing CAL, and interpreting the three data registers.

Functional block diagram#

 PMOD host J1                              measured circuit
 3V3/GND ────────┬──────────────┐
 SCL (3,9) ──┬───┼──> U1 SCL    │      supply in     load out
 SDA (4,10) ─┼─┬─┼──> U1 SDA    │      J2.1 ──> R5 0.1R ──> J2.2
             │ │ │              │        │VIN_P        VIN_M│
   R2 4.7k ──┘ │ │   INA219 U1 <┼────────┴──── IN+   IN− ───┘
   (via JP2)   │ │   VS=3V3     │        (kelvin sense pair)
   R1 4.7k ────┘ │   A0 <── JP3 (GND default / 3V3)
   (via JP1)     │   A1 <── JP4 (GND default / 3V3)
   C1 100n ──────┘
                     GND ── J2.3 (common ground reference)

2. Safety and scope boundaries#

3. Power and control sequence#

  1. With no PMOD host attached, the board is unpowered. There is no local regulator; 3V3 and GND come straight from J1 (pins 6/12 and 5/11).
  2. On power-up the INA219 performs a power-on reset (POR threshold 2 V) and loads its default configuration: register 0x00 = 0x399F (32 V bus range, PGA = /8 ±320 mV, 12-bit ADCs, continuous shunt-and-bus mode).
  3. A0 and A1 are sampled on every bus transaction, not just at reset; JP3 (A0) and JP4 (A1) hold them at GND by default, giving 7-bit address 0x40.
  4. Without calibration, the shunt-voltage (0x01) and bus-voltage (0x02) registers read real data immediately; current (0x04) and power (0x03) stay at zero until calibration register 0x05 is written.
  5. The measured circuit on J2 is electrically independent of the logic supply sequence: the datasheet states the bus may be present with VS off and vice versa. No sequencing constraint exists between J1 and J2.

4. Interfaces#

PMOD pin map (Type 6 extended, J1)#

Pin123456789101112
NetNCNCSCLSDAGND3V3NCNCSCLSDAGND3V3

Pins 9/10 repeat the bus for module chaining; 11/12 repeat GND/3V3.

Load-path connector J2 (2.54 mm 1x03 header)#

PinNetUse
1VIN_Pmeasured supply in (shunt high side, U1 IN+)
2VIN_Mload out, through the shunt (U1 IN−, bus-voltage sense point)
3GNDcommon ground reference for the measured circuit

Jumpers#

Ref.TypeDefaultFunction
JP12-pad solder jumper, bridgedfittedSDA pull-up R1 in circuit; cut when another chained module provides pull-ups
JP22-pad solder jumper, bridgedfittedSCL pull-up R2 in circuit; cut when another chained module provides pull-ups
JP33-pad solder jumper, 1-2 bridgedA0 = GNDA0 select: 1-2 GND (default), 2-3 3V3
JP43-pad solder jumper, 1-2 bridgedA1 = GNDA1 select: 1-2 GND (default), 2-3 3V3

Address map reachable with these jumpers (INA219 Table 1):

JP4 (A1)JP3 (A0)7-bit address
GNDGND0x40 (default)
GND3V30x41
3V3GND0x44
3V33V30x45

The README's "0x40–0x45" span is only partly reachable: 0x42/0x43 require strapping A0 to SDA/SCL, which these jumpers do not offer. Honest limitation, not a defect.

Test points#

None are defined in the schematic. Probe at J1/J2 pins and the jumper pads. Adding TPs for VIN_P, VIN_M, SDA, SCL, and 3V3 is a recommended layout task.

5. Component-by-component review#

Every reference designator in generate_design.py is covered. Designators R3/R4 do not exist on this module (no gap-fill parts); the shunt is deliberately numbered R5.

5.1 Active device and connectors#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
U1TI INA219AIDR, SOIC-8, zero-drift current/power monitor, VS 3–5.5 V, bus 0–26 V, IQ 0.7 mA typ / 1 mA maxMeasures shunt drop and bus voltage; computes current/power after calibration; the entire point of the boardNo I2C ACK; module is inertRotated package swaps IN+/A1 corner pins — likely destroyed or nonsensical readings; wrong grade (A vs B) changes accuracy only
J112-pin PMOD plugHost power and I2C; duplicates bus on 9/10 for chainingNo power/no busReversed insertion swaps 3V3/GND onto signal pins; verify keying before power
J21x03 pin header, 2.54 mmMeasured supply/load path and ground referenceNo measurement path; INA219 still ACKs and reads ~0Swapping pins 1/2 reverses shunt polarity (negative shunt register, two's complement); load on pin 3 shorts through board ground

5.2 Shunt#

Ref.Value / partPurposeIf omittedImportant failure/review point
R50.1 Ω 1 % 2 W, 2512 (Bourns CRA2512-FZ-R100ELF)Converts load current to sense voltage: 10 mV per 100 mA; 3.2 A = 320 mV = PGA/8 full scale; I²R at 3.2 A ≈ 1.02 W (inside 2 W rating, hot)Load path open — no load current flows at all (shunt is in series)A wrong (larger) value overranges the PGA early and breaks all calibration math; a 0 Ω/solder-blob short reads zero current forever; non-kelvin routing adds trace resistance directly into the measurement

Note the 3.2 A ceiling: ±320 mV maximum PGA input ÷ 0.1 Ω. Beyond that the shunt register clips (out-of-range values shown shaded in datasheet Table 7) and the math-overflow flag (bus-voltage register bit 0, OVF) may assert.

5.3 Pull-ups, decoupling, and jumpers#

Refs.ValueFunctionIf omitted or wrong
R14.7 kΩ (Yageo RC0603FR-074K7L)SDA pull-up to 3V3 through JP1Bus floats if no other module provides pull-ups: no ACKs, garbage transfers
R24.7 kΩ (Yageo RC0603FR-074K7L)SCL pull-up to 3V3 through JP2Same as R1, on the clock
C1100 nF 16 V X7R (Murata GRM188R71C104KA01D)U1 VS decoupling (datasheet-recommended 0.1 µF at the supply pin)Supply bounce; possible conversion noise/resets; works on a quiet bench but is not optional
JP1 / JP2solder jumpers, bridged by defaultDisconnect R1/R2 when chaining modules that already have pull-upsBoth cut with no external pull-ups = dead bus; both fitted on a long chain = pull-up parallel stack too strong (e.g. 3 modules ≈ 1.57 kΩ, still legal at 3.3 V but check sink current, 3 mA spec point)
JP3 / JP43-pad solder jumpers, 1-2 (GND) defaultA0/A1 address strapsCut-but-unbridged jumper leaves the address pin floating: A0/A1 are sampled every transaction, so the address becomes unstable — always bridge exactly one side

5.4 ERC-only artifacts#

Refs.What they areReview note
#FLG01 (3V3), #FLG02 (GND), #FLG03 (VIN_P)KiCad PWR_FLAG symbolsSchematic-only ERC markers declaring these nets externally powered. They place no component on the PCB and need no assembly or test action.

6. Datasheet summary and design interpretation#

DeviceKey manufacturer facts used hereBoard-specific interpretation
INA219 (TI SBOS448G)VS 3–5.5 V, IQ 0.7 mA typ/1 mA max; bus input 0–26 V independent of VS; abs max VS 6 V, analog inputs −0.3–26 V common-mode, ±26 V differential; shunt LSB 10 µV; bus LSB 4 mV (register left-shifted 3 bits); PGA /1../8 = ±40/±80/±160/±320 mV; 12-bit conversion 532 µs typ / 586 µs max; default config 0x399F; CAL = trunc(0.04096 / (Current_LSB × RSHUNT)); Power_LSB = 20 × Current_LSB; Current reg = Shunt reg × CAL / 4096; Power reg = Current reg × Bus reg / 5000; I2C fast mode to 400 kHz, HS mode to 2.56 MHz; SMBus timeout resets the interface if SCL or SDA is low > 28 ms; 16 addresses via A0/A13.3 V PMOD rail is inside the 3–5.5 V VS range. Default PGA/8 + 0.1 Ω shunt gives 3.2 A full scale. The 4-µs post-write register-settling note only matters above 1 MHz SCL — irrelevant at 100/400 kHz bring-up. The 28 ms SMBus timeout is a free bus-unstick mechanism worth remembering during FPGA I2C-master debug
Shunt / passivesBourns CRA2512 0.1 Ω 1 % 2 W; Yageo RC series pull-ups; Murata GRM X7R/X5R ceramics1 % shunt tolerance enters every current/power number directly; calibrate it out with Equation 6 (Corrected_Full_Scale_Cal) once a trusted ammeter is available

Official references: INA219 datasheet (SBOS448G), INA219 product page, Yageo RC thick-film resistors, Murata capacitor search. Check the latest datasheet revision before procurement.

Calibration-register math for this board (0.1 Ω shunt)#

Worked example — the values the HDL/driver should use and the bench should verify:

  1. Maximum expected current: limited by the PGA to 320 mV / 0.1 Ω = 3.2 A.
  2. Minimum Current_LSB = 3.2 A / 2^15 = 97.66 µA/bit. Round up to a friendly value: Current_LSB = 100 µA/bit.
  3. CAL = trunc(0.04096 / (100 µA × 0.1 Ω)) = trunc(4096.0) = 4096 = 0x1000. Write 0x1000 to register 0x05.
  4. Power_LSB = 20 × Current_LSB = 2 mW/bit.
  5. Register interpretation:

7. Expected values before bench testing#

All values are calculated targets, not measurements.

QuantityDesign target / calculated valueWhat to measure
3V3 rail current, idle≈0.7 mA typ, ≤1 mA (INA219 IQ; pull-ups add ≈1.4 mA only while a line is held low)Bench supply readout
SDA/SCL idle level3.3 V (high through R1/R2)DMM at J1 pins 3/4
SDA/SCL to 3V3 resistance, unpowered≈4.7 kΩ each (JP1/JP2 fitted)Ohmmeter
I2C address ACK0x40 only (default straps); 0x41/0x44/0x45 per JP3/JP4Address scan
Config register 0x00 after POR0x399FFirst read transaction
Registers 0x03/0x04/0x05 after POR0x0000 eachReads before calibration
CAL for Current_LSB = 100 µA0x1000 (4096) readback (bit 0 always 0)Write/readback 0x05
Shunt register with 3.3 V / 33 Ω load (≈100 mA)≈1000 decimal (0x03E8) = 10.00 mV; band 950–1050 (±5 %: supply, 33 Ω 1 %, shunt 1 %, gain 0.5 %)Read 0x01
Current register, same load≈1000 → 100.0 mA (equal to shunt register at CAL = 4096)Read 0x04
Bus-voltage register, same load(3.3 V − 10 mV)/4 mV ≈ 822 after >>3; raw ≈ 0x19B0; band 3.20–3.36 VRead 0x02, shift, scale
Power register, same load≈ 1000 × 822 / 5000 ≈ 164 → 328 mW (I×V ≈ 100 mA × 3.29 V)Read 0x03
Full-scale ceiling3.2 A / 320 mV; OVF beyondDo not test at 3.2 A until layout thermal review exists
12-bit conversion time532 µs typ / 586 µs max per channelCNVR-bit polling or scope

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record board serial, equipment, and raw data for every step. Assumed bench: PMOD host (3.3 V) or current-limited 3.3 V supply on J1, plus a second current-limited supply and a 33 Ω ≥1 W resistor for the load test.

A. Unpowered inspection and resistance tests#

  1. Complete the checklist in section 8 under magnification.
  2. Ohmmeter, unpowered: 3V3-to-GND at J1 — expect no hard short (>10 kΩ, settling as C1 charges from the meter).
  3. SDA-to-3V3 and SCL-to-3V3: expect ≈4.7 kΩ each (R1/R2 through JP1/JP2). This is the standing JP1/JP2 verification: fitted = ≈4.7 kΩ, cut = open. Re-check after any jumper rework.
  4. A0-to-GND and A1-to-GND at the JP3/JP4 center pads: expect ≈0 Ω (default 1-2 bridges).
  5. J2.1-to-J2.2: expect ≈0.1 Ω (R5). J2.1-to-GND: open.

B. First power-up, logic side only#

  1. Nothing on J2. Apply 3.3 V (current limit ≈100 mA) to J1 pins 6/12, GND to 5/11.
  2. Supply current: expect ≈0.7–1 mA. Investigate >2 mA before proceeding.
  3. DMM: SDA and SCL both read ≈3.3 V (bus idle high). A line stuck low means a solder short or damaged U1.

C. Address-ACK scan and first transaction#

  1. Run an I2C scan at 100 kHz. Expected: ACK at 0x40 only (default straps). Any other ACK means a strap or address decode problem.
  2. If JP3 is rebridged 2-3: expect 0x41. JP4 2-3: 0x44. Both: 0x45. Note 0x42/0x43 are unreachable on this board.
  3. First transaction — config register readback: write pointer 0x00, then read 2 bytes:
  1. Read 0x03, 0x04, 0x05: expect 0x0000 each (uncalibrated).
  2. Optional: write 0x8000 to 0x00 (RST self-clearing bit), re-read 0x399F.

D. Calibration and zero-load sanity#

  1. Write CAL: S 0x40+W 0x05 0x10 0x00 P. Read back 0x05: expect 0x1000.
  2. With J2 still open, read 0x01 and 0x04: expect ≈0 (within a few LSB of offset; datasheet VOS at PGA/8 is ±200 µV max for the A grade, i.e. up to ±20 counts — record the actual zero offset for this serial).
  3. Read 0x02: with nothing on J2, IN− floats; the bus reading is meaningless here. Do not fail the board on it.

E. Known-load current check#

  1. Second supply: 3.3 V, current limit 150 mA, positive to J2.1, return to J2.3 (and commoned with J1 GND). Load: 33 Ω ≥1 W from J2.2 to J2.3.
  2. Expected load current ≈ 3.3 / 33.1 ≈ 99.7 mA. Confirm on the supply readout or a series DMM.
  3. Read the registers and compare:
  1. Cross-check: DMM across R5 should read ≈10 mV and match the shunt register within tolerance. A ×2 or ×0.5 disagreement means the wrong shunt value or a broken kelvin connection.
  2. Reverse test: swap supply and load (current flows J2.2 → J2.1). Shunt and current registers must go negative (two's complement, e.g. ≈0xFC18).

F. Range, overflow, and chaining tests (deferred/careful)#

  1. Step the load toward higher currents only after the fabricated board's copper and shunt thermals are reviewed; verify OVF (0x02 bit 0) asserts past 3.2 A equivalent rather than silently wrapping. Do not soak at 3.2 A on a first article.
  2. Chain test: two modules on one bus, one with JP1/JP2 cut; verify both addresses ACK and idle levels remain ≈3.3 V with the combined pull-up.
  3. Bus-voltage range test with an elevated (e.g. 12 V) measured rail only after step E passes; confirm the 4 mV × count reading tracks a DMM.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No ACK at any addressSDA/SCL idle levels, 3V3 at U1 pin 5JP1/JP2 cut with no external pull-ups, U1 orientation/solder, J1 wiring
ACK at unexpected addressVoltage at A0/A1 pads during a transactionJP3/JP4 bridged wrong side, floating strap (both sides open)
Config reads garbage, not 0x399FRepeat at 100 kHz, check waveformsBus integrity, missing STOP, byte order (MSB first), analyzer decode
Current/power always 0Read 0x05CAL never written or write failed (0x05 bit 0 always reads 0 — that is normal)
Shunt register 0 with real loadDMM across R5Shunt shorted by solder, load actually wired J2.1→J2.3 bypassing R5
Current reading ×10 offR5 marking/measurementWrong shunt value or wrong Current_LSB in software
Negative readings with normal loadJ2 pin orderSupply and load swapped (IN+ / IN− reversed)
Bus voltage nonsenseGround bond J2.3 to host GNDMissing common ground; IN− not at load node
OVF bit set at modest currentPGA bits in 0x00Config rewritten to a smaller PGA range than ±320 mV
Readings unstable/noisyC1 presence, supply ripple, lead dressDecoupling, long unshielded sense leads, no averaging (raise SADC/BADC)

11. Bench record template#

FieldRecord
Board revision / serial
JP1/JP2 state (fitted/cut) and measured pull-up resistance
JP3/JP4 strap positions and resulting address
Host/supply, current limits, equipment and calibration IDs
Idle 3V3 current
Address-scan result
Config 0x00 readback
CAL written / readback
Zero-offset counts (0x01, 0x04)
33 Ω load: 0x01 / 0x04 / 0x02 / 0x03 raw values and converted units
DMM cross-check across R5
Reverse-current test result
Deviations, scope captures, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The schematic is a minimal, faithful implementation of the INA219 datasheet application circuit: shunt with kelvin intent, single 100 nF decoupler, strap-selectable address, and cuttable bus pull-ups for chaining. The calibration math closes cleanly for the 0.1 Ω shunt (Current_LSB = 100 µA, CAL = 0x1000, 3.2 A PGA-limited full scale). The principal open risks are exactly the unbuilt parts: no PCB layout (kelvin routing and shunt copper are still promises), no fabricated first article, and no bench evidence. The address-range claim in the README (0x40–0x45) should be trimmed to the four reachable codes, and the shunt-power ceiling (≈1 W dissipated at full scale) must be revisited during layout thermal review before any high-current use.