微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 基于FPGA NIOS处理器的数码音乐相册

基于FPGA NIOS处理器的数码音乐相册

时间:10-02 整理:3721RD 点击:

这个实验可以充分学习FPGA  以及SOPC的利用,做成一个具有很复杂程度的作品。学习到很多平时不能接触的知识。
   这个实验要用到的硬件有:
SD卡一张
DE2开发板
320*240的TFT液晶:SSD1289


一个无源喇叭
本实验难度比较大,主要涉及了很多知识!而且都不是平时我们接触过的知识。
本实验主要包含了几个大的部分:
1.     音乐的播放驱动
2.     SSD1289  TFT液晶驱动
3.     SD卡读取驱动
4.     FAT32文件系统的初步认识,实现根目录下的读取
5.     整个FPGA里面NIOS模块和外部模块的链接.
6.     WAV文件的制作,以及处理成不同采样率,不同位数的音频数据
7.     BMP图片的制作,以及在不同处理器架构下的处理,在SD卡存储方式和取模出来的数据的不同
现在分别介绍不同模块的实现问题:
一.     首先最开始要实现的是音频数据的播放
音频具有很多编码,WAV,MP3等等,本实验有两个方法
现音频的播放:基于WM8731音频芯片的播放,以及直接用FPGA写出PWM控制器来播放。
         首先介绍的是音频知识
         我们平时接触到的最多的音频既是MP3音频,它是一种高度压缩的音频数据,因此播放它需要一块专门的集成高速DSP处理器音频芯片解码。比如VS1003B芯片,是最常用的音频编解码芯片,由于价格昂贵,所以我没有使用这种芯片,转而使用WAV文件来播放。WAV是一种原始的音频数据文件,相当于电压值的AD数据。
转换WAV文件又要使用到音频编译的专门软件  COOLEDIT软件
这款软件能实现音频文件的各种转换,可以转换成WAV  各种采样率。
         现在介绍的是WM831音频芯片的使用以及播放:
WM8731是一款具有高音频带宽的芯片,可以播放速率从8KHZ到96KHZ的WAV文件,由于它内部没有集成高速DSP解码处理器核,所以只能播放的是WAV文件。WM8731是一款高速的AD转换器。支持16位音频到32位音频的播放,它的配置采用的是I2C配置方式。在我这个项目中我实现的配置是,从模式16位宽。32KHZ采样率。这里不得不说道的是WAV文件16位数据和8位数据有很大区别。16位文件包含了正负音频电压值,而8位音频数据只有正电压。在最开始一直没理解到,所以犯了很多错误。
WM8731也是一款比较难操作的音频芯片,在具体实现的时候我用了两个高速缓存来实现数据的传送,数据是由NIOS在SD卡中以FAT32格式化下,以根目录的存取方式取出来缓冲,在传送,以WM8731转换完一个音频数据时产生的高电平来实现外部中断送值。具体操作这里就不做详细介绍了。
第二种方法,就是直接用VERLIOG代码生成一个PWM控制器,从NIOS中接收数据来实现PWM播放音乐.这种方法比较新颖。
由于,耳机,以及无源喇叭是惯性器件,PWM波作用在其上就等同相等的电压值作用在上面,从而实现类似AD的播放。这种用VERLIOG写出的PWM播放机的缺点就是在FPGA的管脚上不能出现负电压,所以只能播放的是8位数据的音频电压值。,我的PWM播放思想是,严格按照采样率来送电压值,送值时间由NIOS内部定时器来实现。PWM控制模块只负责把数据转换成PWM波就可以了。
这也是一个比较难理解的过程,需要细细揣摩!
            第三种方法,直接使用DA芯片转换出电压值,从而播放出音乐。最开始我选择了DAC0832电流型DA芯片来播放音乐,结果失败了,后来仔细研究才知道,原来DAC0832类型很多,,增强,快速,普通等等。我使用的是普通的0832芯片,电压转换时间是150多US,联最基本的8KHZ的采样率音频速度都不能达到,所以这个方案不能实施。但是可以换增强型快速的DAC0832芯片来做,转换时间快到只需要10多US就可以转换完。(这个理论上能成功,但是我没有芯片所以没实施。)DAC0832最大的缺点是电流型,所以还要通过运放转换成电压。最好的方法是选用TLC5615电压型DA芯片,转换速度也快,SPI接口很好操作。
二.     SD卡的驱动
DE2上有SD卡接口,由于NIOS不带硬件驱动SD卡,所以
选取的是IO口模拟SPI来对SD卡操作。NIOS组件里面也带有硬件SPI发送器,由于现在这个IP技术不成熟,一次只能传送8位的数据,因此,不满足SD卡SPI驱动要求,所以我选用的是IO口模拟SPI操作SD卡,在模拟的时候,我用程序写的是高速的模拟SPI,不用循环,比一般采用循环模拟SPI快了一倍,因此为我后面大量BMP图片数据,以及WAV音频数据读取提供了有利的基础。
           SD卡的驱动也很复杂,要严格按照SD卡的时序来给它送值,而且还有很多补偿时钟这些,但是必须把SD卡底层操作函数百分百写对,才能在后续的FAT32文件系统下的读取提供有利的支持。
三.     FAT32文件系统的认识
FAT32文件系统时现在主流电脑里面使用的最多的文件系统,
我的BMP图片,WAV音频数据都是在电脑上以FAT32文件系统架构下拷贝进去的,因此,这个实验必须了解文件系统。
           FAT32文件系统主要由三个大区组成:MBR区(很多SD卡没有MBR区,只要0扇区第一个字节不是EB打头就不存在MBR区)。
第二个区是BPB区。内部包含了整个FAT32文件系统的信息,包括了数据区的开始区域,以及FAT表的扇区。
           第三个区域就是数据区,内部包含了各个文件的真实数据。
数据的链表在FAT表里面。
           由于实现FAT32文件系统非常之复杂,因此,我实现的FAT32文件系统只能简单的读取根目录下的文件信息,所以,BMP图片以及WAV音频只能存在根目录下,不能建文件夹!
五,TFT液晶的认识
           TFT液晶是一种很常用的廉价的液晶,TFT液晶分为高,中,低很多档次。我使用的TFT液晶是一款支持6万色的的液晶模块。
3.2寸320*240 的SSD1289,最开始使用的是ILI9230(2.8寸TFT液晶)。
           TFT液晶和传统的点阵型12864,1602等有很大的不同。操作方式也很不同。SSD1289其实是液晶的驱动芯片。只需找到SSD1289的芯片手册,即可实现液晶驱动(难度其实非常大,SSD1289主控芯片内部有256个寄存器,其中常用需要初始化配置的寄存器多大40多个)。由于以前有过写TFT液晶的经验,所以操作起来还是比较快。只要严格的按照控制芯片的手册时序来写驱动,操作起来也不是非常困难。
           SSD1289支持的是RGB色的565色的BMP图片。因此,需要在电脑上转换出BMP图片。由于BMP图片一张16色240*320的图片都多达150K,相册图片又很大,所以不可能在NIOS内部用数组形式存放。必须在SD卡中存放。因此,我们又必须认识BMP图片在SD卡中的存储格式。
           SSD1289TFT液晶上显示汉字时候要使用到专用LCD取模软件,取出相应的字模到LCD上显示,因为液晶相册要使用到很多文字提示信息,所以要用液晶显示汉字。
六.     BMP图片的制作
BMP图片是一种高真彩色的位图,没有经过压缩的处理,因此数据量还是比较大。数据位宽代表的是色彩色RGB的数据位,RGB数据位越宽,则色彩越逼真。从1位到32位各不相同。32位是最高色彩的真彩色,含有8位的透明色。24位的RGB色。
在这里不得不说我在制作过程中遇到的困难。16位色位图的565模式和555模式,BMP图片在SD卡中储存是以555模式储存。而且是以一张图片的左下角开始扫描储存,这是SD卡储存方式,而我们取模出来的数据时565数据,而且是从左上角开始储存,最开始我是以取模方式做的图片显示,所以直接移植到SD卡方式显示会出现很大的问题,最后我才发现了上述问题。
七.制作适合TFT液晶使用的BMP图片
           制作BMP图片会使用到I mage2LCD软件,美图秀秀软件,以及GIF动画分离软件。
           首先,美图秀秀软件用来裁剪你选中的图片到你所需要的尺寸。因为一般电脑上的图片远远大于240*320的大小。
           做成了240*320的图片后,还有一个很重要的问题要考虑,那就是图片的位数,电脑上的图片都是24位真彩色的图片,所以,如果要使用软件解码也能实现,但是24位数据量太大,所以采用了IMAGE软件来转换成16色的BMP图片然后存储到SD卡里面。
           GIF动画分离软件
           是一款专门用于分离动画,以及AVI视频的软件,可以把这些视频信息分离成一帧一帧的图片,然后再按照上面的步凑做出BMP图片,放到SD卡里面高速读取显示只要满足播放时间间隔就可以做出动画。这个是一个附加功能!非常好玩!
八,整个系统的构建。
           首先在FPGA里面新建出符合本实验要求的工程,在SOPC内部添加出各种接口以及IO口。然后,格式化FAT32文件系统,接下来开始读取SD卡内部的WAV以及BMP信息,我测算过由于我的读取速度在8MS就能读取完一个扇区的数据量,因此边读边播放显示时间要求比较严,因此我采用的是先把WAV文件全部读取出来存放好,DE2上板载SDRAM达到8M  FLASH达到4M因此能容纳8首左右的8KHZ采样率8位的音频。而BMP图片采取边读SD卡边播放的方式,从而实现了整个音乐相册的实验!
最后轻松下,测试一下直接发送图片。还是很方便




求代码,求工程

3qqqqqqq

收下了,有时间自己试着做下

哎,这个好啊,找了好久关于这个的

耶?怎么不贴代码工程上来呢?好坑

小编,真高手也。厉害!

谢谢了啊O(∩_∩)O哈哈~

留名

留名 求代码 求工程  求QQ  求讨论  281646680

能给一下WM8731的中文资料吗?谢谢!因为用到这个,可是都是英文的,看不懂,所以挺纠结的!邮箱:656130367qq.com

谢谢了

顶起

谢谢啦··哇哈哈··

求代码 求工程 话说。

楼哥   能给个 详细的资料吗      跪求

有没有详细的资料啊小编

怎么只有说明呢

小编确实是个人才,要是我的话,肯定用ARM搞……

求代码,谢谢!正需要做个FAT32的

好东西,必须好好看看


这个实验可以充分学习FPGA  以及SOPC的利用,做成一个具有很复杂程度的作品。学习到很多平时不能接触的知识。
   这个实验要用到的硬件有:
SD卡一张
DE2开发板
320*240的TFT液晶:SSD1289


一个无源喇叭
本实验难度比较大,主要涉及了很多知识!而且都不是平时我们接触过的知识。
本实验主要包含了几个大的部分:
1.     音乐的播放驱动
2.     SSD1289  TFT液晶驱动
3.     SD卡读取驱动
4.     FAT32文件系统的初步认识,实现根目录下的读取
5.     整个FPGA里面NIOS模块和外部模块的链接.
6.     WAV文件的制作,以及处理成不同采样率,不同位数的音频数据
7.     BMP图片的制作,以及在不同处理器架构下的处理,在SD卡存储方式和取模出来的数据的不同
现在分别介绍不同模块的实现问题:
一.     首先最开始要实现的是音频数据的播放
音频具有很多编码,WAV,MP3等等,本实验有两个方法
现音频的播放:基于WM8731音频芯片的播放,以及直接用FPGA写出PWM控制器来播放。
         首先介绍的是音频知识
         我们平时接触到的最多的音频既是MP3音频,它是一种高度压缩的音频数据,因此播放它需要一块专门的集成高速DSP处理器音频芯片解码。比如VS1003B芯片,是最常用的音频编解码芯片,由于价格昂贵,所以我没有使用这种芯片,转而使用WAV文件来播放。WAV是一种原始的音频数据文件,相当于电压值的AD数据。
转换WAV文件又要使用到音频编译的专门软件  COOLEDIT软件
这款软件能实现音频文件的各种转换,可以转换成WAV  各种采样率。
         现在介绍的是WM831音频芯片的使用以及播放:
WM8731是一款具有高音频带宽的芯片,可以播放速率从8KHZ到96KHZ的WAV文件,由于它内部没有集成高速DSP解码处理器核,所以只能播放的是WAV文件。WM8731是一款高速的AD转换器。支持16位音频到32位音频的播放,它的配置采用的是I2C配置方式。在我这个项目中我实现的配置是,从模式16位宽。32KHZ采样率。这里不得不说道的是WAV文件16位数据和8位数据有很大区别。16位文件包含了正负音频电压值,而8位音频数据只有正电压。在最开始一直没理解到,所以犯了很多错误。
WM8731也是一款比较难操作的音频芯片,在具体实现的时候我用了两个高速缓存来实现数据的传送,数据是由NIOS在SD卡中以FAT32格式化下,以根目录的存取方式取出来缓冲,在传送,以WM8731转换完一个音频数据时产生的高电平来实现外部中断送值。具体操作这里就不做详细介绍了。
第二种方法,就是直接用VERLIOG代码生成一个PWM控制器,从NIOS中接收数据来实现PWM播放音乐.这种方法比较新颖。
由于,耳机,以及无源喇叭是惯性器件,PWM波作用在其上就等同相等的电压值作用在上面,从而实现类似AD的播放。这种用VERLIOG写出的PWM播放机的缺点就是在FPGA的管脚上不能出现负电压,所以只能播放的是8位数据的音频电压值。,我的PWM播放思想是,严格按照采样率来送电压值,送值时间由NIOS内部定时器来实现。PWM控制模块只负责把数据转换成PWM波就可以了。
这也是一个比较难理解的过程,需要细细揣摩!
            第三种方法,直接使用DA芯片转换出电压值,从而播放出音乐。最开始我选择了DAC0832电流型DA芯片来播放音乐,结果失败了,后来仔细研究才知道,原来DAC0832类型很多,,增强,快速,普通等等。我使用的是普通的0832芯片,电压转换时间是150多US,联最基本的8KHZ的采样率音频速度都不能达到,所以这个方案不能实施。但是可以换增强型快速的DAC0832芯片来做,转换时间快到只需要10多US就可以转换完。(这个理论上能成功,但是我没有芯片所以没实施。)DAC0832最大的缺点是电流型,所以还要通过运放转换成电压。最好的方法是选用TLC5615电压型DA芯片,转换速度也快,SPI接口很好操作。
二.     SD卡的驱动
DE2上有SD卡接口,由于NIOS不带硬件驱动SD卡,所以
选取的是IO口模拟SPI来对SD卡操作。NIOS组件里面也带有硬件SPI发送器,由于现在这个IP技术不成熟,一次只能传送8位的数据,因此,不满足SD卡SPI驱动要求,所以我选用的是IO口模拟SPI操作SD卡,在模拟的时候,我用程序写的是高速的模拟SPI,不用循环,比一般采用循环模拟SPI快了一倍,因此为我后面大量BMP图片数据,以及WAV音频数据读取提供了有利的基础。
           SD卡的驱动也很复杂,要严格按照SD卡的时序来给它送值,而且还有很多补偿时钟这些,但是必须把SD卡底层操作函数百分百写对,才能在后续的FAT32文件系统下的读取提供有利的支持。
三.     FAT32文件系统的认识
FAT32文件系统时现在主流电脑里面使用的最多的文件系统,
我的BMP图片,WAV音频数据都是在电脑上以FAT32文件系统架构下拷贝进去的,因此,这个实验必须了解文件系统。
           FAT32文件系统主要由三个大区组成:MBR区(很多SD卡没有MBR区,只要0扇区第一个字节不是EB打头就不存在MBR区)。
第二个区是BPB区。内部包含了整个FAT32文件系统的信息,包括了数据区的开始区域,以及FAT表的扇区。
           第三个区域就是数据区,内部包含了各个文件的真实数据。
数据的链表在FAT表里面。
           由于实现FAT32文件系统非常之复杂,因此,我实现的FAT32文件系统只能简单的读取根目录下的文件信息,所以,BMP图片以及WAV音频只能存在根目录下,不能建文件夹!
五,TFT液晶的认识
           TFT液晶是一种很常用的廉价的液晶,TFT液晶分为高,中,低很多档次。我使用的TFT液晶是一款支持6万色的的液晶模块。
3.2寸320*240 的SSD1289,最开始使用的是ILI9230(2.8寸TFT液晶)。
           TFT液晶和传统的点阵型12864,1602等有很大的不同。操作方式也很不同。SSD1289其实是液晶的驱动芯片。只需找到SSD1289的芯片手册,即可实现液晶驱动(难度其实非常大,SSD1289主控芯片内部有256个寄存器,其中常用需要初始化配置的寄存器多大40多个)。由于以前有过写TFT液晶的经验,所以操作起来还是比较快。只要严格的按照控制芯片的手册时序来写驱动,操作起来也不是非常困难。
           SSD1289支持的是RGB色的565色的BMP图片。因此,需要在电脑上转换出BMP图片。由于BMP图片一张16色240*320的图片都多达150K,相册图片又很大,所以不可能在NIOS内部用数组形式存放。必须在SD卡中存放。因此,我们又必须认识BMP图片在SD卡中的存储格式。
           SSD1289TFT液晶上显示汉字时候要使用到专用LCD取模软件,取出相应的字模到LCD上显示,因为液晶相册要使用到很多文字提示信息,所以要用液晶显示汉字。
六.     BMP图片的制作
BMP图片是一种高真彩色的位图,没有经过压缩的处理,因此数据量还是比较大。数据位宽代表的是色彩色RGB的数据位,RGB数据位越宽,则色彩越逼真。从1位到32位各不相同。32位是最高色彩的真彩色,含有8位的透明色。24位的RGB色。
在这里不得不说我在制作过程中遇到的困难。16位色位图的565模式和555模式,BMP图片在SD卡中储存是以555模式储存。而且是以一张图片的左下角开始扫描储存,这是SD卡储存方式,而我们取模出来的数据时565数据,而且是从左上角开始储存,最开始我是以取模方式做的图片显示,所以直接移植到SD卡方式显示会出现很大的问题,最后我才发现了上述问题。
七.制作适合TFT液晶使用的BMP图片
           制作BMP图片会使用到I mage2LCD软件,美图秀秀软件,以及GIF动画分离软件。
           首先,美图秀秀软件用来裁剪你选中的图片到你所需要的尺寸。因为一般电脑上的图片远远大于240*320的大小。
           做成了240*320的图片后,还有一个很重要的问题要考虑,那就是图片的位数,电脑上的图片都是24位真彩色的图片,所以,如果要使用软件解码也能实现,但是24位数据量太大,所以采用了IMAGE软件来转换成16色的BMP图片然后存储到SD卡里面。
           GIF动画分离软件
           是一款专门用于分离动画,以及AVI视频的软件,可以把这些视频信息分离成一帧一帧的图片,然后再按照上面的步凑做出BMP图片,放到SD卡里面高速读取显示只要满足播放时间间隔就可以做出动画。这个是一个附加功能!非常好玩!
八,整个系统的构建。
           首先在FPGA里面新建出符合本实验要求的工程,在SOPC内部添加出各种接口以及IO口。然后,格式化FAT32文件系统,接下来开始读取SD卡内部的WAV以及BMP信息,我测算过由于我的读取速度在8MS就能读取完一个扇区的数据量,因此边读边播放显示时间要求比较严,因此我采用的是先把WAV文件全部读取出来存放好,DE2上板载SDRAM达到8M  FLASH达到4M因此能容纳8首左右的8KHZ采样率8位的音频。而BMP图片采取边读SD卡边播放的方式,从而实现了整个音乐相册的实验!
最后轻松下,测试一下直接发送图片。还是很方便




求代码,求工程

3qqqqqqq

收下了,有时间自己试着做下

哎,这个好啊,找了好久关于这个的

耶?怎么不贴代码工程上来呢?好坑

小编,真高手也。厉害!

谢谢了啊O(∩_∩)O哈哈~

留名

留名 求代码 求工程  求QQ  求讨论  281646680

能给一下WM8731的中文资料吗?谢谢!因为用到这个,可是都是英文的,看不懂,所以挺纠结的!邮箱:656130367qq.com

谢谢了

顶起

谢谢啦··哇哈哈··

求代码 求工程 话说。

楼哥   能给个 详细的资料吗      跪求

有没有详细的资料啊小编

怎么只有说明呢

小编确实是个人才,要是我的话,肯定用ARM搞……

求代码,谢谢!正需要做个FAT32的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top