梁喜幸+杨东斌
摘 要:介绍一款高性能消费模式S/PDIF收发器WM8805基于单片机的软件控制模式。设计一个程序对其进行软件控制,加以一定的人机交互界面,挖掘其最大的性能优势,解析出更完美的S/PDIF信号。
关键词:S/PDIF WM8805 单片机
中图分类号:TP311.1 文献标识码:A 文章编号:1672-3791(2017)05(c)-0025-02
1 WM8805简介
WM8805是一款高性能消费模式S/PDIF收发器,可支持8通道接收和单通道发送。其高品质的主时钟可通过一个内部晶振衍生或由外部时钟发生器提供,使得主时钟所提供的S/PDIF信号实现低抖动恢复。所有常用的音频时钟几乎都可以由内置的高性能锁相环(PLL)生成。通过一个专用的CLKOUT管脚,该器件可提供一个较高的驱动时钟输出信号。其“穿越(pass through)”功能可以使该器件被简单地用于清除(去除抖动)所接收的数字音频信号。该器件还可以在软件控制或是独立的硬件控制模式下使用。在软件控制模式下,它可支持具有复读功能的2线制接口模式及3线制接口模式。该器件包含了状态与错误监测功能,其结果反映控制接口上的复读状态、GPIO管脚的状态,以及在“标志位”模式(带有附加状态标志的音频数据)下,数据流由音频数据接口输入的状态。此音频数据接口支持I2S、左对齐、右对齐和16~24位字长的DSP音频格式,其采样率范围为32~192 ks/s。该器件采用无铅、28引脚的SSOP封装。如图1所示。
SDIN/HWMODE为工作模式控制引脚,当芯片上电或者复位时,如果SDIN/HWMODE电平为0时,芯片的工作模式是硬件控制模式;如其电平为1,则芯片工作模式为软件控制模式。WM8805支持两种控制方式:两线和三线,由SWIFMODE引脚控制。其电平为0时,为两线工作方式;电平为1时,为3线工作方式。在使用过程中,需要特别注意这两个引脚,根据设计的需要对它们进行正确配置,否则将有可能无法正常使用芯片。该设计中使用的是I2C两线控制方式,CLK为时钟信号,SDIN/HWMODE数据信号端口。
2 WM8805软件设计
2.1 写数据
在两线模式下,WM8805的写数据时序图如图2所示,CSB为WM8805的片选信号引脚,当芯片工作于软件控制模式下时,其复用为地址信号的选择引脚。如果其电平为低,则芯片地址为0111010x,而如果其电平为高时,则芯片地址为0111011x。
其中x为读写状态控制位,x=0时为写命令,x=1时为读命令。
相关程序如下:
void I2C_Write_WM8850_CMD(unsigned char ADDR,unsigned char dat)
{
Start_I2c() ; //啟动I2C总线
I2C_SendByte(DEVICE_W_ADDRESS); //发送写数据地址命令
I2C_SendByte(ADDR&0x7f);
I2C_SendByte(dat); //写数据
Stop_I2c(); //停止
}
2.2 读寄存器
WM8805当中,有部分寄存器为只读寄存器,该部分寄存器用作指示芯片的工作状态,数据信号的相关信息和芯片的相关参数等内容。两线工作模式下,只读寄存器读时序如图3所示,其命令如下。
unsigned char I2C—Read—WM8805—Register(unsigned char ADDR)
{
unsigned char dat ;
Start—I2c();//启动I2C总线
I2C—SendByte(DEVICE—W—ADDRESS;//发总写数据地址命令)
I2C—Sendbyte(ADDR);//发送读数据地址
Start—I2c();//发送重新开始信号
I2C—SendByte(DEVICE—R—ADDRESS);//发送读数据地址命令
dat=I2C—RcvByte();//读取数据
Stop—I2c();//发送停止信号
return dat;
}
3 结语
WM8805最高能正常解码到192 kHz音频,播放192KHz音频的时候,音乐无杂音,信号锁定稳定,没有出现断续情况。同时对于44.1 kHz、48 kHz、88.2 kHz、96 kHz、176.2 kHz等频率的音频也能正常解码播放。音质温暖柔和、通透、人声表现优异。能将系统时钟恒定在24.576 MHz/22.5792 MHz,获得指标出色的jitter,模拟部分为分立器件输出电路,性能优异,没有运放电路深反馈带来的压抑感。