Skip to content

INA3221

TI INA3221 three-channel shunt and bus voltage monitor.

Live catalog

Prefer labwired_describe with the catalog id over guessing pins or addresses.

Status at a glance

Aspect Status
Catalog id ina3221
Bus I²C
Address 0x40 (0x40–0x43 by A0)
Source configs/devices/ina3221.yaml (declarative, no Rust model)
Datasheet TI SBOS576C, §8.1 Table 8-1 and §8.2 register descriptions
Tier smoke-proven (register-level tests: crates/core/tests/everyday_sensor_set.rs)

Pins / attachment

Pin / net Role
SDA I²C SDA
SCL I²C SCL
VDD/GND Power (digital twin)

Support matrix

Behavior Status Notes
Manufacturer ID 0x5449 / Die ID 0x3220 ✅
Configuration POR 0x7127, RST ✅ All registers back to POR
CHn shunt (40 µV/LSB) / bus (8 mV/LSB) ✅ 13-bit two's complement at D15:D3, D2:D0 = 0
Shunt-voltage sum (SCC1..SCC3) ✅ Σ counts in D14:D1
CVRF ⚠️ 6.6 ms after a Configuration write (3 × 2.2 ms)
Mask/Enable POR 0x0002 (TCF) ⚠️ TCF stays set; timing-control sequence not modelled
Averaging, channel disable, alerts, power-valid ❌ Not modelled

Stimulus

Host inputs: ch1_bus_voltage, ch2_bus_voltage, ch3_bus_voltage (V), ch1_current, ch2_current, ch3_current (A through 0.1 Ω).

How to run

  1. Place the part and an MCU in Playground, or add it to a system YAML:
    external_devices:
      - id: "ina3221"
        type: "ina3221"
        connection: "i2c0"   # the bus id your chip system uses
    
  2. Agent: labwired_list → labwired_describe id=ina3221 → wire → labwired_validate → labwired_run / labwired_verify.
  3. Register-level smoke: cargo test -p labwired-core --test everyday_sensor_set — IDs, Configuration 0x7127, CH1 shunt 4000 and bus 5000 at 0.2 A / 5 V. The same file's negative control proves the check fails against a part that answers only 0x00 or only 0xFF.

Limitations

  • D15 of the data words is SIGN (Tables 8-6 / 8-8), not don't-care.

See the YAML header for the full datasheet trace and every named approximation.