记录使用F4开发板驱动功放WM8978前备内容
目录
(1)WAV格式
(2)WM8978
(3)飞利浦IIS标准
(4)WM8978相关寄存器配置
(1)WAV格式
WAV文件(WaveForm)是在PC机平台上常用的存储声音波形数字音频格式,支持多种音频数字,取样频率和声道,WAV格式文件能记录各种单声道或立体声的声音信息,并能保证声音不失真,但所占磁盘空间较大。WAV文件还原而成的声音的音质取决于采样样本的尺寸,采样频率越高,音质就越好,同时存储开销就越大。WAV文件,标识(WAVE)采用的是RIFF格式结构。至少是由3个块构成,分别是RIFF、fmt 和Data。
音频存储过程:声源发出的声波通过话筒被转换成连续变化的电信号,经过放大、抗混叠滤波后,按固定的频率进行采样(电信号幅值),接下来将其由模拟电信号量化为由二进制数表示的积分值,最后编码并存储为音频流数据。
FileSize = HeadSize(文件头部长度) + TimeInSecond(相对时间)* SampleRate(采样率) * Channels(声道数) * BitsPerSample(采样位深) / 8
WAV由若干Chunk组成,文件包括:①RIFF WAV Chunk;②Format Chunk;③Fact Chunk(不一定有);④Data Chunk。Chunk由块标识(4Bytes)、size(4Bytes)和数据组成。
(更多参考WAV_百度百科 (baidu.com))
RIFF块:
Format块:Chunk段为16字节或另加2字节附加信息
Fact块(线性PCM格式),可选块,一般存在于Format结构后
data块,保存wav数据,Chunksize记录音频数据大小:
(2)WM8978
WM8978是低功耗,高质量的立体声编解码器,集成了立体声差分麦克风的前置放大器,并包括扬声器、耳机和差分或立体声线输出驱动器。片上数字信号处理包括一个5波段均衡器,通过ADC输入麦克风或线路的混合信号自动电平控制,以及一个纯数字限制功能的记录或回放。
WM8978数字音频接口具有主从两用功能。其内部锁相环可从常见的参考时钟频率(如12MHz和13MHz)为编解码器生成所有所需的音频时钟。通过IIS接口同MCU进行音频数据传输,通过两线(mode = 0 iic)或者三线(mode =1)接口配置。WM8978IIS支持多种不同的音频数据模式:MSB,LSB,飞利浦标准等。
特性:
①DAC SNR 98dB, THD -84dB;②ADC SNR 95dB, THD -84dB;
③Stereo speaker drive configuration立体声扬声器驱动
④On-chip PLL supporting 12, 13, 19.2MHz and other clocks,Support for 8, 11.025, 12, 16, 22.05, 24, 32, 44.1 and 48kHz sample rates
上图位WM8978(D类功放)内部框图,红框为模拟开关和调节器,我们通过相关寄存器的改写可来配置增益和音量。当然,WM8978也需搭配其必要的外围电路实现目标功能。
(3)飞利浦IIS标准
STM32通过设置 SPI_I2SCFGR 寄存器的 I2SMOD 位即可 开启 I2S 功能。
IIS引脚:①SD串行数据,用于发送和接收两个时分复用通道数据,映射到MOSI引脚;②WS字选择,IIS左右时钟(LRCK),用于切换左右声道数据,映射到NSS引脚;③CK串行位时钟(BCK),主模式下作为串行时钟输出及从模式下输入,Fck=Fs(采样频率)x2x16(位宽);④MCK主时钟输出,时钟频率=Fsx256。
数据跟随 LRC 传输的 BCLK 的第二个上升沿时传输 MSB,其他位一直到LSB按顺序传输。传输依赖于字长、BCLK 频率和采样率。
F4对于IIS主时钟的配置:
MCK 输出使能时,fs 频率计算公式如下: fs=I2SxCLK/[256(2I2SDIV+ODD)] Khz,I2SxCLK=(HSE/pllm)*PLLI2SN/PLLI2SR,已知条件HSE=8M,pllm默认为8,可得Fs= (1000xPLLI2SN/PLLI2SR )/[256x(2xI2SDIV+ODD)]。PLL2SN 取值范围:192~432;PLLI2SR 取值范围:2~7;I2SDIV 取值范围:2~255;ODD 取值范围:0/1。
(4)WM8978相关寄存器配置
WM8978在1.5倍的升压级下,上电初始化顺序:
1. Turn on external power supplies. Wait for supply voltage to settle. 2. Mute all analogue outputs. 3. Enable unused output chosen from L/ROUT2, OUT3 or OUT4. If unused output not available, chose one of these outputs not required at power up. 4. Set BUFDCOPEN(专用缓冲器的直流电平转移输出阶段)= 1 and BUFIOEN = 1 in register R1. 设置模拟放大器 5. Set SPKBOOST = 1 in register R49. (1 = speaker gain = +1.5; DC = 1.5 x AVDD / 2) 6. Set VMIDSEL[1:0] to required value in register R1(电流消耗最小化,使能锁相环). Wait for the VMID supply to settle. 7. Set L/RMIXEN = 1 and DACENL/R = 1 in register R3. 使能左右声道混合器 8. Set BIASEN = 1 in register R1.模拟放大器偏置控制 9. Set L/ROUT2EN = 1 in register R3. 使能声道输出 10. Enable other mixers as required. 11. Enable other outputs as required. 12. Set remaining registers. 配置其他剩余寄存器
寄存器相关应用配置总结:
R0寄存器(00H) | 控制 WM8978 的软复位,写任意值到该寄存器地址 |
---|---|
R1寄存器(01H) | 设置 BIASEN(bit3),模拟放大器打开 |
R2寄存器(02H) | 设置 ROUT1EN(bit8),LOUT1EN(bit7)和 SLEEP(bit6)使能耳机输出 |
R3寄存器(03H) | 设置 LOUT2EN(bit6),ROUT2EN(bit5),RMIXER(bit3)等使能左右声道混合器 |
R3寄存器(04H) | 设置 WL(bit6:5)和 FMT(bit4:3),IIS飞利浦模式 |
R6寄存器(06H) | 设置0,即 MCLK 和 BCLK 都由外部提供 |
R10寄存器(0AH) | 设置 SOFTMUTE(bit6)和 DACOSR128(bit3)等,配置SNR,关闭软件静音 |
R43寄存器(2BH) | 设置 INVROUT2 为 1 即可,反转 ROUT2 输出,优化驱动喇叭 |
R49寄存器(31H) | 设置 SPKBOOST(bit2)和 TSDEN(bit1),配置喇叭增益 |
R50(32H)和 R51(33H) | 配置左右DAC接入左右声道混合器 |
R52(34H)和 R53(35H) | 更新设置耳机音量 |
R54(36H)和 R55(37H) | 更新设置喇叭音量 |