Skip to content

[bug] SilabsMicrophoneAnalog — analogReadDMA non-functional on Seeed XIAO MG24 Sense (3.0.0) #164

Description

@DooDip

Hardware

Seeed XIAO MG24 Sense

Core version

3.0.0

Arduino IDE version

2.3.8

Operating system

Win11

Radio stack variant

BLE

OpenThread Border Router device (if using Matter)

No response

Issue description

Detailed description ofThe onboard analog MEMS microphone (MSM381ACT001) on the Seeed XIAO MG24 Sense produces no response to sound input. The official bundled example SilabsMicrophoneAnalog → MicrophoneVolume prints a constant value of 734–735 regardless of sound level. The LED does not respond. The issue persists across all approaches tested.

Steps to reproduce

Install SiliconLabs core 3.0.0
Select board: Seeed XIAO MG24, Protocol stack: BLE (Silabs)
Open File → Examples → SilabsMicrophoneAnalog → MicrophoneVolume
Upload without modification
Open Serial Monitor at 115200 baud
Make loud sounds directly at the microphone

Expected: Serial output varies with sound level (735–900 range per comments)
Actual: Constant output of 734–735, no variation with any sound input

Investigated and ruled out:

Wrong pin numbers — confirmed PC8/PC9 map to Arduino pins 22/23 (MIC enable and MIC data) via arduino_variant.cpp in the xiao_mg24 variant
Power pin not driven — confirmed MicrophoneAnalog::begin() drives enable pin HIGH via digitalWrite
Wrong pin polarity — tested driving enable pin LOW, no change
Wrong constructor path — tested both PinName (PC8/PC9) and integer (22/23) constructors, no difference
Raw analogRead on pin 23 — returns constant ~711, no response to sound (rules out mic hardware being dead since IMU works correctly confirming Sense variant)
getSingleSample() in tight loop — same flat result
DMA buffer inspection — spread of 12–13 counts regardless of input level, consistent with ADC sampling wrong channel or DMA not triggering

The IMU (LSM6DS3TR-C) works correctly on the same board, confirming hardware is functional and correct board variant is selected.

Root cause hypothesis
analogReadDMA in 3.0.0 appears to not correctly route the ADC to the PC9 pin, or the DMA transfer completes without actual mic data. The buffer contents look like a floating ADC input rather than mic signal. This may be related to the IADC channel mapping for PC9 not being initialized before DMA acquisition starts.

Workaround
None found. Core 2.2.0 does not include SilabsMicrophoneAnalog (ships SilabsMicrophonePDM instead, which targets a different board and mic type). the issue

Serial output

No response

RTT output (if using Matter)

No response

Minimal reproducer code

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugIssue is a bug report

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions