查看: 5101|回复: 6

领航者ZYNQ开发板试用7:ZYNQ播放音频

[复制链接]
  • TA的每日心情
    开心
    2022-8-6 16:18
  • 签到天数: 72 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2020-2-29 21:35:09 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wdzfd-25908 于 2020-2-29 21:49 编辑

    领航者ZYNQ开发板的底板上板载有Cirrus Logic的高性能音频编解码芯片WM8960及相关的接口,也自带一个小喇叭可以进行声音外放,这个是该开发板相比市场上其它厂家的ZYNQ开发板的一个特色,本次实验拟用ZYNQ ARM内核驱动WM8960芯片,实现在开发板自带的喇叭上播放音频。首先看下音频部分的原理图如下图示:
    701.jpg
    可以看到与ZYNQ芯片相连的只有WM8960芯片的11~18脚,具体信号功能如下图示:
    702.jpg
    其中第11~16脚传输数据信号,又分为声音DAC输入和MIC ADC输出,第17~18脚传输控制信号,这些信号都连接到ZYNQ芯片的PL侧,控制信号SCLK和SDIN为I2C总线,可以用PS的I2C外设通过MIO来连接控制,数据信号为I2S总线,ZYNQ的PS没有I2S外设,我们用PL来实现I2S总线时序;下面为具体步骤:
    1、时钟设计:音频输出的采样率我们定为48KHz,即DACLRC = 48KHz; 我们使用从模式由Zynq芯片输入MCLK和BCLK到WM8960芯片,可以计算出 MCLK = 48KHz x 256 = 12.288MHz;I2S字长采用16比特,可以得到 BCLK = 48KHz x 2 x16 = 1.536MHz。
    2、PL逻辑设计:需要实现一个I2S外设,使能后不断地从FIFO内取出音频数据送到I2S总线上,另外需要一个FIFO接收从PS侧送到PL侧的音频数据,PS和PL通信这里我们采用GPIO方式,方便提供FIFO控制和状态信息到PS侧进行流控。
    3、参考之前的分享(如:领航者ZYNQ开发板试用3:PS I2C外设读写RTC模块)新建一个vivado工程,命名为AudioPlay,这里需要配置ZYNQ IP增加I2C和GPIO EMIO外设,使用34个EMIO脚(32位为写音频数据,两位为控制信号),如下图示:
    703.jpg
    在配置界面点左侧Clock Configuration, 使能PL Fabric Clocks的第一路和第二路时钟,频率分别为100MHz和12.288MHz,如下图示:
    704.jpg
    另外还需要增加一个SD0外设用来可以从SD启动,可以参考我上一篇分享:领航者ZYNQ开发板试用6:Cortex-A9双核通信实验,最后按OK完成配置。然后在Source窗口中右键点击 Block Design设计文件system.bd 重新执行Generate Output Products和Create HDL Wrapper...。
    4、在Vavido工程界面点左侧IP Catalog,在出现的IP Catalog界面的Search栏输入FIFO后回车,选中FIFO Generator双击后点Customize IP按下图进行FIFO配置完后按OK:
    705.jpg
    706.jpg
    707.jpg
    5、修改工程的顶层文件,需要增加I2S逻辑和调用FIFO模块与PS通信的代码后,并要添加约束文件按原理图指定正确的I2C和I2S的脚位,然后点左侧的Generate Bitstream编译PL部分产生比特流文件,再在菜单栏中 选择 File > Export > Export hardware,在弹出的对话框中要勾选Include bitstream,然后点击 OK”按钮。硬件导出完成后,在菜单栏选择 File > Launch SDK,启动 SDK开发环境。
    6、软件设计:使用SDK自带的I2C和GPIO驱动,音频数据放在一个数组内固化在程序中,基本上是从wave格式(扩展名为*.wav)的文件中直接提取数据块的数据来播放,由于我们没有使用文件系统,需要用外部工具把音频数据转为数组包括在程序中; WM8960的I2C器件地址固定为0x1A,寄存器长度为7位,数据长度为9位,按器件地址+R/W+寄存器地址+寄存器数据顺序组成3字节在总线上传输。软件主要功能如下:
    a.初始化I2C总线,通过I2C接口给wm8960下发配置命令。
    b,使用PL的I2S外设,往FIFO内填充音频数据,如判断FIFO满时,则延时后等待FIFO再次非满时继续填充。PL逻辑自动取音频数据通过I2S总线送给wm8960,从而wm8960通过解码播放出声音。具体操作和测试结果如下视频所示:

    实际效果来看,外放喇叭的效果不是很好,提供一个SD卡启动的文件,大家可以下到开发板上亲自听听效果。
    至次,已经按试用计划完成所有实验和分享,期间因为疫情影响进度稍有延迟在后期也努力补上了,之前的评测链接如下,有兴趣者阅读,有问题联系交流,谢谢!
    领航者ZYNQ开发板试用1:开箱及硬件赏析
    领航者ZYNQ开发板试用2:XADC模块测试温度和电压
    领航者ZYNQ开发板试用3:PSI2C外设读写RTC模块
    领航者ZYNQ开发板试用4HDMI显示图片
    领航者ZYNQ开发板试用5:测试千兆以太网
    领航者ZYNQ开发板试用6:Cortex-A9双核通信实验

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-8-6 16:18
  • 签到天数: 72 天

    连续签到: 1 天

    [LV.6]常住居民II

     楼主| 发表于 2020-3-2 09:26:36 | 显示全部楼层
    把附件解压出的BOOT.bin文件放在
    一个SD卡的根目录,用SD方式启动开发板就亲自听效果了!



    AudioPlay.rar

    499.94 KB, 下载次数: 21

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2020-4-20 09:48:46 | 显示全部楼层
    请问可不可以提供一下源代码?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2020-4-20 09:48:33 | 显示全部楼层
    请问有没有zynq播放音乐的源代码啊?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-8-6 16:18
  • 签到天数: 72 天

    连续签到: 1 天

    [LV.6]常住居民II

     楼主| 发表于 2020-4-29 09:56:36 | 显示全部楼层
    上传工程给有需要的童鞋参考,分两卷压缩,一起下来解压。



    AudioPlay.part1.rar

    16 MB, 下载次数: 47

    售价: 3 与非币  [记录]

    AudioPlay.part1.rar

    AudioPlay.part2.rar

    14.48 MB, 下载次数: 33

    售价: 3 与非币  [记录]

    AudioPlay.part2.rar

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-2 10:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-11-2 10:13:50 | 显示全部楼层
    不错,学习一下,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-6-27 21:57
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2024-6-27 22:02:03 | 显示全部楼层
    工程不全呀,只有一个简单的BD,没有音频部分
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 00:58 , Processed in 0.195971 second(s), 29 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.