前文已经实现了寄存器的读写,可以进行es8388的配置。本文继续来分享下es8388的细节,各个模块功能,为后面配置,驱动编写做准备。
ES8388是一款高性能、低功耗、低成本的带耳机放大器的立体声音频编解码器。由2通道ADC、2通道DAC、麦克风放大器、耳机放大器、数字音效以及模拟混合和增益功能等部分组成。使用的多位∑-Δ技术,对时钟抖动具有低灵敏度和低带外噪声(我们前面文章专门分享过的PDM原理即∑-Δ原理,并还分享了其应用比如降帧率率算法)。
ADC
l24位,8 kHz至96 kHz采样频率
l95 dB动态范围,95 dB信噪比,-85 dB THD+N
l带麦克风放大器的立体声或单声道麦克风接口
l自动电平控制和噪声门限
l2对1模拟输入选择
l各种模拟输入混合和增益
DAC
l24位,8 kHz至96 kHz采样频率
l96 dB动态范围,96 dB信噪比,-83 dB THD+N
l40 mW耳机放大器,无爆裂噪声
l耳机无帽模式
l立体声增强
l低音和高音
l各种模拟输出混合和增益
低功耗
l1.8V至3.3V操作
l7 mW播放;16 mW播放和录制
系统
lI2C或SPI uC接口
l256Fs、384Fs、USB 12 MHz或24 MHz
l主串行端口或从串行端口
lI2S、左对齐、DSP/PCM模式
框图如下,主要注意录音输入ADC,播放输出DAC的路径数据流,后面es8388的配置即针对这两条路径的配置。
典型原理图如下
在IIC/SPI接口驱动读写寄存器阶段,只需要确认DVDD,PVDD的电源,CE的电平决定IIC的地址,确认其信号即可。
后续如果ADC或者DAC无数据则需要检查配置,确认HPVDD,AVDD电源,
确认VMID,ADCVREF,VREF是否有对应电压输出,没有则可能是对应模块设置为了PDN掉电或者LP低功耗,需要检查寄存器配置。
其他就是检查MCLK,各IIS信号等,示波器看信号,逻辑分析仪看解析。
有两个参数,一个是ES8388的IIS工作在主还是从模式,寄存器8的MSC(bit7)控制ES8388是主模式还是从模式,默认为1是主模式,一般改为0作为从,控制器作为主。
一个是数据采样率是单速率还是双速率模式single speed /double speed。
寄存器13的位5,ADCFsMode为0则ADC为single采样模式,否则为双速率采样模式。寄存器24的位5,DACFsMode为0则DAC为single采样模式,否则为双速率采样模式。
不管什么模式MCLK都由控制器提供。
MSC=0时ES8388是从模式,此时BCLK和LRCK都由控制器提供
此时控制器自定检测MCLK/LRCK,控制器提供的MCLK和LRCK必须符合以下表格,
一般SCLK/LRCK为64,即双通道,一个LRCK的高电平或者低电平有32个时钟,可以传输每一个通道的最多32位数据,当然数据可以小于24位,此时就有不同的数据格式见后面格式说明。
一个是数据采样率是单速率还是双速率模式single speed /double speed。
寄存器13的位5,ADCFsMode为0则ADC为single采样模式,否则为双速率采样模式。寄存器24的位5,DACFsMode为0则DAC为single采样模式,否则为双速率采样模式。
不管什么模式MCLK都由控制器提供。
MSC=0时ES8388是从模式,此时BCLK和LRCK都由控制器提供
此时控制器自定检测MCLK/LRCK,控制器提供的MCLK和LRCK必须符合以下表格,
一般SCLK/LRCK为64,即双通道,一个LRCK的高电平或者低电平有32个时钟,可以传输每一个通道的最多32位数据,当然数据可以小于24位,此时就有不同的数据格式见后面格式说明。
MSC=1时ES8388是主模式,此时BLCK和LRCK由ES8388提供,MCLK可以配置是否二分频CLKDIV2。然后再分频BLCKDIV得到BCLK,
MCLK分频ADCFsRatio (寄存器13)或 DACFsRatio(寄存器24)得到LRCK。
MCLK,LRCK,BCLK要符合手册表格”Table 2 Master Mode Sampling Frequencies and MCLK/LRCK Ratio”
一般把ES8388设置为从模式,控制器作为主模式。
ADC和DAC理论上各有一个LRCK,但是只有一个LRCK引脚,所以必须配置为一样,所以
寄存器43的slrck必须设置为1(默认值为0),lrck_sel设置为0.
主模式LRCK配置路径如下,寄存器13和24配置:
从模式时,自动检测,但是只支持,13和24寄存器左边一列的配置。
BCLK配置如下8寄存器配置。
从模式8寄存器的BCLKDIV 要配置为0.
寄存器0~6,重点是寄存器0,1,2,3。
寄存器0和1设置内部bias,参考电压。
寄存器2,控制数字模块,状态机,DLL内部参考电压,配置前配置为0xF3,配置完配置为0x00.
寄存器3,配置ADC,DAC的开关,输入和输出部分的上电。
寄存器4配置DAC的上电,4各输入引脚的使能。
寄存器5和6设置低功耗。
支持IIC和SPI,前文已经分享了,不再赘述。
共有53个寄存器,分为全局控制(主要是模式,电源控制,低功耗控制等),ADC部分,DAC部分寄存器。
寄存器详见手册描述,上一篇我们也读出了全部寄存器和手册默认值进行对比。
数据支持4种格式,IIS格式,左对齐,右对齐,DSP/PCM格式,分别如下
都是DSDIN在DSCLK上升沿采样,ASDOUT在ASCLK下降沿就准备好。
可以寄存器配置左右通道谁先谁后。
标准IIS格式如下,最多支持24位数据,高位在前,第2个SCLK开始传输数据,这里需要特别注意。左右通道数据轮流来。
左对齐格式,最多支持24位数据,高位在前,第一个SCLK开始传输数据,
右对齐格式,最多支持24位数据,高位在前,最右边数据是有效数据,
PCM/DSP格式,此时LRCK是一个脉冲,不是用于表示通道区分,而是用于表示启动传输,高位在前,A和B的区别是A是LRCK脉冲后第2个SCLK开始传输数据,而B则是第一个SCLK开始。
寄存器12配置ADC格式,DATSEL可以配置左右通道数据和左右ADC对应关系,
ADCLRP配置第几个时钟开始或者是极性
ADCWL配置字长
ADCFORMAT配置格式
寄存器23配置DAC格式
DACLRSWAP可以配置左右通道交换,其他和ADC一样。