Digital Microphone (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.
- Since
1.13
- Version
0.1.0
Enums
-
enum dmic_state
DMIC driver states.
Values:
-
enumerator DMIC_STATE_UNINIT
Uninitialized.
-
enumerator DMIC_STATE_INITIALIZED
Initialized.
-
enumerator DMIC_STATE_CONFIGURED
Configured.
-
enumerator DMIC_STATE_ACTIVE
Active.
-
enumerator DMIC_STATE_PAUSED
Paused.
-
enumerator DMIC_STATE_ERROR
Error.
-
enumerator DMIC_STATE_UNINIT
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
-
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.
Parameters common to all PDM controllers
-
uint32_t min_pdm_clk_freq
Minimum clock frequency supported by the mic.
-
uint32_t max_pdm_clk_freq
Maximum clock frequency supported by the mic.
-
uint8_t min_pdm_clk_dc
Minimum duty cycle in % supported by the mic.
-
uint8_t max_pdm_clk_dc
Maximum duty cycle in % supported by the mic.
-
uint32_t min_pdm_clk_freq
-
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.
Since each controller can have 2 audio channels (stereo), there can be a total of 8x2=16 channels. The actual number of channels shall be described in act_num_chan.
If 2 streams are enabled, the channel order will be the same for both streams.
Each channel is described as a 4-bit number, the least significant bit indicates LEFT/RIGHT selection of the PDM controller.
The most significant 3 bits indicate the PDM controller number:
bits 0-3 are for channel 0, bit 0 indicates LEFT or RIGHT
bits 4-7 are for channel 1, bit 4 indicates LEFT or RIGHT and so on.
CONSTRAINT: The LEFT and RIGHT channels of EACH PDM controller needs to be adjacent to each other.
Requested channel map
-
uint32_t req_chan_map_lo
Channels 0 to 7.
-
uint32_t req_chan_map_hi
Channels 8 to 15.
Actual channel map that the driver could configure
-
uint32_t act_chan_map_lo
Channels 0 to 7.
-
uint32_t act_chan_map_hi
Channels 8 to 15.
Public Members
-
uint8_t req_num_chan
Requested number of channels.
-
uint8_t act_num_chan
Actual number of channels that the driver could configure.
-
uint8_t req_num_streams
Requested number of streams for each channel.
-
uint8_t act_num_streams
Actual number of streams that the driver could configure.
-
struct dmic_cfg
- #include <dmic.h>
Input configuration structure for the DMIC configuration API.
Public Members
-
struct pcm_stream_cfg *streams
Array of pcm_stream_cfg for application to provide configuration for each stream.
-
struct pcm_stream_cfg *streams