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