ADGM3144/ADGM3121/ADGM3053 MEMS Switch Driver
Supported Devices
Overview
The ADGM3144, ADGM3121, and ADGM3053 are 3mm x 3mm MEMS switches:
ADGM3144: Single-Pole Four-Throw (SP4T) switch with RF1-4 ports connected to RFC, DC to 23 GHz
ADGM3121: Dual-Pole Dual-Throw (DPDT) switch with RF1A/1B, RF2A/2B ports connected to RFCA/RFCB, DC to 23 GHz
ADGM3053: 4-Channel Crossover switch with S1-S4/D1-D4 port switch paths and S-to-S crossover paths, DC to 14 GHz
This driver supports all devices and control modes:
Parallel GPIO Mode: Direct control via IN1-IN4 GPIO pins
SPI Mode: Control via SPI interface with register access
Key Features: - DC to 14/23 GHz frequency range (device dependent) - Low insertion loss: -0.5 dB (typical) at 6 GHz - High isolation: -22 dB (typical) at 6 GHz - Fast switching time: 200 µs (typical) - On resistance: 1.9 Ω (typical) - High cycle count: 100 million cycles minimum at +85°C
Device Configuration
Driver Initialization
The driver supports two operating modes, selected via the PIN/SPI control pin:
Parallel GPIO Mode Example (ADGM3144 SP4T):
struct adgm3121_dev *dev;
struct adgm3121_init_param init_param = {
.type = ID_ADGM3144,
.mode = ADGM3121_MODE_PARALLEL,
.gpio_pin_spi = {
.number = PIN_SPI_GPIO_NUM,
.platform_ops = &gpio_ops,
.extra = &gpio_extra
},
.gpio_in1 = {
.number = IN1_GPIO_NUM,
.platform_ops = &gpio_ops,
.extra = &gpio_extra
},
.gpio_in2 = {
.number = IN2_GPIO_NUM,
.platform_ops = &gpio_ops,
.extra = &gpio_extra
},
.gpio_in3 = {
.number = IN3_GPIO_NUM,
.platform_ops = &gpio_ops,
.extra = &gpio_extra
},
.gpio_in4 = {
.number = IN4_GPIO_NUM,
.platform_ops = &gpio_ops,
.extra = &gpio_extra
}
};
ret = adgm3121_init(&dev, &init_param);
SPI Mode Example (ADGM3121 DPDT):
struct adgm3121_dev *dev;
struct adgm3121_init_param init_param = {
.type = ID_ADGM3121,
.mode = ADGM3121_MODE_SPI,
.gpio_pin_spi = {
.number = PIN_SPI_GPIO_NUM,
.platform_ops = &gpio_ops,
.extra = &gpio_extra
},
.spi_init = {
.device_id = SPI_DEVICE_ID,
.mode = NO_OS_SPI_MODE_0,
.bit_order = NO_OS_SPI_BIT_ORDER_MSB_FIRST,
.max_speed_hz = 10000000, // 10 MHz max
.chip_select = SPI_CS,
.platform_ops = &spi_ops,
.extra = &spi_extra
}
};
ret = adgm3121_init(&dev, &init_param);
Basic Usage
Individual Switch Control:
// ADGM3144: Enable switch 1 (RF1 to RFC)
// ADGM3121: Enable switch 1 (RF1A to RFCA)
// ADGM3053: Enable switch 1 (S1 to D1)
ret = adgm3121_set_switch_state(dev, ADGM3121_SW1, ADGM3121_ENABLE);
// ADGM3144: Disable switch 2 (RF2 to RFC)
// ADGM3121: Disable switch 2 (RF2A to RFCA)
// ADGM3053: Disable switch 2 (S2 to D2)
ret = adgm3121_set_switch_state(dev, ADGM3121_SW2, ADGM3121_DISABLE);
// Check switch state
enum adgm3121_state state;
ret = adgm3121_get_switch_state(dev, ADGM3121_SW1, &state);
Multiple Switch Control:
// Enable switches 1 and 3 simultaneously
ret = adgm3121_set_switches(dev, 0x05); // Binary: 0101
// Get all switch states
uint8_t switch_mask;
ret = adgm3121_get_switches(dev, &switch_mask);
// Reset all switches to off
ret = adgm3121_reset_switches(dev);
SPI Mode Advanced Features
Daisy Chain Mode:
// Enter daisy chain mode for multiple devices
ret = adgm3121_enter_daisy_chain_mode(dev);
// In daisy chain mode, use adgm3121_set_switches() with shift register data
Error Detection:
uint8_t error_status;
ret = adgm3121_check_internal_error(dev, &error_status);
if (error_status != 0) {
// Handle internal error
printf("Internal error detected: 0x%02X\\n", error_status);
}
Direct Register Access:
uint8_t switch_data = 0x05; // Enable SW1 and SW3
ret = adgm3121_write_register(dev, ADGM3121_REG_SWITCH_DATA, switch_data);
uint8_t read_data;
ret = adgm3121_read_register(dev, ADGM3121_REG_SWITCH_DATA, &read_data);
Hardware Configuration
Pin Connections:
Pin |
ADGM3144 |
ADGM3121 |
ADGM3053 |
|---|---|---|---|
VDD |
3.0V to 3.6V power supply |
3.0V to 3.6V power supply |
3.0V to 3.6V power supply |
VCP |
80V charge pump output |
80V charge pump output |
80V charge pump output |
GND |
Ground |
Ground |
AGND, RFGND |
RF Ports |
RF1-RF4 (SP4T) |
RF1A, RF1B, RF2A, RF2B (DPDT) |
S1-S4, D1-D4 (crossover) |
RFC Port |
RFC (common) |
RFCA, RFCB (dual common) |
N/A (crossover paths S-to-S) |
PIN/SPI |
Mode select (Parallel, SPI) |
Mode select (Parallel, SPI) |
Mode select (Parallel, SPI) |
IN1-IN4 |
Parallel control pins |
Parallel control pins |
Parallel control pins |
SDI |
SPI data input |
SPI data input |
SPI data input |
SDO |
SPI data output |
SPI data output |
SPI data output |
SCLK |
SPI clock |
SPI clock |
SPI clock |
CS |
SPI chip select |
SPI chip select |
SPI chip select |
External Components:
0.1 µF decoupling capacitor on VDD (rated ≥16V)
0.1 nF decoupling capacitor on VCP (rated ≥100V)
50Ω termination on unused RF ports
Performance Specifications
Parameter |
ADGM3144/ADGM3121 |
ADGM3053 |
Unit |
|---|---|---|---|
Frequency Range |
DC to 23 |
DC to 14 |
GHz |
Insertion Loss |
-0.5 @ 6 GHz |
-0.25 @ 3.2 GHz |
dB |
On Resistance (port) |
1.9 |
1.9 |
Ω |
On Resistance (crossover) |
N/A |
3.8 |
Ω |
Switching Time |
200 |
200 |
µs |
Power-up Time |
45 |
5 |
ms |
Max RF Power |
33 |
33 |
dBm |
Max DC Current |
200 |
200 |
mA |
API Reference
Initialization Functions:
adgm3121_init()- Initialize deviceadgm3121_remove()- Free resources
Switch Control Functions:
adgm3121_set_switch_state()- Set individual switch stateadgm3121_get_switch_state()- Get individual switch stateadgm3121_set_switches()- Set multiple switches with bitmaskadgm3121_get_switches()- Get all switch states as bitmaskadgm3121_reset_switches()- Turn off all switches
SPI Mode Functions:
adgm3121_write_register()- Write to device registeradgm3121_read_register()- Read from device registeradgm3121_enter_daisy_chain_mode()- Enable daisy chain modeadgm3121_check_internal_error()- Check for internal errors
Troubleshooting
Common Issues:
Switch not responding: Check VDD supply (3.0-3.6V) and wait for power-up (45 ms for ADGM3144/ADGM3121, 5 ms for ADGM3053)
SPI communication failure: Verify SPI mode, speed (≤10MHz), and CS timing
High insertion loss: Check for proper grounding and 50Ω terminations
Internal errors: Use
adgm3121_check_internal_error()to diagnose
ESD Precautions:
RF pins: 150V HBM, 1kV FICDM rating
Use proper ESD protection during handling
Avoid hot switching (applying RF power during switching transitions)