WM8988 配置和注意事项

tech2026-02-28  0

最近笔者在做声卡相关设备,既要满足优质的人声输入控制,也要有良好的输出调制,对比多家调试了多款Codec,最终选用了WM8988。因为配置比较复杂,这里笔者把一些关键部分提供给大家参考参考

先来看看WM8988内部结构框图,开发者可通过它和相关的几十个寄存器衔接起来做出适合的配置

下面贴下,初始化代码

#define WM8988_DEV0_ADDR (0x1a) // 7~1 bit addr #define WM8988_DEV1_ADDR (0x1b) // 7~1 bit addr #define WM8988_LINVOL 0x00 #define WM8988_RINVOL 0x01 #define WM8988_LOUT1V 0x02 #define WM8988_ROUT1V 0x03 #define WM8988_ADCDAC 0x05 #define WM8988_IFACE 0x07 #define WM8988_SRATE 0x08 #define WM8988_LDACVOL 0x0a #define WM8988_RDACVOL 0x0b #define WM8988_BASS 0x0c #define WM8988_TREBLE 0x0d #define WM8988_RESET 0x0f #define WM8988_3D 0x10 #define WM8988_ALC1 0x11 #define WM8988_ALC2 0x12 #define WM8988_ALC3 0x13 #define WM8988_NGATE 0x14 #define WM8988_LADCVOL 0x15 #define WM8988_RADCVOL 0x16 #define WM8988_ADCTL1 0x17 #define WM8988_ADCTL2 0x18 #define WM8988_PWR1 0x19 #define WM8988_PWR2 0x1a #define WM8988_ADCTL3 0x1b #define WM8988_ADCIN 0x1f //可配置输入MIX #define WM8988_LADCIN 0x20 //MIC 相关配置 #define WM8988_RADCIN 0x21 //MIC 相关配置 #define WM8988_LOUTM1 0x22 #define WM8988_LOUTM2 0x23 #define WM8988_ROUTM1 0x24 #define WM8988_ROUTM2 0x25 #define WM8988_LOUT2V 0x28 #define WM8988_ROUT2V 0x29 #define WM8988_LPPB 0x43 #define WM8988_NUM_REG 0x44 #define wm8988_DVE0_write_reg(reg,data) xBSP_Codec_Write(WM8988_DEV0_ADDR, (uint8_t)((reg<<1)|(data>>8)), (uint8_t)(data&0xff)) static void xSYS_WM8988_Config(void) { //Data Reset wm8988_DVE0_write_reg(WM8988_RESET,0x00); //19h 1ah Power Management wm8988_DVE0_write_reg(WM8988_PWR1,0x01); wm8988_DVE0_write_reg(WM8988_PWR2,0x00); //inactive //ADC LR Signal path: LRINSEL LRMICBOOST wm8988_DVE0_write_reg(WM8988_LADCIN,0x40); //0x00 //0x40 选通 输入2 wm8988_DVE0_write_reg(WM8988_RADCIN,0x40); //0x00 //Left out Mix 1/2 //这里只走DAC转换的数据 wm8988_DVE0_write_reg(WM8988_LOUTM1,0x122); //0x1a0 DAC 和 MIXSEL 都走这里 wm8988_DVE0_write_reg(WM8988_LOUTM2,0x70); //70 //Right out Mix 1/2 wm8988_DVE0_write_reg(WM8988_ROUTM1,0x70); //70 wm8988_DVE0_write_reg(WM8988_ROUTM2,0x122); //19h 1ah Power Management // wm8988_DVE0_write_reg(WM8988_PWR1,0x1fc); // // wm8988_DVE0_write_reg(WM8988_PWR2,0x1f8); //active· wm8988_DVE0_write_reg(WM8988_PWR1,0x17c); // wm8988_DVE0_write_reg(WM8988_PWR2,0x1f0); //active 三路输出 //ADC and DAC Contrl wm8988_DVE0_write_reg(WM8988_ADCDAC,0x08); //08 Mute //LR Input volume wm8988_DVE0_write_reg(WM8988_LINVOL,0x117); //197 wm8988_DVE0_write_reg(WM8988_RINVOL,0x117); //LR Out1 volume wm8988_DVE0_write_reg(WM8988_LOUT1V,0x100); //0dB:179 wm8988_DVE0_write_reg(WM8988_ROUT1V,0x100); //LR OUT2 VOL wm8988_DVE0_write_reg(WM8988_LOUT2V,0x179); //0dB wm8988_DVE0_write_reg(WM8988_ROUT2V,0x100); //这个不输出 //LR ADC Digital Vol wm8988_DVE0_write_reg(WM8988_LADCVOL,0x1c3); //MIC 默认 0 dB wm8988_DVE0_write_reg(WM8988_RADCVOL,0x1c3); //LR DAC Volume wm8988_DVE0_write_reg(WM8988_LDACVOL,0x1ff); //0dB //0x1ff wm8988_DVE0_write_reg(WM8988_RDACVOL,0x1ff); // //Audio Interface Format wm8988_DVE0_write_reg(WM8988_IFACE,0x0a); //24bit I2s //Sample Rate wm8988_DVE0_write_reg(WM8988_SRATE,0x20); //Bass/Treble Control wm8988_DVE0_write_reg(WM8988_BASS,0x0f); wm8988_DVE0_write_reg(WM8988_TREBLE,0x0f); //3D enhance wm8988_DVE0_write_reg(WM8988_3D,0x00); //ALG Ctrl 1/2/3 wm8988_DVE0_write_reg(WM8988_ALC1,0x7B); wm8988_DVE0_write_reg(WM8988_ALC2,0x00); wm8988_DVE0_write_reg(WM8988_ALC3,0x32); //Noise Gate wm8988_DVE0_write_reg(WM8988_NGATE,0x00); //Additional ctrl 1/2/3 wm8988_DVE0_write_reg(WM8988_ADCTL1,0x00); wm8988_DVE0_write_reg(WM8988_ADCTL2,0x00); wm8988_DVE0_write_reg(WM8988_ADCTL3,0x00); //Low Power Playback wm8988_DVE0_write_reg(WM8988_LPPB,0x00); //ADC input mode wm8988_DVE0_write_reg(WM8988_ADCIN,0x100); //0x00 //ADC and DAC Contrl wm8988_DVE0_write_reg(WM8988_ADCDAC,0x00); }

如代码和上图寄存器图所示,可知道输入输出音量相关的寄存器就有十个左右,工程师需根据实际情况去做调节(模拟,数字均可调节);另外还有混合相关的寄存器值得注意。

电路设计可参考如下:

最新回复(0)