This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use the drop-down menu on the left and select the desired version.

Audio DMIC

Overview

The audio DMIC interface provides access to digital microphones.

Configuration Options

Related configuration options:

API Reference

group audio_dmic_interface

Abstraction for digital microphones.

Enums

enum dmic_state

DMIC driver states

Values:

enumerator DMIC_STATE_UNINIT
enumerator DMIC_STATE_INITIALIZED
enumerator DMIC_STATE_CONFIGURED
enumerator DMIC_STATE_ACTIVE
enumerator DMIC_STATE_PAUSED
enum dmic_trigger

DMIC driver trigger commands

Values:

enumerator DMIC_TRIGGER_STOP
enumerator DMIC_TRIGGER_START
enumerator DMIC_TRIGGER_PAUSE
enumerator DMIC_TRIGGER_RELEASE
enumerator DMIC_TRIGGER_RESET
enum pdm_lr

PDM Channels LEFT / RIGHT

Values:

enumerator PDM_CHAN_LEFT
enumerator PDM_CHAN_RIGHT

Functions

static inline uint32_t dmic_build_channel_map(uint8_t channel, uint8_t pdm, enum pdm_lr lr)

Build the channel map to populate struct pdm_chan_cfg

Returns the map of PDM controller and LEFT/RIGHT channel shifted to the bit position corresponding to the input logical channel value

Parameters
  • channel – The logical channel number

  • pdm – The PDM hardware controller number

  • lr – LEFT/RIGHT channel within the chosen PDM hardware controller

Returns

Bit-map containing the PDM and L/R channel information

static inline void dmic_parse_channel_map(uint32_t channel_map_lo, uint32_t channel_map_hi, uint8_t channel, uint8_t *pdm, enum pdm_lr *lr)

Helper function to parse the channel map in pdm_chan_cfg

Returns the PDM controller and LEFT/RIGHT channel corresponding to the channel map and the logical channel provided as input

Parameters
  • channel_map_lo – Lower order/significant bits of the channel map

  • channel_map_hi – Higher order/significant bits of the channel map

  • channel – The logical channel number

  • pdm – Pointer to the PDM hardware controller number

  • lr – Pointer to the LEFT/RIGHT channel within the PDM controller

Returns

none

static inline uint32_t dmic_build_clk_skew_map(uint8_t pdm, uint8_t skew)

Build a bit map of clock skew values for each PDM channel

Returns the bit-map of clock skew value shifted to the bit position corresponding to the input PDM controller value

Parameters
  • pdm – The PDM hardware controller number

  • skew – The skew to apply for the clock output from the PDM controller

Returns

Bit-map containing the clock skew information

static inline int dmic_configure(const struct device *dev, struct dmic_cfg *cfg)

Configure the DMIC driver and controller(s)

Configures the DMIC driver device according to the number of channels, channel mapping, PDM I/O configuration, PCM stream configuration, etc.

Parameters
  • dev – Pointer to the device structure for DMIC driver instance

  • cfg – Pointer to the structure containing the DMIC configuration

Returns

0 on success, a negative error code on failure

static inline int dmic_trigger(const struct device *dev, enum dmic_trigger cmd)

Send a command to the DMIC driver

Sends a command to the driver to perform a specific action

Parameters
  • dev – Pointer to the device structure for DMIC driver instance

  • cmd – The command to be sent to the driver instance

Returns

0 on success, a negative error code on failure

static inline int dmic_read(const struct device *dev, uint8_t stream, void **buffer, size_t *size, int32_t timeout)

Read received decimated PCM data stream

Optionally waits for audio to be received and provides the received audio buffer from the requested stream

Parameters
  • dev – Pointer to the device structure for DMIC driver instance

  • stream – Stream identifier

  • buffer – Pointer to the received buffer address

  • size – Pointer to the received buffer size

  • timeout – Timeout in milliseconds to wait in case audio is not yet received, or SYS_FOREVER_MS

Returns

0 on success, a negative error code on failure

struct pdm_io_cfg
#include <dmic.h>

PDM Input/Output signal configuration

struct pcm_stream_cfg
#include <dmic.h>

Configuration of the PCM streams to be output by the PDM hardware

struct pdm_chan_cfg
#include <dmic.h>

Mapping/ordering of the PDM channels to logical PCM output channel

struct dmic_cfg
#include <dmic.h>

Input configuration structure for the DMIC configuration API