Skip to content

Troubleshooting

Symptoms you may see while bringing up an ADS9324, their causes and the fix for each, cheapest check first.

Start with ReadDeviceId() and GetDiagnostics(): a correct DEVICE_ID (0x0004) proves the SPI link, so a remaining problem is in CONVST, DRDY or the channel settings.

Initialisation

Symptom Cause Fix
ReadDeviceId() returns 0x0000 SDOUT not connected, chip not powered, RESET held low, or REFSEL low with no external reference (the chip powers down) Check the three supplies, tie RESET and REFSEL high (Hardware)
DEVICE_ID is 0xFFFF or random Wrong SPI mode, MISO floating, CS released between bytes SPI mode 0, one CS window per transfer(), lower the clock
DEVICE_ID right on the second call only The first frame went out before the supplies settled Keep POWER_ON_DELAY_MS at 30 or more; power the ADC before the MCU starts talking

Snapshots

Symptom Cause Fix
Error::Timeout CONVST not reaching the chip, DRDY not wired, DRDY inverted, or DRDY/ALARM muxed to the comparator Scope CONVST and DRDY; SetAlarmPin(AlarmPinMode::Drdy); or HasDrdy() = false
All counts 0 or -1 Conversion data still on D0 to D7 (8-lane reset mode), so SDOUT is idle Call EnsureInitialized() after every power cycle or hardware reset; do not change SetDigitalInterface() away from 1 lane on SDOUT
A channel reads 0 and hasChannel() is false A reduced SetChannelCountMode() is active and the chip does not send that channel Pick the group that contains it, or ChannelCountMode::All16 (API guide)

Values

Symptom Cause Fix
Voltage off by a fixed factor (2, 2.5, 4 ...) The range you configured is not the one your signal needs, or the chip was reset (RESET pin, power) without EnsureInitialized() Configure the channel with ConfigureChannel(); call EnsureInitialized(true) after a reset the driver did not do
Large offset on a single-ended input AINnM not at ground, or input type Differential with AINnM floating Connect AINnM to ground and use SingleEnded
Offset changes with the source Source resistance on AINnP not matched on AINnM (1 MΩ input) Add an equal resistor on AINnM, then trim with SetChannelOffset()
A disconnected sensor reads a random value Input type SingleEnded without a pull-down Use SingleEndedOpenWireSafe and a pull-down (PGA and calibration)
Noise higher than expected Wide bandwidth selected, or missing reference capacitors PgaBandwidth::Low; 4.7 µF on REFIO, 1 µF on REFCAPA and REFCAPB
Gain correction makes it worse A negative correction passed as a large positive number outside 14 bits, or the sign inverted GAN = −(k − 1) / k × 65536 for a channel reading k times too high

Still stuck

Run the host tests to rule out the driver, then the driver_integration_test example on your board: it isolates each feature in its own test.