基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证
前言
本实验基于Xilinx ZU4EV平台,也适用于ZYNQ平台。音频验证完成,记录调过程。
①Xilinx 音频IP只支持主模式,左对齐或右对齐方式,16bit或24bit字长。
②WM8960器件作为从模式;24bit字长;数据传输格式为右对齐,输入输出0增益,高通滤波等。
对于配置WM8960,本次验证需要软件人员在设备树上添加I2C设备信息才可以使用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、工程构架
WM860的配置如下图
二、Xilinx IP的配置
以下命令是配置IP相关寄存器的,命令的格式可以在网上找到,需要注意的是写地址是IP的基地址+寄存器偏移地址。
1.I2S Transmitter IP配置:
代码如下(示例):
//I2S Transmitter IP配置:
devmem 0xA00A0020 w 0x02 //sclk2分频
devmem 0xA00A0008 w 0x07 //打开IP使能,使用右有理
2.I2S Receiver IP配置:
代码如下(示例):
devmem 0xA0090020 w 0x02 //sclk2分频
devmem 0xA0090050 w 0xFF //地址0x50-0x600为AES通道状态更新
devmem 0xA0090054 w 0xFF
devmem 0xA0090058 w 0xFF
devmem 0xA009005c w 0xFF
devmem 0xA0090060 w 0xFF
devmem 0xA0090064 w 0xFF
devmem 0xA0090008 w 0x07 //打开IP使能,使用右有理
3.WM8960的配置:
因为我的板卡上的WM8960音频芯片的I2C管脚是分配到PS端的,所以WM8960的配置需要软件人员在设备树上添加I2C设备信息才可以使用以下命令。对于使用PL端来配置寄存器的不需要使用以下命令。
需要注意的是,命令中的寄存器地址段是7bit地址+最高位寄存器数据组合的,因为这是WM860要求的。
寄存器写地址:7bit地址+[8]data
WM8960配置如下:
这是Linux自带的ic工具,只需要敲命令就可以通过I2C配置WM8960的寄存器了。
命令的格式在网上也可以找到。
i2cset -f -y 0 0x1a 0x1e 0x00
i2cset -f -y 0 0x1a 0x33 0xfe
i2cset -f -y 0 0x1a 0x35 0xe1
i2cset -f -y 0 0x1a 0x5e 0x3c
i2cset -f -y 0 0x1a 0x0e 0x08
i2cset -f -y 0 0x1a 0x08 0x00
i2cset -f -y 0 0x1a 0x41 0x08
i2cset -f -y 0 0x1a 0x43 0x08
i2cset -f -y 0 0x1a 0x56 0x50
i2cset -f -y 0 0x1a 0x58 0x50
i2cset -f -y 0 0x1a 0x01 0x57
i2cset -f -y 0 0x1a 0x03 0x57
i2cset -f -y 0 0x1a 0x05 0xf9
i2cset -f -y 0 0x1a 0x07 0xf9
i2cset -f -y 0 0x1a 0x0a 0x01
i2cset -f -y 0 0x1a 0x0c 0x00
i2cset -f -y 0 0x1a 0x30 0x00
i2cset -f -y 0 0x1a 0x2b 0xc3
i2cset -f -y 0 0x1a 0x2d 0xc3
i2cset -f -y 0 0x1a 0x60 0x10
i2cset -f -y 0 0x1a 0x12 0x00
i2cset -f -y 0 0x1a 0x45 0x00
i2cset -f -y 0 0x1a 0x4b 0x00
i2cset -f -y 0 0x1a 0x5a 0x00
i2cset -f -y 0 0x1a 0x5c 0x00
该处使用的url网络请求的数据。
总结
本人是FPGA工程师,这个工程概述试用于验证Xilinx的I2S音频IP。工程要用到的寄存器配置如上。使用上面的配置我的工程声音的采集和播放时正常的,带上耳机可以听到声音,并且没有噪声。
调试的过程中要注意音频的对齐方式要配置为一样。我调试过程中脑子想的是要把他们两个配置为一样但是实际上Xilinx IP配置的是右对齐,WM8960配置的是左对齐,导致带耳机听声音时要么没声音要么有很大的噪声,这个问题困扰了我很久,后面把两个配置为相同的对齐方式就正常了。