Device driver for Texas Instruments INA3221 three-channel, high-side current and bus voltage monitor. More...

Detailed Description

Device driver for Texas Instruments INA3221 three-channel, high-side current and bus voltage monitor.

Files

file  ina3221_defines.h
 Internal definitions for Texas Instruments INA3221 three-channel, high-side current and bus voltage monitor.
 
file  ina3221_internal.h
 Functions to convert register values of INA3221 to actual voltage values and vice versa.
 
file  ina3221_params.h
 Driver configuration parameters for Texas Instruments INA3221 three-channel, high-side current and bus voltage monitor.
 
file  ina3221_regs.h
 Register definitions for Texas Instruments INA3221 three-channel, high-side current and bus voltage monitor.
 
file  ina3221.h
 Device driver interface for Texas Instruments INA3221 three-channel, high-side current and bus voltage monitor.
 

Data Structures

struct  ina3221_params_t
 INA3221 device parameters. More...
 
struct  ina3221_t
 INA3221 device handle struct. More...
 

Macros

#define INA3221_NUM_CH   (3)
 Number of channels.
 
#define INA3221_NUM_ALERTS   (4)
 Number of alerts.
 
#define INA3221_MODE_MASK   (0x0007)
 Device operation mode bit mask.
 
#define INA3221_CONV_TIME_SADC_MASK   (0x0038)
 ADC shunt voltage conversion times bit mask.
 
#define INA3221_CONV_TIME_BADC_MASK   (0x01C0)
 ADC bus voltage conversion times bit mask.
 
#define INA3221_NUM_SAMPLES_MASK   (0x0E00)
 Number of samples to calculate average shunt/bus voltage value bit mask.
 
#define INA3221_ENABLE_CH_MASK
 Enable channel bit mask. More...
 
#define INA3221_ENABLE_SUM_CH_MASK
 Enable shunt voltage sum calculation channel bit mask. More...
 
#define INA3221_ENABLE_LATCH_MASK
 Enable latch bit mask. More...
 
#define INA3221_DEFCONFIG   (0x7127)
 Default configuration register value.
 
#define INA3221_RESET   (0x8000)
 Reset configuration register value.
 
#define INA3221_FLAG_CRIT_ALERT_CH1   (0x0200)
 Critical alert channel 1 flag.
 
#define INA3221_FLAG_CRIT_ALERT_CH2   (0x0100)
 Critical alert channel 2 flag.
 
#define INA3221_FLAG_CRIT_ALERT_CH3   (0x0080)
 Critical alert channel 3 flag.
 
#define INA3221_FLAG_SHUNT_SUM_ALERT   (0x0040)
 Alert channel sum flag.
 
#define INA3221_FLAG_WARN_ALERT_CH1   (0x0020)
 Warning alert channel 1 flag.
 
#define INA3221_FLAG_WARN_ALERT_CH2   (0x0010)
 Warning alert channel 2 flag.
 
#define INA3221_FLAG_WARN_ALERT_CH3   (0x0008)
 Warning alert channel 3 flag.
 
#define INA3221_FLAG_POWER_VALID   (0x0004)
 Power valid flag.
 
#define INA3221_FLAG_TIMING_CONTROL   (0x0002)
 Timing Control flag.
 
#define INA3221_FLAG_CONV_READY   (0x0001)
 Conversion ready flag.
 
#define INA3221_FLAGS_MASK
 Flags bit mask. More...
 
#define INA3221_TRIGGER_SHUNT(dev)   ina3221_set_mode(dev, INA3221_MODE_TRIGGER_SHUNT_ONLY)
 Set operation mode to INA3221_MODE_TRIGGER_SHUNT_ONLY to trigger shunt voltage measurement. More...
 
#define INA3221_TRIGGER_BUS(dev)   ina3221_set_mode(dev, INA3221_MODE_TRIGGER_BUS_ONLY)
 Set operation mode to INA3221_MODE_TRIGGER_BUS_ONLY to trigger bus voltage measurement. More...
 
#define INA3221_TRIGGER_SHUNT_AND_BUS(dev)   ina3221_set_mode(dev, INA3221_MODE_TRIGGER_SHUNT_BUS)
 Set operation mode to INA3221_MODE_TRIGGER_SHUNT_BUS to trigger shunt and bus voltage measurement. More...
 

Typedefs

typedef void(* ina3221_alert_cb_t) (void *arg)
 INA3221 alert callback for alert pins CRT, WRN, TC, PV.
 
typedef enum ina3221_dev_addr ina3221_dev_addr_t
 I2C device addresses.
 
typedef enum ina3221_channel ina3221_channel_t
 Channel flags.
 
typedef enum ina3221_alert ina3221_alert_t
 Alert indices.
 
typedef enum ina3221_mode ina3221_mode_t
 Device operation modes.
 
typedef enum ina3221_conv_time_shunt_adc ina3221_conv_time_shunt_adc_t
 ADC shunt voltage conversion times.
 
typedef enum ina3221_conv_time_bus_adc ina3221_conv_time_bus_adc_t
 ADC bus voltage conversion times.
 
typedef enum ina3221_num_samples ina3221_num_samples_t
 Number of samples to calculate average shunt/bus voltage value.
 
typedef enum ina3221_enable_ch ina3221_enable_ch_t
 Enable channel flags.
 
typedef enum ina3221_enable_sum_ch ina3221_enable_sum_ch_t
 Enable shunt voltage sum calculation channel flags.
 
typedef enum ina3221_enable_latch ina3221_enable_latch_t
 Enable latch flags.
 
typedef unsigned ina3221_ch_t
 Flags ina3221_channel_t.
 

Enumerations

enum  ina3221_dev_addr { INA3221_ADDR_00 = 0x40, INA3221_ADDR_01 = 0x41, INA3221_ADDR_10 = 0x42, INA3221_ADDR_11 = 0x43 }
 I2C device addresses. More...
 
enum  ina3221_channel { INA3221_CH1 = (1U << 0), INA3221_CH2 = (1U << 1), INA3221_CH3 = (1U << 2) }
 Channel flags. More...
 
enum  ina3221_alert { INA3221_ALERT_WRN = 0, INA3221_ALERT_CRT = 1, INA3221_ALERT_TC = 2, INA3221_ALERT_PV = 3 }
 Alert indices. More...
 
enum  ina3221_mode {
  INA3221_MODE_POWER_DOWN = 0x0000, INA3221_MODE_TRIGGER_SHUNT_ONLY = 0x0001, INA3221_MODE_TRIGGER_BUS_ONLY = 0x0002, INA3221_MODE_TRIGGER_SHUNT_BUS = 0x0003,
  INA3221_MODE_POWER_DOWN_ = 0x0004, INA3221_MODE_CONTINUOUS_SHUNT_ONLY = 0x0005, INA3221_MODE_CONTINUOUS_BUS_ONLY = 0x0006, INA3221_MODE_CONTINUOUS_SHUNT_BUS = 0x0007
}
 Device operation modes. More...
 
enum  ina3221_conv_time_shunt_adc {
  INA3221_CONV_TIME_SADC_140US = 0x0000, INA3221_CONV_TIME_SADC_204US = 0x0008, INA3221_CONV_TIME_SADC_332US = 0x0010, INA3221_CONV_TIME_SADC_588US = 0x0018,
  INA3221_CONV_TIME_SADC_1100US = 0x0020, INA3221_CONV_TIME_SADC_2116US = 0x0028, INA3221_CONV_TIME_SADC_4156US = 0x0030, INA3221_CONV_TIME_SADC_8244US = 0x0038
}
 ADC shunt voltage conversion times. More...
 
enum  ina3221_conv_time_bus_adc {
  INA3221_CONV_TIME_BADC_140US = 0x0000, INA3221_CONV_TIME_BADC_204US = 0x0040, INA3221_CONV_TIME_BADC_332US = 0x0080, INA3221_CONV_TIME_BADC_588US = 0x00C0,
  INA3221_CONV_TIME_BADC_1100US = 0x0100, INA3221_CONV_TIME_BADC_2116US = 0x0140, INA3221_CONV_TIME_BADC_4156US = 0x0180, INA3221_CONV_TIME_BADC_8244US = 0x01C0
}
 ADC bus voltage conversion times. More...
 
enum  ina3221_num_samples {
  INA3221_NUM_SAMPLES_1 = 0x0000, INA3221_NUM_SAMPLES_4 = 0x0200, INA3221_NUM_SAMPLES_16 = 0x0400, INA3221_NUM_SAMPLES_64 = 0x0600,
  INA3221_NUM_SAMPLES_128 = 0x0800, INA3221_NUM_SAMPLES_256 = 0x0A00, INA3221_NUM_SAMPLES_512 = 0x0C00, INA3221_NUM_SAMPLES_1024 = 0x0E00
}
 Number of samples to calculate average shunt/bus voltage value. More...
 
enum  ina3221_enable_ch { INA3221_ENABLE_CH1 = 0x4000, INA3221_ENABLE_CH2 = 0x2000, INA3221_ENABLE_CH3 = 0x1000 }
 Enable channel flags. More...
 
enum  ina3221_enable_sum_ch { INA3221_ENABLE_SUM_CH1 = 0x4000, INA3221_ENABLE_SUM_CH2 = 0x2000, INA3221_ENABLE_SUM_CH3 = 0x1000 }
 Enable shunt voltage sum calculation channel flags. More...
 
enum  ina3221_enable_latch { INA3221_ENABLE_WARN_LATCH = 0x0800, INA3221_ENABLE_CRIT_LATCH = 0x0400 }
 Enable latch flags. More...
 

Functions

int ina3221_reset (ina3221_t *dev)
 Reset device, i.e. More...
 
int ina3221_init (ina3221_t *dev, const ina3221_params_t *params)
 Initialize device. More...
 
int ina3221_enable_alert (ina3221_t *dev, ina3221_alert_t alert, ina3221_alert_cb_t cb, void *arg)
 Enable alert and set callback and argument for alert alert. More...
 
static int ina3221_enable_warning_alert (ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
 Wrapper around ina3221_enable_alert, to enable warning alert. More...
 
static int ina3221_enable_critical_alert (ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
 Wrapper around ina3221_enable_alert, to enable critical alert. More...
 
static int ina3221_enable_timing_control_alert (ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
 Wrapper around ina3221_enable_alert, to enable timing control alert. More...
 
static int ina3221_enable_power_valid_alert (ina3221_t *dev, ina3221_alert_cb_t cb, void *arg)
 Wrapper around ina3221_enable_alert, to enable power valid alert. More...
 
int ina3221_disable_alert (ina3221_t *dev, ina3221_alert_t alert)
 Disable alert alert. More...
 
static int ina3221_disable_warning_alert (ina3221_t *dev)
 Wrapper around ina3221_disable_alert, to disable warning alert. More...
 
static int ina3221_disable_critical_alert (ina3221_t *dev)
 Wrapper around ina3221_disable_alert, to disable critical alert. More...
 
static int ina3221_disable_timing_control_alert (ina3221_t *dev)
 Wrapper around ina3221_disable_alert, to disable timing control alert. More...
 
static int ina3221_disable_power_valid_alert (ina3221_t *dev)
 Wrapper around ina3221_disable_alert, to disable power valid alert. More...
 
static ina3221_ch_t ina3221_config_get_enabled_channels (uint16_t cfg)
 Get enabled measurement channels from configuration value. More...
 
static void ina3221_config_set_enabled_channels (uint16_t *cfg, ina3221_ch_t ch)
 Enable measurement channels in configuration value. More...
 
static ina3221_num_samples_t ina3221_config_get_num_samples (uint16_t cfg)
 Get number of samples from configuration value. More...
 
static void ina3221_config_set_num_samples (uint16_t *cfg, ina3221_num_samples_t ns)
 Set number of samples in configuration value. More...
 
static ina3221_conv_time_bus_adc_t ina3221_config_get_conv_time_bus (uint16_t cfg)
 Get bus voltage conversion time from configuration value. More...
 
static void ina3221_config_set_conv_time_bus (uint16_t *cfg, ina3221_conv_time_bus_adc_t bus)
 Set bus voltage conversion time in configuration value. More...
 
static ina3221_conv_time_shunt_adc_t ina3221_config_get_conv_time_shunt (uint16_t cfg)
 Get shunt voltage conversion time from configuration value. More...
 
static void ina3221_config_set_conv_time_shunt (uint16_t *cfg, ina3221_conv_time_shunt_adc_t shunt)
 Set shunt voltage conversion time in configuration value. More...
 
static ina3221_mode_t ina3221_config_get_mode (uint16_t cfg)
 Get operation mode from configuration value. More...
 
static void ina3221_config_set_mode (uint16_t *cfg, ina3221_mode_t mode)
 Set operation mode in configuration value. More...
 
int ina3221_set_config (ina3221_t *dev, uint16_t cfg)
 Write configuration register value to configuration register. More...
 
int ina3221_get_config (const ina3221_t *dev, uint16_t *cfg)
 Read currently saved configuration register value. More...
 
int ina3221_set_enable_channel (ina3221_t *dev, ina3221_ch_t ch)
 Enable channels. More...
 
static void ina3221_get_enable_channel (const ina3221_t *dev, ina3221_ch_t *ch)
 Read which channels are currently enabled. More...
 
int ina3221_set_num_samples (ina3221_t *dev, ina3221_num_samples_t ns)
 Update number of samples and write to configuration register. More...
 
static void ina3221_get_num_samples (const ina3221_t *dev, ina3221_num_samples_t *ns)
 Read currently applied number of samples. More...
 
int ina3221_set_conv_time_bus_adc (ina3221_t *dev, ina3221_conv_time_bus_adc_t ctb)
 Update conversion time of bus voltage ADC and write to configuration register. More...
 
static void ina3221_get_conv_time_bus_adc (const ina3221_t *dev, ina3221_conv_time_bus_adc_t *ctb)
 Read currently applied bus voltage ADC conversion time. More...
 
int ina3221_set_conv_time_shunt_adc (ina3221_t *dev, ina3221_conv_time_shunt_adc_t cts)
 Update conversion time of shunt voltage ADC and write to configuration register. More...
 
static void ina3221_get_conv_time_shunt_adc (const ina3221_t *dev, ina3221_conv_time_shunt_adc_t *cts)
 Read currently applied shunt voltage ADC conversion time. More...
 
int ina3221_set_mode (ina3221_t *dev, ina3221_mode_t mode)
 Update device operation mode. More...
 
static void ina3221_get_mode (const ina3221_t *dev, ina3221_mode_t *mode)
 Read currently applied device operation mode. More...
 
int ina3221_set_enable_sum_channel (const ina3221_t *dev, ina3221_ch_t ch)
 Enable channels for shunt voltage sum calculation. More...
 
int ina3221_get_enable_sum_channel (const ina3221_t *dev, ina3221_ch_t *ch)
 Read enabled channels for shunt voltage sum calculation. More...
 
int ina3221_set_latch (const ina3221_t *dev, bool warn, bool crit)
 Enable latches for critical/warning alert pins. More...
 
int ina3221_get_latch (const ina3221_t *dev, bool *warn, bool *crit)
 Read enabled latches for critical/warning alert pins. More...
 
ina3221_ch_t ina3221_set_crit_alert_limit (const ina3221_t *dev, ina3221_ch_t ch, int32_t in_uv)
 Set critical shunt voltage alert limit to in_uv for each channel in ch. More...
 
ina3221_ch_t ina3221_get_crit_alert_limit (const ina3221_t *dev, ina3221_ch_t ch, int32_t out_uv[INA3221_NUM_CH])
 Read critical shunt voltage alert limit for each channel in ch. More...
 
ina3221_ch_t ina3221_set_warn_alert_limit (const ina3221_t *dev, ina3221_ch_t ch, int32_t in_uv)
 Set warning shunt voltage alert limit to in_uv for each channel in ch. More...
 
ina3221_ch_t ina3221_get_warn_alert_limit (const ina3221_t *dev, ina3221_ch_t ch, int32_t out_uv[INA3221_NUM_CH])
 Read warning shunt voltage alert limit for each channel in ch. More...
 
int ina3221_set_shunt_voltage_sum_alert_limit (const ina3221_t *dev, int32_t in_uv)
 Set shunt voltage sum alert limit to in_uv. More...
 
int ina3221_get_shunt_voltage_sum_alert_limit (const ina3221_t *dev, int32_t *out_uv)
 Read shunt voltage sum alert limit. More...
 
int ina3221_set_power_valid_upper_limit (const ina3221_t *dev, int32_t in_mv)
 Set bus voltage power valid upper limit to in_mv. More...
 
int ina3221_get_power_valid_upper_limit (const ina3221_t *dev, int32_t *out_mv)
 Read bus voltage power valid upper limit. More...
 
int ina3221_set_power_valid_lower_limit (const ina3221_t *dev, int32_t in_mv)
 Set bus voltage power valid lower limit to in_mv. More...
 
int ina3221_get_power_valid_lower_limit (const ina3221_t *dev, int32_t *out_mv)
 Read bus voltage power valid lower limit. More...
 
int ina3221_read_flags (const ina3221_t *dev, uint16_t *flags)
 Read status flags. More...
 
int ina3221_read_shunt_sum_uv (const ina3221_t *dev, int32_t *out_uv, uint16_t *flags)
 Read sum of shunt voltages. More...
 
ina3221_ch_t ina3221_read_shunt_uv (const ina3221_t *dev, int32_t out_uv[INA3221_NUM_CH], uint16_t *flags)
 Read shunt voltages for each channel in ch. More...
 
ina3221_ch_t ina3221_read_bus_mv (const ina3221_t *dev, int16_t out_mv[INA3221_NUM_CH], uint16_t *flags)
 Read bus voltages for each channel in ch. More...
 
void ina3221_calculate_current_ua (ina3221_ch_t ch, const uint16_t in_mohm[INA3221_NUM_CH], const int32_t in_uv[INA3221_NUM_CH], int32_t out_ua[INA3221_NUM_CH])
 Calculate current for each channel in ch. More...
 
void ina3221_calculate_power_uw (ina3221_ch_t ch, const int16_t in_mv[INA3221_NUM_CH], const int32_t in_ua[INA3221_NUM_CH], int32_t out_mw[INA3221_NUM_CH])
 Calculate power from bus voltage and current values. More...
 

Macro Definition Documentation

◆ INA3221_ENABLE_CH_MASK

#define INA3221_ENABLE_CH_MASK
Value:
Enable channel 2.
Definition: ina3221.h:207
Enable channel 1.
Definition: ina3221.h:206
Enable channel 3.
Definition: ina3221.h:208

Enable channel bit mask.

Definition at line 213 of file ina3221.h.

◆ INA3221_ENABLE_LATCH_MASK

#define INA3221_ENABLE_LATCH_MASK
Value:
Enable warning alert latch.
Definition: ina3221.h:236
Enable critical alert latch.
Definition: ina3221.h:237

Enable latch bit mask.

Definition at line 242 of file ina3221.h.

◆ INA3221_ENABLE_SUM_CH_MASK

#define INA3221_ENABLE_SUM_CH_MASK
Value:
Enable sum channel 3.
Definition: ina3221.h:223
Enable sum channel 2.
Definition: ina3221.h:222
Enable sum channel 1.
Definition: ina3221.h:221

Enable shunt voltage sum calculation channel bit mask.

Definition at line 228 of file ina3221.h.

◆ INA3221_FLAGS_MASK

#define INA3221_FLAGS_MASK
Value:
#define INA3221_FLAG_SHUNT_SUM_ALERT
Alert channel sum flag.
Definition: ina3221.h:292
#define INA3221_FLAG_CONV_READY
Conversion ready flag.
Definition: ina3221.h:302
#define INA3221_FLAG_WARN_ALERT_CH3
Warning alert channel 3 flag.
Definition: ina3221.h:296
#define INA3221_FLAG_TIMING_CONTROL
Timing Control flag.
Definition: ina3221.h:300
#define INA3221_FLAG_WARN_ALERT_CH1
Warning alert channel 1 flag.
Definition: ina3221.h:294
#define INA3221_FLAG_CRIT_ALERT_CH1
Critical alert channel 1 flag.
Definition: ina3221.h:288
#define INA3221_FLAG_CRIT_ALERT_CH3
Critical alert channel 3 flag.
Definition: ina3221.h:290
#define INA3221_FLAG_WARN_ALERT_CH2
Warning alert channel 2 flag.
Definition: ina3221.h:295
#define INA3221_FLAG_POWER_VALID
Power valid flag.
Definition: ina3221.h:298
#define INA3221_FLAG_CRIT_ALERT_CH2
Critical alert channel 2 flag.
Definition: ina3221.h:289

Flags bit mask.

Definition at line 307 of file ina3221.h.

◆ INA3221_TRIGGER_BUS

#define INA3221_TRIGGER_BUS (   dev)    ina3221_set_mode(dev, INA3221_MODE_TRIGGER_BUS_ONLY)

Set operation mode to INA3221_MODE_TRIGGER_BUS_ONLY to trigger bus voltage measurement.

Parameters
devDevice handle

Definition at line 1090 of file ina3221.h.

◆ INA3221_TRIGGER_SHUNT

#define INA3221_TRIGGER_SHUNT (   dev)    ina3221_set_mode(dev, INA3221_MODE_TRIGGER_SHUNT_ONLY)

Set operation mode to INA3221_MODE_TRIGGER_SHUNT_ONLY to trigger shunt voltage measurement.

Parameters
devDevice handle

Definition at line 1081 of file ina3221.h.

◆ INA3221_TRIGGER_SHUNT_AND_BUS

#define INA3221_TRIGGER_SHUNT_AND_BUS (   dev)    ina3221_set_mode(dev, INA3221_MODE_TRIGGER_SHUNT_BUS)

Set operation mode to INA3221_MODE_TRIGGER_SHUNT_BUS to trigger shunt and bus voltage measurement.

Parameters
devDevice handle

Definition at line 1099 of file ina3221.h.

Enumeration Type Documentation

◆ ina3221_alert

Alert indices.

Enumerator
INA3221_ALERT_WRN 

Warning alert.

INA3221_ALERT_CRT 

Critical alert.

INA3221_ALERT_TC 

Timing control.

INA3221_ALERT_PV 

Power valid alert.

Definition at line 123 of file ina3221.h.

◆ ina3221_channel

Channel flags.

Enumerator
INA3221_CH1 

Channel 1.

INA3221_CH2 

Channel 2.

INA3221_CH3 

Channel 3.

Definition at line 114 of file ina3221.h.

◆ ina3221_conv_time_bus_adc

ADC bus voltage conversion times.

Enumerator
INA3221_CONV_TIME_BADC_140US 

140 us

INA3221_CONV_TIME_BADC_204US 

204 us

INA3221_CONV_TIME_BADC_332US 

332 us

INA3221_CONV_TIME_BADC_588US 

588 us

INA3221_CONV_TIME_BADC_1100US 

1100 us

INA3221_CONV_TIME_BADC_2116US 

2116 us

INA3221_CONV_TIME_BADC_4156US 

4156 us

INA3221_CONV_TIME_BADC_8244US 

8244 us

Definition at line 169 of file ina3221.h.

◆ ina3221_conv_time_shunt_adc

ADC shunt voltage conversion times.

Enumerator
INA3221_CONV_TIME_SADC_140US 

140 us

INA3221_CONV_TIME_SADC_204US 

204 us

INA3221_CONV_TIME_SADC_332US 

332 us

INA3221_CONV_TIME_SADC_588US 

588 us

INA3221_CONV_TIME_SADC_1100US 

1100 us

INA3221_CONV_TIME_SADC_2116US 

2116 us

INA3221_CONV_TIME_SADC_4156US 

4156 us

INA3221_CONV_TIME_SADC_8244US 

8244 us

Definition at line 151 of file ina3221.h.

◆ ina3221_dev_addr

I2C device addresses.

Enumerator
INA3221_ADDR_00 

A0 connected to GND.

INA3221_ADDR_01 

A0 connected to VS.

INA3221_ADDR_10 

A0 connected to SDA.

INA3221_ADDR_11 

A0 connected to SCL.

Definition at line 104 of file ina3221.h.

◆ ina3221_enable_ch

Enable channel flags.

Enumerator
INA3221_ENABLE_CH1 

Enable channel 1.

INA3221_ENABLE_CH2 

Enable channel 2.

INA3221_ENABLE_CH3 

Enable channel 3.

Definition at line 205 of file ina3221.h.

◆ ina3221_enable_latch

Enable latch flags.

Enumerator
INA3221_ENABLE_WARN_LATCH 

Enable warning alert latch.

INA3221_ENABLE_CRIT_LATCH 

Enable critical alert latch.

Definition at line 235 of file ina3221.h.

◆ ina3221_enable_sum_ch

Enable shunt voltage sum calculation channel flags.

Enumerator
INA3221_ENABLE_SUM_CH1 

Enable sum channel 1.

INA3221_ENABLE_SUM_CH2 

Enable sum channel 2.

INA3221_ENABLE_SUM_CH3 

Enable sum channel 3.

Definition at line 220 of file ina3221.h.

◆ ina3221_mode

Device operation modes.

Enumerator
INA3221_MODE_POWER_DOWN 

Sleep mode.

INA3221_MODE_TRIGGER_SHUNT_ONLY 

Trigger shunt voltage measurement only.

INA3221_MODE_TRIGGER_BUS_ONLY 

Trigger bus voltage measurement only.

INA3221_MODE_TRIGGER_SHUNT_BUS 

Trigger shunt and bus voltage measurement.

INA3221_MODE_POWER_DOWN_ 

Also power down (see datasheet)

INA3221_MODE_CONTINUOUS_SHUNT_ONLY 

Continuous shunt voltage measurement only.

INA3221_MODE_CONTINUOUS_BUS_ONLY 

Continuous bus voltage measurement only.

INA3221_MODE_CONTINUOUS_SHUNT_BUS 

Continuous shunt and bus voltage measurement.

Definition at line 133 of file ina3221.h.

◆ ina3221_num_samples

Number of samples to calculate average shunt/bus voltage value.

Enumerator
INA3221_NUM_SAMPLES_1 

1

INA3221_NUM_SAMPLES_4 

4

INA3221_NUM_SAMPLES_16 

16

INA3221_NUM_SAMPLES_64 

64

INA3221_NUM_SAMPLES_128 

128

INA3221_NUM_SAMPLES_256 

256

INA3221_NUM_SAMPLES_512 

512

INA3221_NUM_SAMPLES_1024 

1024

Definition at line 187 of file ina3221.h.

Function Documentation

◆ ina3221_calculate_current_ua()

void ina3221_calculate_current_ua ( ina3221_ch_t  ch,
const uint16_t  in_mohm[INA3221_NUM_CH],
const int32_t  in_uv[INA3221_NUM_CH],
int32_t  out_ua[INA3221_NUM_CH] 
)

Calculate current for each channel in ch.

Parameters
[in]chFlags of which values in in_mohm and in_uv are valid
[in]in_mohmArray of input shunt resistors in mOhm
[in]in_uvArray of input shunt voltage values in uV
[out]out_uaArray of output current values in uA

◆ ina3221_calculate_power_uw()

void ina3221_calculate_power_uw ( ina3221_ch_t  ch,
const int16_t  in_mv[INA3221_NUM_CH],
const int32_t  in_ua[INA3221_NUM_CH],
int32_t  out_mw[INA3221_NUM_CH] 
)

Calculate power from bus voltage and current values.

Parameters
[in]chFlags of which values in in_mv and in_ua are valid
[in]in_mvArray of input bus voltage values in mV
[in]in_uaArray of input current values in uA
[out]out_mwArray of output power values in mW

◆ ina3221_config_get_conv_time_bus()

static ina3221_conv_time_bus_adc_t ina3221_config_get_conv_time_bus ( uint16_t  cfg)
inlinestatic

Get bus voltage conversion time from configuration value.

Parameters
[in]cfgConfiguration value
Returns
Bus conversion time

Definition at line 593 of file ina3221.h.

◆ ina3221_config_get_conv_time_shunt()

static ina3221_conv_time_shunt_adc_t ina3221_config_get_conv_time_shunt ( uint16_t  cfg)
inlinestatic

Get shunt voltage conversion time from configuration value.

Parameters
[in]cfgConfiguration value
Returns
Shunt conversion time

Definition at line 620 of file ina3221.h.

◆ ina3221_config_get_enabled_channels()

static ina3221_ch_t ina3221_config_get_enabled_channels ( uint16_t  cfg)
inlinestatic

Get enabled measurement channels from configuration value.

Parameters
[in]cfgConfiguration value
Returns
Channel flags ina3221_channel_t

Definition at line 536 of file ina3221.h.

◆ ina3221_config_get_mode()

static ina3221_mode_t ina3221_config_get_mode ( uint16_t  cfg)
inlinestatic

Get operation mode from configuration value.

Parameters
[in]cfgConfiguration value
Returns
Operation mode

Definition at line 647 of file ina3221.h.

◆ ina3221_config_get_num_samples()

static ina3221_num_samples_t ina3221_config_get_num_samples ( uint16_t  cfg)
inlinestatic

Get number of samples from configuration value.

Parameters
[in]cfgConfiguration value
Returns
Number of samples

Definition at line 566 of file ina3221.h.

◆ ina3221_config_set_conv_time_bus()

static void ina3221_config_set_conv_time_bus ( uint16_t *  cfg,
ina3221_conv_time_bus_adc_t  bus 
)
inlinestatic

Set bus voltage conversion time in configuration value.

Parameters
[out]cfgConfiguration value
[in]busBus conversion time

Definition at line 604 of file ina3221.h.

◆ ina3221_config_set_conv_time_shunt()

static void ina3221_config_set_conv_time_shunt ( uint16_t *  cfg,
ina3221_conv_time_shunt_adc_t  shunt 
)
inlinestatic

Set shunt voltage conversion time in configuration value.

Parameters
[out]cfgConfiguration value
[in]shuntShunt conversion time

Definition at line 631 of file ina3221.h.

◆ ina3221_config_set_enabled_channels()

static void ina3221_config_set_enabled_channels ( uint16_t *  cfg,
ina3221_ch_t  ch 
)
inlinestatic

Enable measurement channels in configuration value.

Parameters
[out]cfgConfiguration value
[in]chChannel flags ina3221_channel_t

Definition at line 549 of file ina3221.h.

◆ ina3221_config_set_mode()

static void ina3221_config_set_mode ( uint16_t *  cfg,
ina3221_mode_t  mode 
)
inlinestatic

Set operation mode in configuration value.

Parameters
[out]cfgConfiguration value
[in]modeOperation mode

Definition at line 658 of file ina3221.h.

◆ ina3221_config_set_num_samples()

static void ina3221_config_set_num_samples ( uint16_t *  cfg,
ina3221_num_samples_t  ns 
)
inlinestatic

Set number of samples in configuration value.

Parameters
[out]cfgConfiguration value
[in]nsNumber of samples

Definition at line 577 of file ina3221.h.

◆ ina3221_disable_alert()

int ina3221_disable_alert ( ina3221_t dev,
ina3221_alert_t  alert 
)

Disable alert alert.

Parameters
[in,out]devDevice handle
[in]alertAlert index
Returns
0, on success
-ERANGE, if alert was out of bounds
-ENUTSUP, if alert pin was initialized with GPIO_UNDEF

◆ ina3221_disable_critical_alert()

static int ina3221_disable_critical_alert ( ina3221_t dev)
inlinestatic

Wrapper around ina3221_disable_alert, to disable critical alert.

Parameters
[in,out]devDevice handle
Returns
See also
ina3221_disable_alert

Definition at line 496 of file ina3221.h.

◆ ina3221_disable_power_valid_alert()

static int ina3221_disable_power_valid_alert ( ina3221_t dev)
inlinestatic

Wrapper around ina3221_disable_alert, to disable power valid alert.

Parameters
[in,out]devDevice handle
Returns
See also
ina3221_disable_alert

Definition at line 522 of file ina3221.h.

◆ ina3221_disable_timing_control_alert()

static int ina3221_disable_timing_control_alert ( ina3221_t dev)
inlinestatic

Wrapper around ina3221_disable_alert, to disable timing control alert.

Parameters
[in,out]devDevice handle
Returns
See also
ina3221_disable_alert

Definition at line 509 of file ina3221.h.

◆ ina3221_disable_warning_alert()

static int ina3221_disable_warning_alert ( ina3221_t dev)
inlinestatic

Wrapper around ina3221_disable_alert, to disable warning alert.

Parameters
[in,out]devDevice handle
Returns
See also
ina3221_disable_alert

Definition at line 483 of file ina3221.h.

◆ ina3221_enable_alert()

int ina3221_enable_alert ( ina3221_t dev,
ina3221_alert_t  alert,
ina3221_alert_cb_t  cb,
void *  arg 
)

Enable alert and set callback and argument for alert alert.

Parameters
[in,out]devDevice handle
[in]alertAlert index
[in]cbAlert callback
[in]argAlert callback argument
Returns
0, on success
-ERANGE, if alert was out of bounds
-ENUTSUP, if alert pin was initialized with GPIO_UNDEF

◆ ina3221_enable_critical_alert()

static int ina3221_enable_critical_alert ( ina3221_t dev,
ina3221_alert_cb_t  cb,
void *  arg 
)
inlinestatic

Wrapper around ina3221_enable_alert, to enable critical alert.

Parameters
[in,out]devDevice handle
[in]cbAlert callback
[in]argAlert callback argument
Returns
See also
ina3221_enable_alert

Definition at line 422 of file ina3221.h.

◆ ina3221_enable_power_valid_alert()

static int ina3221_enable_power_valid_alert ( ina3221_t dev,
ina3221_alert_cb_t  cb,
void *  arg 
)
inlinestatic

Wrapper around ina3221_enable_alert, to enable power valid alert.

Parameters
[in,out]devDevice handle
[in]cbAlert callback
[in]argAlert callback argument
Returns
See also
ina3221_enable_alert

Definition at line 456 of file ina3221.h.

◆ ina3221_enable_timing_control_alert()

static int ina3221_enable_timing_control_alert ( ina3221_t dev,
ina3221_alert_cb_t  cb,
void *  arg 
)
inlinestatic

Wrapper around ina3221_enable_alert, to enable timing control alert.

Parameters
[in,out]devDevice handle
[in]cbAlert callback
[in]argAlert callback argument
Returns
See also
ina3221_enable_alert

Definition at line 439 of file ina3221.h.

◆ ina3221_enable_warning_alert()

static int ina3221_enable_warning_alert ( ina3221_t dev,
ina3221_alert_cb_t  cb,
void *  arg 
)
inlinestatic

Wrapper around ina3221_enable_alert, to enable warning alert.

Parameters
[in,out]devDevice handle
[in]cbAlert callback
[in]argAlert callback argument
Returns
See also
ina3221_enable_alert

Definition at line 405 of file ina3221.h.

◆ ina3221_get_config()

int ina3221_get_config ( const ina3221_t dev,
uint16_t *  cfg 
)

Read currently saved configuration register value.

Parameters
[in]devDevice handle
[out]cfgPointer to configuration register output value
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_get_conv_time_bus_adc()

static void ina3221_get_conv_time_bus_adc ( const ina3221_t dev,
ina3221_conv_time_bus_adc_t ctb 
)
inlinestatic

Read currently applied bus voltage ADC conversion time.

Parameters
[in]devDevice handle
[out]ctbPointer to bus voltage ADC conversion time output variable

Definition at line 761 of file ina3221.h.

◆ ina3221_get_conv_time_shunt_adc()

static void ina3221_get_conv_time_shunt_adc ( const ina3221_t dev,
ina3221_conv_time_shunt_adc_t cts 
)
inlinestatic

Read currently applied shunt voltage ADC conversion time.

Parameters
[in]devDevice handle
[out]ctsPointer to shunt voltage ADC conversion time output variable

Definition at line 787 of file ina3221.h.

◆ ina3221_get_crit_alert_limit()

ina3221_ch_t ina3221_get_crit_alert_limit ( const ina3221_t dev,
ina3221_ch_t  ch,
int32_t  out_uv[INA3221_NUM_CH] 
)

Read critical shunt voltage alert limit for each channel in ch.

Parameters
[in]devDevice handle
[in]chChannel flags ina3221_channel_t
[out]out_uvOutput array of shunt voltage alert limits in uV
Returns
Flags of which channel´s values were written to out_uv

◆ ina3221_get_enable_channel()

static void ina3221_get_enable_channel ( const ina3221_t dev,
ina3221_ch_t ch 
)
inlinestatic

Read which channels are currently enabled.

Parameters
[in]devDevice handle
[out]chChannel flags ina3221_channel_t

Definition at line 710 of file ina3221.h.

◆ ina3221_get_enable_sum_channel()

int ina3221_get_enable_sum_channel ( const ina3221_t dev,
ina3221_ch_t ch 
)

Read enabled channels for shunt voltage sum calculation.

Parameters
[in]devDevice handle
[out]chChannel flags ina3221_channel_t
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_get_latch()

int ina3221_get_latch ( const ina3221_t dev,
bool *  warn,
bool *  crit 
)

Read enabled latches for critical/warning alert pins.

Parameters
[in]devDevice handle
[in]warnWill be true if warning alert is latched
[in]critWill be true if critical alert is latched
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_get_mode()

static void ina3221_get_mode ( const ina3221_t dev,
ina3221_mode_t mode 
)
inlinestatic

Read currently applied device operation mode.

Parameters
[in]devDevice handle
[out]modePointer to device operation mode output variable

Definition at line 812 of file ina3221.h.

◆ ina3221_get_num_samples()

static void ina3221_get_num_samples ( const ina3221_t dev,
ina3221_num_samples_t ns 
)
inlinestatic

Read currently applied number of samples.

Parameters
[in]devDevice handle
[out]nsPointer to number of samples output variable

Definition at line 735 of file ina3221.h.

◆ ina3221_get_power_valid_lower_limit()

int ina3221_get_power_valid_lower_limit ( const ina3221_t dev,
int32_t *  out_mv 
)

Read bus voltage power valid lower limit.

Parameters
[in]devDevice handle
[out]out_mvPointer to bus voltage power valid lower limit output variable
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_get_power_valid_upper_limit()

int ina3221_get_power_valid_upper_limit ( const ina3221_t dev,
int32_t *  out_mv 
)

Read bus voltage power valid upper limit.

Parameters
[in]devDevice handle
[out]out_mvPointer to bus voltage power valid upper limit output variable
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_get_shunt_voltage_sum_alert_limit()

int ina3221_get_shunt_voltage_sum_alert_limit ( const ina3221_t dev,
int32_t *  out_uv 
)

Read shunt voltage sum alert limit.

Parameters
[in]devDevice handle
[out]out_uvPointer to sum voltage sum alert limit output variable
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_get_warn_alert_limit()

ina3221_ch_t ina3221_get_warn_alert_limit ( const ina3221_t dev,
ina3221_ch_t  ch,
int32_t  out_uv[INA3221_NUM_CH] 
)

Read warning shunt voltage alert limit for each channel in ch.

Parameters
[in]devDevice handle
[in]chChannel flags ina3221_channel_t
[out]out_uvOutput array of shunt voltage alert limits in uV
Returns
Flags of which channel´s values could be read

◆ ina3221_init()

int ina3221_init ( ina3221_t dev,
const ina3221_params_t params 
)

Initialize device.

Parameters
[out]devDevice handle
[in]paramsDevice parameters
Returns
0, on success
-EFAULT, if NULL pointer was passed
-EIO, if I2C bus acquirement failed
-ENXIO, if manufacturer ID or DIE ID does not match
-ENODEV, if reset failed
-EINVAL, if configuration could not be applied
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_read_bus_mv()

ina3221_ch_t ina3221_read_bus_mv ( const ina3221_t dev,
int16_t  out_mv[INA3221_NUM_CH],
uint16_t *  flags 
)

Read bus voltages for each channel in ch.

Parameters
[in]devDevice handle
[out]out_mvArray of output bus voltage values in mV
[out]flagsPointer to flags output variable, may be NULL
Returns
Flags of which channel´s bus voltage values could be read

◆ ina3221_read_flags()

int ina3221_read_flags ( const ina3221_t dev,
uint16_t *  flags 
)

Read status flags.

Parameters
[in]devDevice handle
[out]flagsPointer to flags output variable
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_read_shunt_sum_uv()

int ina3221_read_shunt_sum_uv ( const ina3221_t dev,
int32_t *  out_uv,
uint16_t *  flags 
)

Read sum of shunt voltages.

Parameters
[in]devDevice handle
[out]out_uvPointer to shunt voltage sum output variable
[out]flagsPointer to flags output variable, may be NULL
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs

◆ ina3221_read_shunt_uv()

ina3221_ch_t ina3221_read_shunt_uv ( const ina3221_t dev,
int32_t  out_uv[INA3221_NUM_CH],
uint16_t *  flags 
)

Read shunt voltages for each channel in ch.

Parameters
[in]devDevice handle
[out]out_uvArray of output shunt voltage values in uV
[out]flagsPointer to flags output variable, may be NULL
Returns
Flags of which channel´s shunt voltage drops could be read

◆ ina3221_reset()

int ina3221_reset ( ina3221_t dev)

Reset device, i.e.

apply default configuration

Parameters
[in,out]devDevice handle
Returns
0, on success
-EIO, if I2C bus acquirement failed
-ENODEV, if device could not be reset
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_config()

int ina3221_set_config ( ina3221_t dev,
uint16_t  cfg 
)

Write configuration register value to configuration register.

Parameters
[in,out]devDevice handle
[in]cfgConfiguration register value
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_write_regs

◆ ina3221_set_conv_time_bus_adc()

int ina3221_set_conv_time_bus_adc ( ina3221_t dev,
ina3221_conv_time_bus_adc_t  ctb 
)

Update conversion time of bus voltage ADC and write to configuration register.

Parameters
[in,out]devDevice handle
[in]ctbBus voltage conversion time
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_conv_time_shunt_adc()

int ina3221_set_conv_time_shunt_adc ( ina3221_t dev,
ina3221_conv_time_shunt_adc_t  cts 
)

Update conversion time of shunt voltage ADC and write to configuration register.

Parameters
[in,out]devDevice handle
[in]ctsShunt voltage conversion time value
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_crit_alert_limit()

ina3221_ch_t ina3221_set_crit_alert_limit ( const ina3221_t dev,
ina3221_ch_t  ch,
int32_t  in_uv 
)

Set critical shunt voltage alert limit to in_uv for each channel in ch.

Parameters
[in]devDevice handle
[in]chChannel flags ina3221_channel_t
[in]in_uvCritical shunt voltage limit in uV
Returns
Flags of which channel´s limits could be updated

◆ ina3221_set_enable_channel()

int ina3221_set_enable_channel ( ina3221_t dev,
ina3221_ch_t  ch 
)

Enable channels.

Parameters
[in,out]devDevice handle
[in]chChannel flags ina3221_channel_t
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_enable_sum_channel()

int ina3221_set_enable_sum_channel ( const ina3221_t dev,
ina3221_ch_t  ch 
)

Enable channels for shunt voltage sum calculation.

Parameters
[in]devDevice handle
[in]chChannel flags ina3221_channel_t
Note
The channel must also have been enabled with ina3221_set_enable_channel
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_latch()

int ina3221_set_latch ( const ina3221_t dev,
bool  warn,
bool  crit 
)

Enable latches for critical/warning alert pins.

Parameters
[in]devDevice handle
[in]warnEnable warning alert latch
[in]critEnable critical alert latch
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_mode()

int ina3221_set_mode ( ina3221_t dev,
ina3221_mode_t  mode 
)

Update device operation mode.

Parameters
[in,out]devDevice handle
[in]modeOperation mode value
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_num_samples()

int ina3221_set_num_samples ( ina3221_t dev,
ina3221_num_samples_t  ns 
)

Update number of samples and write to configuration register.

Parameters
[in,out]devDevice handle
[in]nsNumber of samples
Returns
0, on success
-EIO, if I2C bus acquirement failed
See also
i2c_read_regs
Returns
See also
i2c_write_regs

◆ ina3221_set_power_valid_lower_limit()

int ina3221_set_power_valid_lower_limit ( const ina3221_t dev,
int32_t  in_mv 
)

Set bus voltage power valid lower limit to in_mv.

Parameters
[in]devDevice handle
[in]in_mvBus voltage power valid lower limit in mV
Returns
0, on success
-ERANGE, if in_mv was not in [INA3221_MIN_BUS_MV; INA3221_MAX_BUS_MV]
-EIO, if I2C bus acquirement failed
See also
i2c_write_regs

◆ ina3221_set_power_valid_upper_limit()

int ina3221_set_power_valid_upper_limit ( const ina3221_t dev,
int32_t  in_mv 
)

Set bus voltage power valid upper limit to in_mv.

Parameters
[in]devDevice handle
[in]in_mvBus voltage power valid upper limit in mV
Returns
0, on success
-ERANGE, if in_mv was not in [INA3221_MIN_BUS_MV; INA3221_MAX_BUS_MV]
-EIO, if I2C bus acquirement failed
See also
i2c_write_regs

◆ ina3221_set_shunt_voltage_sum_alert_limit()

int ina3221_set_shunt_voltage_sum_alert_limit ( const ina3221_t dev,
int32_t  in_uv 
)

Set shunt voltage sum alert limit to in_uv.

Parameters
[in]devDevice handle
[in]in_uvShunt voltage sum limit in uV
Returns
0, on success
-ERANGE, if in_uv was not in [INA3221_MIN_SHUNT_SUM_UV; INA3221_MAX_SHUNT_SUM_UV]
-EIO, if I2C bus acquirement failed
See also
i2c_write_regs

◆ ina3221_set_warn_alert_limit()

ina3221_ch_t ina3221_set_warn_alert_limit ( const ina3221_t dev,
ina3221_ch_t  ch,
int32_t  in_uv 
)

Set warning shunt voltage alert limit to in_uv for each channel in ch.

Parameters
[in]devDevice handle
[in]chChannel flags ina3221_channel_t
[in]in_uvWarning shunt voltage limit in uV
Returns
Flags of which channel´s limits could be updated