Skip to main content

Chip Catalogue

The SDK ships 70+ chip drivers under chips/<part>/. Each driver is independent, opt-in, and named after the chip's natural manufacturer name (no alp_ prefix — that's reserved for SDK-level abstractions).

The original ~20 drivers (Tier-0 — on-module silicon for AEN / V2N / V2N-M1, plus the EVK carrier-side parts) carry the [ABI-STABLE] annotation and ride the SDK's normal ABI guarantees. The 51 drivers added in the v0.5 §D ecosystem expansion are marked [ABI-EXPERIMENTAL] + [UNTESTED] — they compile and pass NULL-arg smoke tests but haven't been HiL-verified on silicon yet. Treat lifecycle sequencing + numbers as paper-correct until the v1.0 verification sweep lands.

Opting in

Two equivalent ways to enable a chip driver:

# board.yaml — recommended
chips:
- lsm6dso
- ssd1306
# prj.conf — manual
CONFIG_ALP_SDK_CHIP_LSM6DSO=y
CONFIG_ALP_SDK_CHIP_SSD1306=y

The board.yaml path is preferred because it lets the loader cross-check that the SoM actually routes the bus the chip needs.

Driver shape

Every driver follows the same shape:

#include <alp/chips/<part>.h>

<part>_t ctx;
<part>_init(&ctx, bus, address_or_handle);

// Per-feature getters / setters
<part>_<op>(&ctx, ...);

_init() ACK-probes the chip on its bus. If the chip isn't populated, _init returns ALP_ERR_NOT_READY; well-written firmware handles this gracefully.

Catalogue (selected)

Sensors

DriverPartBusUse
lsm6dsoST LSM6DSOI²C / SPI6-axis IMU
bmi323Bosch BMI323I²C / SPI6-axis IMU
icm42670TDK ICM-42670I²C / SPI6-axis IMU
lis2dw12ST LIS2DW12I²C / SPI3-axis accelerometer
bmp581Bosch BMP581I²CBarometric pressure
bme280Bosch BME280I²CT/RH/pressure
tmp112TI TMP112I²CTemperature (on every Alp Lab SoM)
ina236TI INA236I²CCurrent / voltage monitor

Power

DriverPartNotes
act8760Qorvo ACT88760-120.E1Primary PMIC (V2N family)
da9292Renesas DA9292Secondary PMIC (V2N family)
tps628640TI TPS628640Optional / DEEPX rail bucks

Clocks + RTC

DriverPartNotes
clk_5l35023bRenesas / IDT 5L35023BClock generator (V2N family)
rv3028c7Micro Crystal RV-3028-C7Battery-backed RTC (every Alp Lab SoM)

Storage + memory

DriverPartNotes
eeprom_24c128Onsemi N24S128128-byte SoM manifest EEPROM

Connectivity

DriverPartNotes
cc3501eTI CC3501EWi-Fi 6 + BLE 5.4 coprocessor (AEN family)
murata_lbee5hy2fyMurata LBEE5HY2FY-922Wi-Fi 6 + BLE 5.4 combo (V2N family)
rtl8211fdiRealtek RTL8211FDIGigabit Ethernet PHY (×2 on V2N)

Security

DriverPartNotes
optiga_trust_mInfineon OPTIGA Trust MSecure element (every Alp Lab SoM)

Co-processors + bridges

DriverPartNotes
gd32g553GD GD32G553V2N supervisor MCU (8 PWM, 8 ADC, 2 DAC, 4 QEnc, 18 GPIO)
deepx_dxm1DEEPX DX-M1NPU (V2N-M1 only) — bring_up sequencer
gd32_swdbit-bang controllerSWD recovery for the GD32 bridge

IO + UI

DriverPartNotes
tcal9538NXP TCAL95388-bit I/O expander
ssd1306Solomon SSD1306Monochrome 128×64 OLED
ssd1331Solomon SSD1331Small colour OLED
ov5640OmniVision OV56405 MP MIPI CSI camera
cam_muxPericom CAM_MUXCamera input mux
tas2563TI TAS2563Class-D speaker amplifier
pdm_micPDM microphone helperFront-end for <alp/audio.h>
button_ledhelperComposite button + LED widget driver

v0.5 §D ecosystem expansion

51 drivers added under the chip-and-library ecosystem design. Every entry below ships with header + _init/probe + Kconfig + metadata YAML + NULL-arg ZTEST; the marker [UNTESTED] means no HiL silicon bring-up yet.

Camera sensors [UNTESTED]

DriverPartBus / interfaceNotes
ov2640OmniVision OV2640DVP2 MP general-purpose
ov5645OmniVision OV5645MIPI CSI-25 MP autofocus
ov7670OmniVision OV7670DVPVGA cost-sensitive
ov9281OmniVision OV9281MIPI CSI-21 MP global-shutter mono
ar0234onsemi AR0234MIPI CSI-21080p global-shutter
imx219Sony IMX219MIPI CSI-28 MP — RPi Cam v2
imx477Sony IMX477MIPI CSI-212 MP — RPi HQ Camera
gc2145GalaxyCore GC2145DVP2 MP cost-sensitive

Camera SerDes [UNTESTED]

DriverPartStandard
ti_ds90ub953_954TI DS90UB953 / 954FPD-Link III
maxim_max9295_9296Maxim MAX9295 / 9296GMSL2

Displays [UNTESTED]

DriverPartNotes
st7789Sitronix ST7789240×240 / 240×320 SPI TFT
ili9341Ilitek ILI9341240×320 SPI TFT
ili9488Ilitek ILI9488320×480 SPI TFT
ra8875RAiO RA88755–7″ TFT controller w/ resistive touch
sh1106Sino Wealth SH1106128×64 mono OLED — drop-in alt to SSD1306
il3820Solomon IL38204.2″ tri-colour e-paper
gdew0154t8GoodDisplay 1.54″1.54″ e-paper

External NPU [UNTESTED]

DriverPartNotes
hailo_8lHailo-8LM.2 PCIe NPU — host-side bring-up sequence

Industrial sensing [UNTESTED]

DriverPartClass
bmp390Bosch BMP390Barometric pressure
ms5611TE MS5611Barometric pressure
lps22hbST LPS22HBBarometric pressure
vl53l1xST VL53L1XTime-of-flight distance
vl53l5cxST VL53L5CX8×8 ToF array
a02yyuwDFRobot A02YYUWUltrasonic distance (UART)
tsl2591AMS TSL2591Ambient light (2-channel)
veml7700Vishay VEML7700Ambient light (16-bit)
qmc5883lQST QMC5883L3-axis magnetometer
as5048a_bAMS AS5048 A/BMagnetic rotary encoder (I²C)
mt6701MagnTek MT6701Magnetic rotary encoder (I²C)
hx711Avia HX71124-bit strain-gauge ADC
max31855Maxim MAX31855Thermocouple → signed milli-C
max31865Maxim MAX31865RTD (PT100/PT1000) — 15-bit + fault

Motor / actuator control [UNTESTED]

DriverPartNotes
drv8833TI DRV8833Dual H-bridge
drv8825TI DRV8825Stepper driver (STEP/DIR)
tmc2209Trinamic TMC2209Stepper w/ UART tuning (CRC-8)
a4988Allegro A4988Stepper driver

Cellular / RF / GNSS [UNTESTED]

DriverPartClass
quectel_bg95Quectel BG95LTE-M / NB-IoT modem (AT)
quectel_bg77Quectel BG77LTE-M / NB-IoT modem (AT)
ublox_sara_r5u-blox SARA-R5LTE-M modem (AT)
semtech_sx1262Semtech SX1262LoRa radio (opcode)
semtech_sx1276Semtech SX1276LoRa radio (register)
ublox_neo_m9nu-blox NEO-M9NGNSS (UART NMEA)
ublox_max_m10su-blox MAX-M10SGNSS (UART NMEA)
atgm336hZhongkewei ATGM336HGNSS (UART NMEA)
atecc608bMicrochip ATECC608BCrypto co-processor (ATCA)

Audio [UNTESTED]

DriverPartNotes
ics_43434InvenSense ICS-43434MEMS mic (I²S)
inmp441InvenSense INMP441MEMS mic (I²S, cost-sensitive)
wm8960Cirrus / Wolfson WM8960Stereo codec (I²C config + I²S)
tlv320aic3204TI TLV320AIC3204Premium stereo codec w/ miniDSP
max98357aADI MAX98357A3W class-D mono amp
es8388Everest ES8388Stereo codec (China-domestic)

Browse the full per-driver metadata under metadata/chips/; each .yaml carries verification: status alongside vendor / MPN / bus / Kconfig binding.

Driver status

Each driver carries a status field in its metadata/chips/<part>.yaml:

StatusMeaning
stubHeader exists; calls return ALP_ERR_NOSUPPORT.
partialCore operations implemented; some advanced features pending.
completeFull feature coverage; HW-verified.

The current per-driver status is tracked in docs/test-plan.md.

Per-SoM populated chips

Which drivers are populated on each SoM family:

DriverAENV2NV2N-M1N93
cc3501e
murata_lbee5hy2fy
rtl8211fdi✓×2✓×2
gd32g553
deepx_dxm1
act8760 / da9292
rv3028c7TBD
optiga_trust_mTBD
eeprom_24c128TBD
tmp112TBD

EVK-populated carrier-side chips (lsm6dso, bmp581, ssd1306, ov5640, tas2563, etc.) are available on both EVKs by default; declare carrier.name: E1M-EVK or E1M-X-EVK in board.yaml.

Idiomatic usage

#include <alp/peripheral.h>
#include <alp/chips/lsm6dso.h>

alp_i2c_t *bus = alp_i2c_open(&(alp_i2c_config_t){
.bus_id = 0u,
.bitrate_hz = 400000u,
});

lsm6dso_t imu;
if (lsm6dso_init(&imu, bus, LSM6DSO_I2C_ADDR_PRIMARY) != ALP_OK) {
printk("[lsm6dso] init failed\n");
return;
}

lsm6dso_set_accel_odr(&imu, LSM6DSO_ODR_104_HZ);
lsm6dso_set_accel_fs(&imu, LSM6DSO_FS_2G);

lsm6dso_sample_t s;
while (1) {
lsm6dso_read(&imu, &s);
printk("ax=%d ay=%d az=%d\n", s.ax, s.ay, s.az);
k_msleep(10);
}

See also

Questions about this page? Discuss in Community Forum