← AXS-020

Circuit review & bench-test guide

AXS-020 — TLV493D 3D hall-effect sensor PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-020-tlv493d prototype at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the generated schematic (generate_design.py, rev 0.1-schematic), the module README, and the manufacturer documents cited in Section 6.

The board is schematic-only: ERC is clean, but no PCB has been laid out and no board has been fabricated or assembled. There is no bench result of any kind. Every numeric value in this guide is a verification target taken from the design files or the manufacturer datasheets, not a measured result.

1. What the board does#

The board puts an Infineon TLV493D-A1B6 low-power 3D magnetic (Hall) sensor on the AruviX I2C PMOD template for a rotary-position lesson: a diametral magnet on a shaft spins above the SOT-23-6 package and the FPGA fabric computes the shaft angle as atan2(By, Bx), plus 3D field measurement and a CORDIC exercise. The sensor measures Bx/By/Bz up to ±130 mT with 12-bit resolution (0.098 mT/LSB) and includes a temperature channel.

The interface is minimal by design: the TLV493D has only SCL and SDA. There is no dedicated interrupt pin — when interrupt mode is enabled the sensor pulses SCL during bus idle — and there is no register-address pointer: reads always stream from read-register 0 upward, and a write transaction streams into write-registers 0–3. The I2C address is latched from the SDA level during power-up, which is the single most important bring-up quirk of this board (Section 3).

Functional block diagram#

PMOD host (3.3 V)
      │
      v
J1 PMOD plug (2x06)
  3/9  SCL  <──── JP2 ─── R2 4.7k ── 3V3   (SCL pull-up)
  4/10 SDA  <──── JP1 ─── R1 4.7k ── 3V3   (SDA pull-up)
  5/11 GND, 6/12 3V3
  1/2/7/8 NC (no interrupt pin exists on the sensor)
      │
      v
   U1 TLV493D-A1B6 (SOT-23-6)
      pin 4 VDD = 3V3 (C1 100n)
      pins 2/3/5 GND
      pin 1 SCL / /INT   (interrupt pulses multiplex onto SCL)
      pin 6 SDA / ADDR   (SDA level at power-up latches the I2C address)

2. Safety and scope boundaries#

3. Power and control sequence#

  1. 3V3 is applied on J1 pin 6/12; C1 (100 nF at VDD) charges. The supply should ramp fast (t_PUP ≤ 10 µs per datasheet Table 6) and settle inside 3.0–3.5 V. Power-up current draw I_DD-PUP is ~3.7 mA during the ramp.
  2. Address latch: during power-up the power-mode-control unit interprets the voltage on the ADDR pin — which is the SDA pin — as logical 0 or 1 and latches one of two I2C addresses (datasheet Section 2.1.1). On this board R1 pulls SDA to 3V3, so with a quiet bus the sensor latches SDA = high and answers at 7-bit address 0x5E (write 0xBC, read 0xBD). If anything holds SDA low at that instant — another device mid-transaction on a chained bus, a host actively driving, a scope ground bounce — the sensor latches the alternate address 0x1F (write 0x3E, read 0x3F) instead. (Address pair per the Infineon TLV493D-A1B6 user manual and Infineon's reference library; see Section 6.)
  3. After power-up the sensor is in power-down mode (7 nA typical), all measurement off. Registers can be read/written but no field data is produced yet.
  4. To measure, the host must write a 4-byte configuration (write-registers 0–3) that: copies three factory-setting bit fields from read-registers 7–9, selects the mode bits (FAST/LOW in MOD1, LP period and temperature enable in MOD2), and sets the parity bit so the total number of 1s in all 32 written bits is odd. A parity error makes the sensor ignore the configuration.
  5. In master-controlled mode (FAST = 1, LOW = 1, LP period = 1) a measurement of Bx, By, Bz (plus temperature unless disabled) runs after each readout; in low-power (100 Hz) or ultra-low-power (10 Hz) modes it runs on the internal oscillator, optionally pulsing /INT on SCL for 1.5 µs at end of conversion — leave interrupt off unless the host FSM tolerates pulses on the clock line.
  6. Reads always start at read-register 0: the host issues SAD+R and streams 7 bytes (Bx/By/Bz/Temp/flags) or 10 bytes (adds the factory registers). The sensor has no shadow buffers, so a read must not straddle a running conversion; check the CH bits (= 0) to confirm frame consistency.

There is no regulator or level shifter; #FLG01/#FLG02 are ERC-only power- flag artifacts with no physical part.

4. Interfaces#

PMOD pin map (Type 6 extended, J1 = 2x06 right-angle header)#

PMOD pin123456789101112
NetNCNCSCLSDAGND3V3NCNCSCLSDAGND3V3

Pins 9/10 repeat the bus for daisy-chaining. No interrupt pin is wired because the sensor has none.

Jumpers#

Ref.TypeDefaultMeaning
JP12-pad solder jumper, bridgedbridgedConnects R1 (4.7 kΩ) pull-up to SDA. Cut when another chained module provides the pull-ups. Note: some module on the bus must pull SDA high during power-up or the address latch is undefined
JP22-pad solder jumper, bridgedbridgedConnects R2 (4.7 kΩ) pull-up to SCL. Cut with JP1

Test points#

None are defined in the schematic. Probe at J1 pins; consider adding SDA/SCL/3V3 test points at layout, since power-up bus state matters more on this module than on most.

5. Component-by-component review#

Every reference designator in generate_design.py is covered.

Ref.Part / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J12x06 right-angle PMOD headerHost connection: power and I2C, bus repeated for chainingNo module functionReversed/offset insertion can put 3V3 on SDA/SCL — within abs max here (3.5 V > 3.3 V) but still wrong; inspect before power
U1Infineon TLV493D-A1B6 HTSA1, SOT-23-6The 3D Hall sensorNothing to test180° rotation swaps VDD/GND pins and can destroy the part at power-on; solder bridge on pins 1/6 shorts the bus
C1100 nF 16 V X7R (Murata GRM188R71C104KA01D)VDD decoupling close to U1; the datasheet application circuit uses exactly C1 = 100 nF and notes it may be doubled for harsh EMC3.7 mA ADC bursts every cycle land on the supply: noisy readings, possible resets/mis-latchShort is a 3V3-GND short: module dead, supply current-limits
R14.7 kΩ (Yageo RC0603FR-074K7L)SDA pull-up (behind JP1). Doubles as the address strap: it defines SDA = high during power-up → address 0x5ESDA floats: no I2C, and the power-up address latch becomes undefinedStuck-high SDA (short to 3V3) kills the bus; note the datasheet app circuit uses 1.2 kΩ — 4.7 kΩ is valid for 400 kHz with modest bus capacitance but limits maximum bit rate (sensor supports up to 1 MHz with stronger pull-ups)
R24.7 kΩSCL pull-up (behind JP2)Clock never rises: bus deadAs R1; also carries the optional 1.5 µs /INT pulses, so edges matter
JP1Solder jumper, bridgedSDA pull-up disconnect for chainingOpen (cut) with no other pull-up = floating SDA and undefined address latchRe-bridged in a chain that already has pull-ups: parallel pull-ups (2.35 kΩ for two) — verify total
JP2Solder jumper, bridgedSCL pull-up disconnectAs JP1, on SCLAs JP1
#FLG01, #FLG02Power flags (3V3, GND)ERC-only artifacts so KiCad sees driven power netsNo physical effectNo physical part exists; nothing to assemble

Key U1 datasheet parameters (TLV493D-A1B6, Rev 1.1, 2019-04-09)#

ParameterValue
VDD operating / absolute max2.8–3.5 V / 3.5 V (any pin −0.1 to 3.5 V)
Power-up ramp t_PUP / envelope V_OUS / I_DD-PUP≤10 µs / 3.0–3.5 V / ~3.7 mA
I_DD power-down (default after power-on)7 nA typ, 100 nA max
I_DD ultra-low-power (10 Hz) / low-power (100 Hz)10 µA / 80 µA typ (−25 % with temperature channel disabled)
ADC burst~3.7 mA for ~270 µs per measurement; budget ≥10 mA supply
Field range / sensitivity / resolution±130 mT / 10.2 LSB12 per mT / 98 µT per LSB (12-bit)
Offset / noise±1 mT max offset at 0 mT; 0.1 mT rms noise
Temperature channel340 LSB at 25 °C, 1.1 °C/LSB, ±10 °C accuracy
I2C clock400 kHz typ, 1 MHz max (pull-up/C dependent)
/INT pulse (on SCL)1.5 µs low, end of conversion
Max update rate3.3 kHz ADC conversion rate (fast mode)
I2C addresses (7-bit)0x5E (SDA high at power-up) / 0x1F (SDA low) — from the user manual and Infineon reference library

6. Datasheet summary and design interpretation#

SourceKey facts used hereBoard-specific interpretation
TLV493D-A1B6 datasheetPinout (SDA/ADDR pin 6, SCL//INT pin 1, three GND pins); power-up latches address from ADDR; power-down default state; electrical limits and timing above; application circuit with 100 nF and pull-upsThe board is the datasheet application circuit minus the optional series resistors and SCL filter capacitor; those may be worth adding at layout for long chains
TLV493D-A1B6 user manual (v1.03)Register bitmap: read regs 0–9 (Bx, By, Bz, Temp, FRM/CH, factory regs 7–9), write regs 0–3 (MOD1: parity/IICaddr/INT/FAST/LOW; MOD2: temp-disable/LP-period/parity-test), odd-parity rule, recovery/reset frameSection 9's frame parsing and config write are this bitmap. Note: the user-manual PDF could not be fetched during this review (Mouser/Infineon links timed out); the bitmap was verified against Infineon's own reference library instead and should be re-checked against the UM before release
Infineon TLV493D-A1B6 Arduino library (reference implementation)ADDRESS1 = 0x5E, ADDRESS2 = 0x1F; reset frame = general-call write to 0x00 with data 0x00 (recover to 0x5E) or 0xFF (0x1F); copy R_RES1/2/3 → W_RES1/2/3; odd parity over all 4 write bytes; mode bit valuesUsed as the executable specification for bring-up
Yageo RC / Murata GRM pagesGeneric passivesValues as discussed above

Official references: TLV493D-A1B6 datasheet (Infineon), TLV493D-A1B6 user manual v1.03 (Mouser-hosted), Infineon TLV493D-A1B6 reference library (GitHub), Yageo RC thick-film resistors. Check the latest revisions before procurement.

7. Expected values before bench testing#

All values are targets from the schematic and the documents above; none has been measured on hardware.

QuantityTargetHow to check
3V3-to-GND resistance, unpoweredno hard shortDMM at J1 pin 6 vs 5
SDA to 3V3 (JP1 bridged)≈ 4.7 kΩ (R1)DMM at J1 pin 4 vs 6
SCL to 3V3 (JP2 bridged)≈ 4.7 kΩ (R2)DMM at J1 pin 3 vs 6
SDA/SCL to 3V3, jumpers cutopen (leakage only)Same, after cutting
Bus idle levels, poweredSDA = SCL = 3.3 VScope/DMM
Supply current after clean power-up (power-down mode)nA range — likely below bench-meter floor; "no measurable current" is the passµA meter in 3V3 lead
Supply current, low-power mode~80 µA avg with 3.7 mA/270 µs burstsµA meter + scope on a sense resistor
Address-ACK scan after quiet power-upACK at 0x5E onlyI2C scan
Address after deliberate mis-latch (SDA held low at power-up)ACK at 0x1F onlySection 9.D
First 10-byte frame at rest12-bit Bx/By/Bz within ±1 mT (≈ ±10 LSB) of zero; CH = 0; FRM increments between framesSection 9.E
Earth field visibility~25–65 µT ≈ 0.3–0.7 LSB — at or below one LSB; do not expect to resolve it reliably. Use a magnet for a definite stimulusSection 9.F
Temperature channel≈340 LSB at 25 °C, 1.1 °C/LSBFrame bytes 3/6
Diametral magnet rotationatan2(By, Bx) sweeps 0–360° monotonicallySection 9.F

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. PMOD host at 3.3 V or a current-limited 3.3 V bench supply on J1 pins 6/12 and 5/11. Verify supply overshoot < 3.5 V into a dummy load before ever connecting the module.

A. Unpowered inspection and resistance tests#

  1. Complete the Section 8 checklist under magnification.
  2. Measure 3V3-to-GND in both polarities; investigate any hard short.
  3. Pull-up jumper verification (fitted default): SDA (J1 pin 4) to 3V3 (pin 6) ≈ 4.7 kΩ; SCL (pin 3) to 3V3 ≈ 4.7 kΩ.
  4. If chaining, cut JP1/JP2 and re-measure: both go open; confirm the chain still has exactly one 4.7 kΩ per line, and note that the surviving pull-up now defines this sensor's power-up address too.

B. First power, idle current, bus idle levels#

  1. Apply 3.3 V (50 mA limit) with the bus completely idle — host attached but not transacting, SDA released high.
  2. Expect essentially zero steady current (power-down mode, 7 nA typical; below most bench meters). A steady mA-range draw means a fault.
  3. Probe SDA and SCL: both at 3.3 V.

C. Address-ACK scan#

  1. Scan the bus at 100 kHz. Expect an ACK at exactly 0x5E and nowhere else from this module.
  2. An ACK at 0x1F instead means the address mis-latched: something held SDA low during power-up. Go to step D.

D. Address-latch quirk: deliberate mis-latch and recovery#

This step characterizes the board's one real trap so it is recognized later.

  1. Power off. Force SDA low (host driving low, or a temporary 1 kΩ to GND stronger than R1). Power on, release SDA, rescan: the sensor should now ACK at 0x1F and not at 0x5E — demonstrating that bus traffic during power-up re-addresses the part.
  2. Recovery, option 1 (preferred): power-cycle with a quiet bus (SDA high through R1). Rescan: back at 0x5E.
  3. Recovery, option 2 (documented reset frame, per Infineon's library): general-call write — START, address byte 0x00, data byte 0x00, STOP — re-initializes the sensor to address 0x5E (data 0xFF selects 0x1F). Also useful when a host reset stranded the sensor mid-transaction.
  4. Rule derived for AruviX hosts: never start I2C traffic until 3V3 is stable, and after any brownout, either power-cycle or send the reset frame before trusting the address.

E. First transaction: factory read, config write, first frame#

The sensor has no register pointer: a read streams from read-register 0.

  1. Read 10 bytes: START, 0xBD (SAD+R for 0x5E), read 10 bytes, NACK, STOP. Bytes 0–6 are the measurement frame; bytes 7–9 are factory settings. In power-down mode the field bytes hold the reset/default frame — the interesting content right now is bytes 7–9. Save them.
  2. Build the 4-byte config (write-registers 0–3):
  1. Write: START, 0xBC (SAD+W), WB0, WB1, WB2, WB3, STOP. Expect ACKs on all five bytes.
  2. Wait ≥10 ms, then read 7 bytes (SAD+R, 7 bytes): parse
  1. Expected at rest (no magnet): each axis within the ±1 mT offset band (≈ ±10 LSB) — i.e. near zero; Earth's field (~25–65 µT) is below one LSB (98 µT) and may show only as a stable ±1-count bias. CH must be 0 (all channels from the same frame) and FRM must increment modulo 4 between successive reads — a frozen FRM means the config write was rejected (almost always parity or missing factory bits).

F. Magnet and rotary-position test#

  1. Bring a small magnet toward each package face: the matching axis must respond with tens to hundreds of LSB and correct sign per the datasheet's field-direction figure (positive = south pole facing the element).
  2. Confirm no axis saturates (±2047 LSB rails) at the intended magnet working distance; if it does, increase distance — angle accuracy needs the linear ±130 mT region.
  3. Mount a diametral magnet on a shaft above the package. Rotate slowly: atan2(By, Bx) must sweep monotonically through 360° per revolution, and Bz should stay roughly constant. Record the amplitude ratio |Bx|/|By| (X/Y matching is ±5 % typ drift; gross mismatch means geometry is off).

G. Modes, rates, and current#

  1. In low-power mode (100 Hz), verify ~100 frames/s of fresh FRM counts and an average current of order 80 µA (65 µA with temperature disabled via WB3 bit7 — expect roughly −25 %).
  2. In ultra-low-power (10 Hz), verify ~10 frames/s and ~10 µA.
  3. Optionally enable INT (WB1 bit2) and scope SCL for the 1.5 µs end-of- conversion low pulse — only with the host master idled, and disable it again afterward.
  4. Return to power-down (FAST = 0, LOW = 0) and confirm current collapses to the meter floor.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No ACK at 0x5Escan 0x1F too; SDA level during power-upMis-latched address (bus not quiet), U1 unpowered/rotated, bridge on pins 1/6
ACK at 0x1Fpower-up SDA stateHost or chained device drove SDA low during VDD ramp; recover per 9.D
ACK address changes between power cyclessupply ramp shape, overshootSlow/dirty ramp violating t_PUP/V_OUS; brownout without reset frame
Config write ACKed but FRM frozen / mode never enteredrecompute parity; re-read regs 7–9Parity bit wrong, factory bits not copied, WB order wrong
CH ≠ 0 in framesread timing vs conversionReading during conversion (no shadow buffers): slow the poll or use /INT timing
Readings railed at ±2047magnet distanceField beyond ±130 mT linear range
All-zero field bytes forevermode bits in WB1/WB3Still in power-down; FAST/LOW/LP-period not set
Bus hangs after host resetSCL/SDA idle levelsSensor stranded mid-read: send reset frame (9.D.3) or power-cycle
mA-range steady currentthermal, resistance checksSolder bridge, C1 short, damaged U1 (overvoltage history?)
SCL glitches confuse hostscope SCL during idleINT mode left enabled: 1.5 µs pulses on SCL

11. Bench record template#

FieldRecord
Board revision / serial
Supply used; measured overshoot at power-on
JP1/JP2 state and measured pull-up resistance
Address-scan result after quiet power-up
Mis-latch test result (0x1F) and recovery method verified
Factory register bytes (read regs 7–9)
Config bytes written (WB0..WB3) and parity
First-frame values (Bx/By/Bz LSB, CH, FRM, Temp)
Magnet-response and rotation-sweep notes
Mode currents (PD / ULP / LP / master-controlled)
Deviations, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The schematic is intentionally minimal and matches the datasheet application circuit: one decoupling capacitor, two pull-ups behind chain jumpers, and nothing else. Its correctness therefore lives almost entirely in procedure: the power-up address latch means the pull-ups are not just bus components but configuration straps, and the no-register-pointer protocol plus the odd-parity config write make the first transaction the real test. The principal open risks are the tight 3.5 V absolute maximum against bench supply overshoot, address mis-latch behavior in chained configurations (only one module's pull-ups survive, and power-up bus quietness becomes a system property), the unfetched user manual (bitmap verified against Infineon's reference library, to be re-checked), and — as with every board in this series — the fact that no PCB exists yet, so every number above is a target, not a result.