ES8388 Driver

Driver for ES8388 codec chip used in ESP32 LyraT audio board.

API Reference

Functions

esp_err_t es8388_init(audio_hal_codec_config_t *cfg)

Initialize ES8388 codec chip.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • cfg: configuration of ES8388

esp_err_t es8388_deinit(void)

Deinitialize ES8388 codec chip.

Return
  • ESP_OK
  • ESP_FAIL

esp_err_t es8388_config_fmt(es_module_t mod, es_i2s_fmt_t cfg)

Configure ES8388 I2S format.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • mod: set ADC or DAC or both
  • cfg: ES8388 I2S format

esp_err_t es8388_i2s_config_clock(es_i2s_clock_t cfg)

Configure I2s clock in MSATER mode.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • cfg: set bits clock and WS clock

esp_err_t es8388_set_bits_per_sample(es_module_t mode, es_bits_length_t bit_per_sample)

Configure ES8388 data sample bits.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • mode: set ADC or DAC or both
  • bit_per_sample: bit number of per sample

esp_err_t es8388_start(es_module_t mode)

Start ES8388 codec chip.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • mode: set ADC or DAC or both

esp_err_t es8388_stop(es_module_t mode)

Stop ES8388 codec chip.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • mode: set ADC or DAC or both

esp_err_t es8388_set_voice_volume(int volume)

Set voice volume.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • volume: voice volume (0~100)

esp_err_t es8388_get_voice_volume(int *volume)

Get voice volume.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • *volume: voice volume (0~100)

esp_err_t es8388_set_voice_mute(int enable)

Configure ES8388 DAC mute or not. Basically you can use this function to mute the output or not.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • enable: enable(1) or disable(0)

esp_err_t es8388_get_voice_mute(void)

Get ES8388 DAC mute status.

Return
  • -1 Parameter error
  • 0 voice mute disable
  • 1 voice mute enable

esp_err_t es8388_set_mic_gain(es_mic_gain_t gain)

Set ES8388 mic gain.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • gain: db of mic gain

esp_err_t es8388_config_adc_input(es_adc_input_t input)

Set ES8388 adc input mode.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • input: adc input mode

esp_err_t es8388_config_dac_output(es_dac_output_t output)

Set ES8388 dac output mode.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • output: dac output mode

esp_err_t es8388_write_reg(uint8_t reg_add, uint8_t data)

Write ES8388 register.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • reg_add: address of register
  • data: data of register

void es8388_read_all()

Print all ES8388 registers.

Return
  • void

esp_err_t es8388_config_i2s(audio_hal_codec_mode_t mode, audio_hal_codec_i2s_iface_t *iface)

Configure ES8388 codec mode and I2S interface.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • mode: codec mode
  • iface: I2S config

esp_err_t es8388_ctrl_state(audio_hal_codec_mode_t mode, audio_hal_ctrl_t ctrl_state)

Control ES8388 codec chip.

Return
  • ESP_FAIL Parameter error
  • ESP_OK Success
Parameters
  • mode: codec mode
  • ctrl_state: start or stop decode or encode progress

void es8388_pa_power(bool enable)

Set ES8388 PA power.

Return
  • void
Parameters
  • enable: true for enable PA power, false for disable PA power

Structures

struct es_i2s_clock_t

Configure ES8388 clock.

Public Members

es_sclk_div_t sclk_div

bits clock divide

es_lclk_div_t lclk_div

WS clock divide

Macros

ES8388_ADDR

0x22:CE=1;0x20:CE=0

ES8388_CONTROL1
ES8388_CONTROL2
ES8388_CHIPPOWER
ES8388_ADCPOWER
ES8388_DACPOWER
ES8388_CHIPLOPOW1
ES8388_CHIPLOPOW2
ES8388_ANAVOLMANAG
ES8388_MASTERMODE
ES8388_ADCCONTROL1
ES8388_ADCCONTROL2
ES8388_ADCCONTROL3
ES8388_ADCCONTROL4
ES8388_ADCCONTROL5
ES8388_ADCCONTROL6
ES8388_ADCCONTROL7
ES8388_ADCCONTROL8
ES8388_ADCCONTROL9
ES8388_ADCCONTROL10
ES8388_ADCCONTROL11
ES8388_ADCCONTROL12
ES8388_ADCCONTROL13
ES8388_ADCCONTROL14
ES8388_DACCONTROL1
ES8388_DACCONTROL2
ES8388_DACCONTROL3
ES8388_DACCONTROL4
ES8388_DACCONTROL5
ES8388_DACCONTROL6
ES8388_DACCONTROL7
ES8388_DACCONTROL8
ES8388_DACCONTROL9
ES8388_DACCONTROL10
ES8388_DACCONTROL11
ES8388_DACCONTROL12
ES8388_DACCONTROL13
ES8388_DACCONTROL14
ES8388_DACCONTROL15
ES8388_DACCONTROL16
ES8388_DACCONTROL17
ES8388_DACCONTROL18
ES8388_DACCONTROL19
ES8388_DACCONTROL20
ES8388_DACCONTROL21
ES8388_DACCONTROL22
ES8388_DACCONTROL23
ES8388_DACCONTROL24
ES8388_DACCONTROL25
ES8388_DACCONTROL26
ES8388_DACCONTROL27
ES8388_DACCONTROL28
ES8388_DACCONTROL29
ES8388_DACCONTROL30

Enumerations

enum es_bits_length_t

Values:

BIT_LENGTH_MIN = -1
BIT_LENGTH_16BITS = 0x03
BIT_LENGTH_18BITS = 0x02
BIT_LENGTH_20BITS = 0x01
BIT_LENGTH_24BITS = 0x00
BIT_LENGTH_32BITS = 0x04
BIT_LENGTH_MAX
enum es_sclk_div_t

Values:

MCLK_DIV_MIN = -1
MCLK_DIV_1 = 1
MCLK_DIV_2 = 2
MCLK_DIV_3 = 3
MCLK_DIV_4 = 4
MCLK_DIV_6 = 5
MCLK_DIV_8 = 6
MCLK_DIV_9 = 7
MCLK_DIV_11 = 8
MCLK_DIV_12 = 9
MCLK_DIV_16 = 10
MCLK_DIV_18 = 11
MCLK_DIV_22 = 12
MCLK_DIV_24 = 13
MCLK_DIV_33 = 14
MCLK_DIV_36 = 15
MCLK_DIV_44 = 16
MCLK_DIV_48 = 17
MCLK_DIV_66 = 18
MCLK_DIV_72 = 19
MCLK_DIV_5 = 20
MCLK_DIV_10 = 21
MCLK_DIV_15 = 22
MCLK_DIV_17 = 23
MCLK_DIV_20 = 24
MCLK_DIV_25 = 25
MCLK_DIV_30 = 26
MCLK_DIV_32 = 27
MCLK_DIV_34 = 28
MCLK_DIV_7 = 29
MCLK_DIV_13 = 30
MCLK_DIV_14 = 31
MCLK_DIV_MAX
enum es_lclk_div_t

Values:

LCLK_DIV_MIN = -1
LCLK_DIV_128 = 0
LCLK_DIV_192 = 1
LCLK_DIV_256 = 2
LCLK_DIV_384 = 3
LCLK_DIV_512 = 4
LCLK_DIV_576 = 5
LCLK_DIV_768 = 6
LCLK_DIV_1024 = 7
LCLK_DIV_1152 = 8
LCLK_DIV_1408 = 9
LCLK_DIV_1536 = 10
LCLK_DIV_2112 = 11
LCLK_DIV_2304 = 12
LCLK_DIV_125 = 16
LCLK_DIV_136 = 17
LCLK_DIV_250 = 18
LCLK_DIV_272 = 19
LCLK_DIV_375 = 20
LCLK_DIV_500 = 21
LCLK_DIV_544 = 22
LCLK_DIV_750 = 23
LCLK_DIV_1000 = 24
LCLK_DIV_1088 = 25
LCLK_DIV_1496 = 26
LCLK_DIV_1500 = 27
LCLK_DIV_MAX
enum es_d2se_pga_t

Values:

D2SE_PGA_GAIN_MIN = -1
D2SE_PGA_GAIN_DIS = 0
D2SE_PGA_GAIN_EN = 1
D2SE_PGA_GAIN_MAX =2
enum es_adc_input_t

Values:

ADC_INPUT_MIN = -1
ADC_INPUT_LINPUT1_RINPUT1 = 0x00
ADC_INPUT_MIC1 = 0x05
ADC_INPUT_MIC2 = 0x06
ADC_INPUT_LINPUT2_RINPUT2 = 0x50
ADC_INPUT_DIFFERENCE = 0xf0
ADC_INPUT_MAX
enum es_dac_output_t

Values:

DAC_OUTPUT_MIN = -1
DAC_OUTPUT_LOUT1 = 0x04
DAC_OUTPUT_LOUT2 = 0x08
DAC_OUTPUT_SPK = 0x09
DAC_OUTPUT_ROUT1 = 0x10
DAC_OUTPUT_ROUT2 = 0x20
DAC_OUTPUT_ALL = 0x3c
DAC_OUTPUT_MAX
enum es_mic_gain_t

Values:

MIC_GAIN_MIN = -1
MIC_GAIN_0DB = 0
MIC_GAIN_3DB = 3
MIC_GAIN_6DB = 6
MIC_GAIN_9DB = 9
MIC_GAIN_12DB = 12
MIC_GAIN_15DB = 15
MIC_GAIN_18DB = 18
MIC_GAIN_21DB = 21
MIC_GAIN_24DB = 24
MIC_GAIN_MAX
enum es_module_t

Values:

ES_MODULE_MIN = -1
ES_MODULE_ADC = 0x01
ES_MODULE_DAC = 0x02
ES_MODULE_ADC_DAC = 0x03
ES_MODULE_LINE = 0x04
ES_MODULE_MAX
enum es_mode_t

Values:

ES_MODE_MIN = -1
ES_MODE_SLAVE = 0x00
ES_MODE_MASTER = 0x01
ES_MODE_MAX
enum es_i2s_fmt_t

Values:

ES_I2S_MIN = -1
ES_I2S_NORMAL = 0
ES_I2S_LEFT = 1
ES_I2S_RIGHT = 2
ES_I2S_DSP = 3
ES_I2S_MAX