(1)VS1053通过7根线同MCU连接,如下:
VS_RST:VS1053的复位信号线,低电平有效。
VS_DREQ:数据请求信号(高电平有效),用来通知主机,VS1053是否
可以接收数据。
VS_XCS:命令片选(低电平有效)。
VS_XDCS:数据片选(低电平有效)。
VS_MISO、VS_MOSI和VS_SCK:SPI信号线。
(2)在XCS变成低电平后,SCK的第一个上升沿标志着第一个数据被写入。 VS1053的SPI数据传送,分为SDI和SCI,分别用来传输数据/命令。
SDI采用SPI协议,不过,数据传输受DREQ控制,主机在判断DREQ有效(高电平)之后,直接发送数据即可(一次可以发送32个字节)。
SCI串行总线命令接口包含了一个指令字节、一个地址字节(低四位有效)和一个16位的数据字。读写操作可以读写单个寄存器,在SCK的上升沿读出数据位,所以主机必须在下
降沿刷新 数据。SCI的字节数据总是高位在前低位在后的。第一个字节指令字节,只有2个指令,也就是读和写,读为0X03,写为0X02。
SCI读时序
SCI写时序
注意:在读和写时序图中,DREQ信号上都产生了一个短暂的低脉冲,也就是执行时间,在写入和读出VS1053的数据之后,它需要一些时间来处理内部的事情,这段
时间,是不允许外部打断的。所以,在SCI操作之前,最好判断一下DREQ是否为高电平,如果不是,则等待DREQ变为高。
(3)MODE寄存器(0X00)
该寄存器,我们只介绍:SM_RESET(bit2)和SM_SDINEW(bit11)位。
SM_RESET:软件复位,建议在每播放一首歌曲之后,软复位一次。
SM_SDINEW:模式设置位,设置为1,选择VS1002新模式(本地模式)。
其他位的详细介绍,请参考:VS1053_cn.pdf。
(4)BASS寄存器(0X02)
[0:7]控制低音 [8:15]控制高音
该寄存器可以用于设置VS1053的高低音效,通过这个寄存器以上位的一些设置,我们可以随意配置自己喜欢的音效(其实就是高低音的调节)。
注意:EarSpeaker效果由MODE寄存器控制。
(5)CLOCKF寄存器(0X03)
该寄存器用来设置时钟频率、倍频等相关信息。其中:SC_FREQ是以4Khz为步进的一个时钟寄存器,当外部时钟是12.288M的时候,设置为0即可。
XTALI是外部晶振的时钟频率(单位为:Hz )。CLKI是内部时钟频率。由于我们使用的是12.288M的晶振,在这里设置此寄存器的值为0X9800,也就是设置内部
时钟频率为输入时钟频率的3倍(SC_MULT=0X100),倍频增量为1.5倍(SC_ADD=0X11),SC_FREQ=0X00000000000。
(5)HDAT0&HDAT1寄存器(0X08&0X09)
这两个寄存器,是数据流头寄存器,不同的音频文件,读出来的值意义不一样,我们可以通过这两个寄存器来获取音频文件的码率,从而可以计算音频文件的总
长度。这两个寄存器的详细介绍,请参考:VS1053的数据手册(VS1053_cn.pdf)。
(6)VOL寄存器(0X0B)
该寄存器用于控制VS1053的输出音量,该寄存器可以分别控制左右声道的音量,每个声道的控制范围为0~254,每个增量代表0.5db的衰减,所以该值越小,代表
音量越大。比如设置为0X0000(高八位和第八位分别控制左右声道)则音量最大,而设置为0XFEFE则音量最小。
注意:如果设置VOL的值为0XFFFF,将使芯片进入掉电模式!
(7)VS1053初始化步骤
①复位VS1053
包括硬复位和软复位,让VS1053恢复初始状态,准备解码下一首歌曲。在每首歌曲播放之前都可以执行一次硬件复位和软件复位,以便更好的播放音乐。
②配置VS1053的相关寄存器
这里我们配置的寄存器包括VS1053的模式寄存器(MODE)、时钟寄存器(CLOCKF)、音调寄存器(BASS)、音量寄存器(VOL)等。
③发送音频数据
经过以上①、②配置以后,我们剩下来要做的事情,就是往VS1053里面发送音频数据,只要是VS1053支持的音频格式,直接往里面丢就可以了,VS1053会
自动识别,并进行播放。不过,发送数据要在DREQ信号的控制下有序的进行,不能乱发。这个规则很简单:只要DREQ变高,就向VS1053发送32个字节。然后继续等待DREQ
变高,直到音频数据发送完。(暂停的实现:MCU不发送数据到VS1053,快进:)