BERGSONNE

Drive.A.2

Dual-channel audio output driver for the Drive.A.2 tile (DAC63202W smart DAC + 2x TPA2028D1 Class-D amplifiers). Supports I2C and SPI bus access via tiles_pal_t.

(DAC63202W smart DAC + 2x TPA2028D1 Class-D amplifiers). Supports I2C and SPI bus access via tiles_pal_t.

Vibe Settings

What Studio’s Vibe interface lets you change on this tile, in plain language or from the tile inspector. Each one is an argument of a driver function below, so the same setting is available from Blocks, the DSL and C. Basic settings are shown by default; advanced ones sit behind the inspector’s Advanced toggle.

SettingTierValuesDefaultFunction
Amplifier gainbasic-28 to 306amp_set_gain(gain_db)
V+ supplyadvanced2500 to 55003300set_supply_mv(mv)
Output limiteradvancedon / offonamp_set_limiter(enabled)
Limiter leveladvanced0 to 3119amp_set_limiter(level)

Rules Studio enforces

  • With AGC compression off (init's default) the amplifier's gain is only specified from 0 to +30 dB. Use 0 dB or more, or turn compression on first.
  • With the output limiter off, full gain on a loud signal drives a clipped square wave at the V+ rail (about 1.4 W into 8 ohm at 3.3 V), which can burn a small speaker. Keep it on unless the speaker is rated for that.

Examples

Quick start (I2C — DAC + amplifiers)

  #include "core_tiles.h"  // provides core_tiles_pal()

  tile_t dac;
  tiles_pal_t *hal = core_tiles_pal(&core_i2c1);
  tile_drive_a_2_init(hal, 0, &dac, NULL);
  if (tile_is_ready(&dac)) {
      tile_drive_a_2_set(&dac, 0, 2048);       // Ch 0 mid-scale
      tile_drive_a_2_amp_set_gain(&dac, 12);    // +12 dB both amps
  }

Quick start (SPI — DAC only, no amplifier control)

  #include "core_tiles.h"

  tile_t dac;
  tiles_pal_t *hal = core_tiles_pal(&core_spi1);
  tile_drive_a_2_init(hal, 0, &dac, NULL);  // instance = CS index
  tile_drive_a_2_set_mv(&dac, 0, 1500);     // 1.5 V on channel 0

API reference

Initialization

tile_drive_a_2_find

uint8_t tile_drive_a_2_find(tiles_pal_t *hal, uint8_t instance)

Check whether a DAC63202W is present on the bus.

hal
Platform HAL handle
instance
Instance index (see mapping table)

Returns 1 if device ACKs (I2C) or responds to WHO_AM_I (SPI), 0 otherwise

tile_drive_a_2_init

void tile_drive_a_2_init(tiles_pal_t *hal, uint8_t instance, tile_t *tile, const drive_a_2_cfg_t *cfg)

Verifies DEVICE-ID, powers up both VOUT channels at mid-scale, configures gain, and (in I2C mode) probes and configures the amplifiers: shutdown, fixed gain, compression 1:1, output limiter on at DRIVE_A_2_LIMITER_DEFAULT with the chip-default attack / release / hold times, then wake. Init starts unmuted: it clears the mute state.

hal
Platform HAL handle (see core_tiles.h).
instance
Instance index (I2C: address variant, SPI: CS index)
tile
Pointer to tile handle (populated by this function)
cfg
Optional config, or NULL for defaults (1x ext VREF, 6 dB amp)

Lifecycle

tile_drive_a_2_sleep

Studio
void tile_drive_a_2_sleep(tile_t *tile)

Powers down both DAC VOUT channels (Hi-Z) and puts the amplifiers into software shutdown.

tile_drive_a_2_wake

Studio
void tile_drive_a_2_wake(tile_t *tile)

Powers up both VOUT channels, parks them at mid-scale, restores the cached DAC gains, then brings the amplifiers back to the state they were in before sleep: a pair that was muted (mute()) or disabled (amp_disable()) stays in software shutdown; otherwise it is enabled once the DAC has settled.

tile_drive_a_2_reset

void tile_drive_a_2_reset(tile_t *tile)

All DAC registers return to defaults. tile->state becomes TILE_STATE_NONE; call init() again to reconfigure.

Runtime

tile_drive_a_2_set

Studio
void tile_drive_a_2_set(tile_t *tile, uint8_t channel, uint16_t value)

Set a DAC channel output by raw 12-bit code (0–4095).

channel
0 or 1
value
12-bit DAC code (0 = 0V, 4095 = full-scale)

tile_drive_a_2_set_mv

Studio
void tile_drive_a_2_set_mv(tile_t *tile, uint8_t channel, uint16_t mv)

Computes the DAC code from this channel's gain: full scale is V+ (set_supply_mv() / cfg->vdd_mv) in the 1x gains (the VDD reference, or the VREF pin, which the tile ties to V+), or 1.21 V times 1.5, 2, 3 or 4 with the internal reference (SLASF73A Eq 1-3). The output cannot exceed V+, so requests above it are clamped to V+.

channel
0 or 1
mv
Desired output in millivolts

tile_drive_a_2_get

Studio
uint16_t tile_drive_a_2_get(tile_t *tile, uint8_t channel)

Read back the current DAC code for a channel.

channel
0 or 1

Returns 12-bit DAC code currently loaded

tile_drive_a_2_set_waveform

Studio
void tile_drive_a_2_set_waveform(tile_t *tile, uint8_t channel, drive_a_2_wave_t wave)

Sets FUNC-CONFIG-X in DAC-X-FUNC-CONFIG. Triangle and sawtooth waves oscillate between DAC-X-MARGIN-LOW and DAC-X-MARGIN-HIGH at the configured slew rate and code step. The sine uses 24 fixed codes (0x19A to 0xE66, about 80 % of full scale) and ignores the margins and code step. Set a non-zero slew rate first, then call start_waveform() to begin output.

channel
0 or 1
wave
Waveform shape

tile_drive_a_2_start_waveform

Studio
void tile_drive_a_2_start_waveform(tile_t *tile, uint8_t channel)

Sets START-FUNC-X in COMMON-DAC-TRIG (read-modify-write, so the other channel's generator keeps running).

channel
0 or 1

tile_drive_a_2_stop_waveform

Studio
void tile_drive_a_2_stop_waveform(tile_t *tile, uint8_t channel)

Clears START-FUNC-X and sets FUNC-CONFIG-X to "disabled".

channel
0 or 1

tile_drive_a_2_amp_set_gain

Studio
void tile_drive_a_2_amp_set_gain(tile_t *tile, int8_t gain_db)

Both TPA2028D1 amplifiers share I2C address 0x58, so this write affects both channels simultaneously. No-op in SPI mode.

gain_db
[-28..30] Gain in dB. Clamped if out of range.
  • init() turns AGC compression off (1:1), and with compression off the TPA2028D1 fixed gain is only specified from 0 to +30 dB (SLOS660C Table 10), so negative gains are raised to 0 dB. Negative gains need compression on (amp_set_agc()). The output limiter still caps the output level.

tile_drive_a_2_amp_get_gain

Studio
int8_t tile_drive_a_2_amp_get_gain(tile_t *tile)

Read the current amplifier fixed gain.

Returns Gain in dB (-28 to +30), or 0 if amp not available

tile_drive_a_2_amp_enable

Studio
void tile_drive_a_2_amp_enable(tile_t *tile)

While the tile is asleep this only records the request, and wake() applies it once the DAC has settled at mid-scale. No-op in SPI mode.

tile_drive_a_2_amp_disable

Studio
void tile_drive_a_2_amp_disable(tile_t *tile)

The amplifiers stay off across sleep() / wake(). No-op in SPI mode.

tile_drive_a_2_amp_set_agc

Studio
void tile_drive_a_2_amp_set_agc(tile_t *tile, const drive_a_2_agc_cfg_t *cfg)

Writes all AGC registers (attack, release, hold, fixed gain, limiter, compression, noise gate, max gain). Affects both amps. No-op in SPI mode. The compression register is written before the limiter register, because the limiter can only be disabled while compression is 1:1 (SLOS660C Table 11). The limiter stays on unless cfg->limiter_disable is set. The compression ratio also sets the valid fixed-gain range that amp_set_gain() and set_volume_pct() use.

cfg
AGC configuration

tile_drive_a_2_amp_read_status

Studio
uint8_t tile_drive_a_2_amp_read_status(tile_t *tile)

Check bit 3 (FAULT) for short-circuit and bit 2 (Thermal) for over-temperature. Write 0 to the respective bit to clear.

Returns Raw register 0x01 value, or 0 if amp not available

tile_drive_a_2_read_status

Studio
uint16_t tile_drive_a_2_read_status(tile_t *tile)

Contains DEVICE-ID, VERSION-ID, NVM CRC status, and DAC busy flags.

Returns 16-bit GENERAL-STATUS value

tile_drive_a_2_play_tone

Studio
void tile_drive_a_2_play_tone(tile_t *tile, drive_a_2_channel_t channel, uint16_t freq_hz, uint16_t ms)

Configures DAC margins for full-scale swing, sets a sine waveform, and uses the on-chip parametric generator together with a software-tuned slew rate / code step to approximate `freq_hz`. The chip's sine generator runs at 1 / (24 × slew step), so only 15 pitches exist (10417, 5208, 3472, 2315, 1541, 1029, 686, 457, 305, 174, 99.5, 56.9, 32.5, 16.3, 8.1 Hz); the nearest one is played. The sine spans about 80 % of the DAC's range. The amplifier is unmuted for the duration of the tone and restored to its prior mute state on return.

channel
DRIVE_A_2_CH_LEFT, _RIGHT, or _BOTH
freq_hz
[8..10417] Tone frequency in Hz (rounded to the nearest generator pitch)
ms
Duration in milliseconds
  • Blocks for `ms` milliseconds via `hal->delay_ms`.

tile_drive_a_2_play_silence

Studio
void tile_drive_a_2_play_silence(tile_t *tile, drive_a_2_channel_t channel, uint16_t ms)

Stops any active waveform on `channel`, parks the DAC code at mid-scale (= zero differential at the amp input), and blocks for `ms` milliseconds. Useful to insert a precise gap between tones without toggling the amp shutdown — the amp stays alive but draws minimal idle current with no signal.

channel
DRIVE_A_2_CH_LEFT, _RIGHT, or _BOTH
ms
Duration in milliseconds
  • Blocks for `ms` milliseconds via `hal->delay_ms`.

tile_drive_a_2_play_chirp

Studio
void tile_drive_a_2_play_chirp(tile_t *tile, drive_a_2_channel_t channel, uint16_t start_hz, uint16_t end_hz, uint16_t ms)

Software sine-LUT chirp delivered through `set` (raw DAC code) at ~8 kHz update rate. Frequency advances linearly across `ms`. For ascending sweeps pass start < end; for descending, start > end. The amp is unmuted for the duration and restored to its prior mute state on return.

channel
DRIVE_A_2_CH_LEFT, _RIGHT, or _BOTH
start_hz
Initial frequency in Hz
end_hz
Final frequency in Hz
ms
Sweep duration in milliseconds
  • Blocks for `ms` milliseconds via `hal->delay_ms`.

tile_drive_a_2_set_volume_pct

Studio
void tile_drive_a_2_set_volume_pct(tile_t *tile, drive_a_2_channel_t channel, uint8_t pct)

Linear-in-dB mapping from `pct` onto the fixed-gain range the TPA2028D1 specifies for the active compression ratio (SLOS660C Table 10): compression 1:1 (init's default): gain_db = (pct × 30) / 100 compression 2:1, 4:1 or 8:1: gain_db = -28 + (pct × 58) / 100 With compression off, 0 % → 0 dB (the lowest valid gain, not silence; use mute() for silence), 50 % → +15 dB, 100 % → +30 dB. The output limiter still caps the level. The mapping is intentionally linear-in-dB rather than perceptually weighted; for finer dB control use @ref tile_drive_a_2_amp_set_gain directly. Because both amps share an I²C address, the channel argument is accepted for symmetry with the rest of the tier-2 API but the write lands on both physical amps.

channel
DRIVE_A_2_CH_LEFT, _RIGHT, or _BOTH (advisory)
pct
[0..100] Percent (clamped if out of range)

tile_drive_a_2_mute

Studio
void tile_drive_a_2_mute(tile_t *tile, drive_a_2_channel_t channel)

Stashes the current fixed-gain register so a later @ref tile_drive_a_2_unmute restores it byte-exact, then puts the amp pair into software shutdown (SWS=1). Both physical amps mute regardless of `channel` (shared I²C address). The mute survives sleep() / wake(); only unmute(), amp_enable() or init() clear it.

channel
DRIVE_A_2_CH_LEFT, _RIGHT, or _BOTH (advisory)

tile_drive_a_2_unmute

Studio
void tile_drive_a_2_unmute(tile_t *tile, drive_a_2_channel_t channel)

Re-applies the gain that was active at the time of @ref tile_drive_a_2_mute and clears software shutdown (SWS=0). If the channel was never muted by this driver instance the call still wakes the amp using whatever gain is currently in the register. While the tile is asleep the amp is woken by wake().

channel
DRIVE_A_2_CH_LEFT, _RIGHT, or _BOTH (advisory)

Config

tile_drive_a_2_set_gain

Studio
void tile_drive_a_2_set_gain(tile_t *tile, uint8_t channel, drive_a_2_gain_t gain)

Automatically enables the internal reference when an internal-reference gain is selected, and records the gain for this channel so set_mv() uses the right full scale (each channel keeps its own).

channel
0 or 1
gain
One of the drive_a_2_gain_t values

tile_drive_a_2_set_supply_mv

Studio
void tile_drive_a_2_set_supply_mv(tile_t *tile, uint16_t mv)

The DAC63202W's VDD is the tile's V+ (2.5–5.5 V). In the 1x gains the DAC's full scale is V+, so set_mv() needs it to pick the right code; the internal-reference gains need it to clamp requests above V+. No bus traffic. Default 3300 mV (or cfg->vdd_mv).

mv
[2500..5500] V+ in millivolts (clamped).

tile_drive_a_2_set_slew_rate

Studio
void tile_drive_a_2_set_slew_rate(tile_t *tile, uint8_t channel, drive_a_2_slew_t slew)

Programs SLEW-RATE-X bits[3:0] in DAC-X-FUNC-CONFIG. Affects both slewed direct-output updates and the on-chip function generator's frequency. The default is no-slew — outputs settle as fast as the analog stage allows. Use a slower slew to soften zero-crossings for capacitive / inductive loads, or to dial in a target waveform frequency together with set_code_step() and set_margins().

channel
0 or 1
slew
Slew-rate code (drive_a_2_slew_t value 0–15)

tile_drive_a_2_set_code_step

Studio
void tile_drive_a_2_set_code_step(tile_t *tile, uint8_t channel, drive_a_2_step_t step)

Programs CODE-STEP-X bits[6:4] in DAC-X-FUNC-CONFIG. Larger steps give faster ramps / higher waveform frequencies at the cost of coarser resolution.

channel
0 or 1
step
Code-step code (drive_a_2_step_t value 0–7)

tile_drive_a_2_set_margins

Studio
void tile_drive_a_2_set_margins(tile_t *tile, uint8_t channel, uint16_t low, uint16_t high)

Writes DAC-X-MARGIN-HIGH and DAC-X-MARGIN-LOW. The function generator oscillates between these levels, and they also serve as the thresholds for the chip's window / hysteresis comparator modes. Values are 12-bit DAC codes; high must be > low.

channel
0 or 1
low
12-bit DAC code for the lower bound (0–4095)
high
12-bit DAC code for the upper bound (0–4095)

tile_drive_a_2_set_phase

Studio
void tile_drive_a_2_set_phase(tile_t *tile, uint8_t channel, drive_a_2_phase_t phase)

Programs PHASE-SEL-X bits[12:11] in DAC-X-FUNC-CONFIG. Take effect the next time start_waveform() is called. Use phase = 90° on one channel and 0° on the other to drive a quadrature pair.

channel
0 or 1
phase
Phase offset (drive_a_2_phase_t)

tile_drive_a_2_set_waveform_params

Studio
void tile_drive_a_2_set_waveform_params(tile_t *tile, uint8_t channel, drive_a_2_wave_t wave, drive_a_2_step_t step, drive_a_2_slew_t slew)

Convenience helper that sets up the waveform shape, full-scale margins (0 → 4095), code step, and slew rate in one call. The resulting frequency is (SLASF73A Eq 6-8): f_triangle = 1 / (2 × time_step × ceil((margin_high − margin_low) / code_step)) f_sawtooth = 1 / ( time_step × ceil((margin_high − margin_low + 1) / code_step)) f_sine = 1 / (24 × time_step) Call start_waveform() to begin output once configured. For fine-grained control, call set_margins() / set_code_step() / set_slew_rate() / set_waveform() / set_phase() individually.

channel
0 or 1
wave
Waveform shape (drive_a_2_wave_t)
step
Code-step (drive_a_2_step_t)
slew
Time per step (drive_a_2_slew_t)

tile_drive_a_2_amp_set_limiter

Studio
void tile_drive_a_2_amp_set_limiter(tile_t *tile, uint8_t enabled, uint8_t level)

The limiter caps the amplifier output at level n = -6.5 + 0.5 n dBV (SLOS660C Table 11; power figures are for 8 ohm): 0 = 0.67 V peak, 0.03 W; 19 = 2.0 V peak, 0.25 W (init's default); 26 = 3.0 V peak, 0.56 W (chip default); 31 = 3.99 V peak, 0.99 W. A level whose peak is above V+ cannot be reached, so the output clips first. Read- modify-write of AGC_CTRL1 (the noise-gate bits are kept). Affects both amps. No-op in SPI mode. speaker's rating, is unsafe for small speakers. The chip only honours a disable while AGC compression is 1:1 (init's default); with compression on the driver keeps the limiter enabled and only sets the level.

enabled
1 = limiter on (default), 0 = off (unsafe)
level
[0..31] Limiter level (clamped)

tile_drive_a_2_nvm_save

Studio
void tile_drive_a_2_nvm_save(tile_t *tile)

Triggers NVM-PROG in COMMON-TRIGGER. The DAC's user-programmable registers (gain, margins, slew, waveform shape, COMMON-CONFIG, etc. — see datasheet "highlighted gray" rows) are committed to non-volatile storage and become the new power-on defaults. Blocking: holds the bus busy for the NVM write cycle. Limited write endurance — TI specs ~1000 cycles. Use only for one-time factory tuning, not for runtime configuration storage.

tile_drive_a_2_nvm_reload

Studio
void tile_drive_a_2_nvm_reload(tile_t *tile)

Triggers NVM-RELOAD in COMMON-TRIGGER. Restores the saved power-on configuration without a full reset — equivalent to the load that happens automatically on POR. Blocks until the reload completes, then re-reads both channels' VOUT-GAIN so set_mv() follows whatever gain the NVM held.

Advanced

tile_drive_a_2_read_reg

Studio
uint16_t tile_drive_a_2_read_reg(tile_t *tile, uint8_t reg)

Escape hatch for advanced users wanting to touch registers the driver doesn't expose. Caller is responsible for not bricking the chip — most useful registers have typed setters above.

reg
Register address (7-bit)

Returns 16-bit register value

tile_drive_a_2_write_reg

Studio
void tile_drive_a_2_write_reg(tile_t *tile, uint8_t reg, uint16_t value)

Write any 16-bit DAC63202W register.

reg
Register address (7-bit)
value
16-bit value to write (big-endian on the wire)

Driver gaps · 2

Chip capabilities this driver doesn’t expose yet.

advancedDAC PWM-output mode (FBx pins)The DAC63202W FB0 / FB1 pins (package balls B2 / C2) can be configured as comparator / PWM outputs for driving external power-stage gates. On the Drive.A.2 tile these pins are tied to the on-board TPA2028D1 amplifier inputs (closed-loop voltage- output feedback) and are NOT routed to any tile-connector pad — so even if the driver enabled PWM mode, no Core GPIO could observe or use the output. Closing this gap requires a tile hardware revision that breaks FBx out to a pad.
nichePer-amp independent controlThe tile carries 2× TPA2028D1 amps wired to a single shared I²C bus, and the TPA2028D1 has a fixed factory I²C address (0x58) — any write at 0x58 is acknowledged by both amps simultaneously. Independent left / right gain, AGC, or shutdown therefore can't be achieved in software; closing this gap requires either an I²C-mux on the tile or amp ICs with selectable addresses.

Enums

drive_a_2_gain_t

DAC output voltage gain setting.

DRIVE_A_2_GAIN_1X_EXT
1x, external VREF pin
DRIVE_A_2_GAIN_1X_VDD
1x, VDD as reference (default)
DRIVE_A_2_GAIN_1P5X_INT
1.5x, internal 1.21V → 0–1.815V
DRIVE_A_2_GAIN_2X_INT
2x, internal 1.21V → 0–2.42V
DRIVE_A_2_GAIN_3X_INT
3x, internal 1.21V → 0–3.63V
DRIVE_A_2_GAIN_4X_INT
4x, internal 1.21V → 0–4.84V

drive_a_2_wave_t

Built-in waveform shapes for the DAC function generator.

DRIVE_A_2_WAVE_TRIANGLE
Triangular wave
DRIVE_A_2_WAVE_SAWTOOTH
Sawtooth (ramp up)
DRIVE_A_2_WAVE_INV_SAW
Inverse sawtooth (ramp down)
DRIVE_A_2_WAVE_SINE
Sine wave
DRIVE_A_2_WAVE_OFF
Function generation disabled

drive_a_2_slew_t

Slew-rate control (time per code step) for the DAC.

DRIVE_A_2_SLEW_NONE
No slew (default): immediate update. Invalid for waveforms
DRIVE_A_2_SLEW_4_US
4 µs/step (sine 10417 Hz)
DRIVE_A_2_SLEW_8_US
8 µs/step (sine 5208 Hz)
DRIVE_A_2_SLEW_12_US
12 µs/step (sine 3472 Hz)
DRIVE_A_2_SLEW_18_US
18 µs/step (sine 2315 Hz)
DRIVE_A_2_SLEW_27_US
27.04 µs/step (sine 1541 Hz)
DRIVE_A_2_SLEW_41_US
40.48 µs/step (sine 1029 Hz)
DRIVE_A_2_SLEW_61_US
60.72 µs/step (sine 686 Hz)
DRIVE_A_2_SLEW_91_US
91.12 µs/step (sine 457 Hz)
DRIVE_A_2_SLEW_137_US
136.72 µs/step (sine 305 Hz)
DRIVE_A_2_SLEW_239_US
239.2 µs/step (sine 174 Hz)
DRIVE_A_2_SLEW_419_US
418.64 µs/step (sine 99.5 Hz)
DRIVE_A_2_SLEW_733_US
732.56 µs/step (sine 56.9 Hz)
DRIVE_A_2_SLEW_1282_US
1282 µs/step (sine 32.5 Hz)
DRIVE_A_2_SLEW_2564_US
2563.96 µs/step (sine 16.3 Hz)
DRIVE_A_2_SLEW_5128_US
5127.92 µs/step (sine 8.1 Hz)

drive_a_2_step_t

Code-step size (LSBs per slewed update tick) for the DAC.

DRIVE_A_2_STEP_1_LSB
1 LSB per step (default, finest)
DRIVE_A_2_STEP_2_LSB
2 LSB per step
DRIVE_A_2_STEP_3_LSB
3 LSB per step
DRIVE_A_2_STEP_4_LSB
4 LSB per step
DRIVE_A_2_STEP_6_LSB
6 LSB per step
DRIVE_A_2_STEP_8_LSB
8 LSB per step
DRIVE_A_2_STEP_16_LSB
16 LSB per step
DRIVE_A_2_STEP_32_LSB
32 LSB per step (coarsest)

drive_a_2_phase_t

Phase offset for the function generator (sine / triangle).

DRIVE_A_2_PHASE_0
0° (default)
DRIVE_A_2_PHASE_120
120°
DRIVE_A_2_PHASE_240
240°
DRIVE_A_2_PHASE_90
90° (quadrature)

drive_a_2_comp_t

Amplifier compression ratio.

DRIVE_A_2_COMP_1_1
1:1 — compression off
DRIVE_A_2_COMP_2_1
2:1
DRIVE_A_2_COMP_4_1
4:1 (default)
DRIVE_A_2_COMP_8_1
8:1

drive_a_2_channel_t

Logical channel selector for the tier-2 runtime helpers (`play_tone`, `set_volume_pct`, `mute`, …).

DRIVE_A_2_CH_LEFT
DAC0 / left amp logically
DRIVE_A_2_CH_RIGHT
DAC1 / right amp logically
DRIVE_A_2_CH_BOTH
Both DAC channels (amp writes still hit both)

Constants

TILE_DRIVE_A_2_VERSION_MAJOR3
TILE_DRIVE_A_2_VERSION_MINOR3
TILE_DRIVE_A_2_VERSION_PATCH0
DAC63202W_I2C_ADDR_DEFAULT0x49A0 → VDD (default)
DAC63202W_I2C_ADDR_GND0x48A0 → GND
DAC63202W_I2C_ADDR_SDA0x4AA0 → SDA
DAC63202W_I2C_ADDR_SCL0x4BA0 → SCL
TPA2028D1_I2C_ADDR0x58Fixed (both amps)
DRIVE_A_2_LIMITER_DEFAULT19
DRIVE_A_2_LIMITER_MAX31Highest limiter level: 31 = 9 dBV, 3.99 V peak, 0.99 W into 8 ohm.