完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,公司项目采用的是FPGA+VS1003+flash方案,flash用于保存音频文件。目前播放遇到问题了,描述如下:
首先我确认了以下几点: 1.首先是硬件方面,目前已经完成了寄存器配置的测试,使用SCI通道写入数据再读出已验证读写正确。VS1003的SDI的正弦测试也通过了,可以通过SDI发送命令开关正弦波。 2.将音频文件通过flash烧录器烧写进flash中,通过烧录器读回数据,可以确认写入的文件是正确的。 3.直接将数据从flash中读出通过SDI总线送入VS1003中,通过FPGA自带的逻辑分析仪和示波器打过,数据也是和音频文件一样的。 但是 。。。。 耳机没有任何声音,VS1003的left、right端用示波器也无法打出任何数据。传送SDI的时候在每个字节传送完成后即检测一次DREQ的状态,为低时停止发送,为高时候发下一字节,直到将整个音频文件发送完毕。 目前SDI使用的时钟是5MHz,SCI_MODE配置为0x8000,CLKF寄存器配置为0x9800,声音大小VOL寄存器写的是0x2020。MP3/MIDI/WAV格式的文件都试过。 现在实在没招了。上来求教各位,谢谢了! |
|
相关推荐
30个回答
|
|
终于成功了,感觉还是时序的问题。目前是4字节就把XDCS拉高一次,而且DREQ变化以后只将当前字节发完并且拉高XDCS,而不是原来的:32字节发送一次XDCS拉高一次,DREQ在32字节发送之中拉低以后继续发完32字节在把XDCS拉高。
目前外部SDI速率为2Mbit,但VS1003内部时钟,1倍频率解码还是不行,播放很慢,将速率配到了2倍,速度就好多了。 听到的声音没有顿卡,很清楚。 谢谢大神的指导。 |
|
|
|
楼主是要代码么?
|
|
|
|
不是,是来请教问题了,刚刚在编辑原帖,请您再看看问题描述 谢谢
|
|
|
|
诚心求教啊,,,比较纳闷,不知道是时序问题还是什么问题。SDI正弦测试时通过了的,但是往芯片灌数据就没有反应。如果先把耳机端断开,left/right端能出数据吗?(是否因为耳机端的阻抗匹配不正确导致示波器打不出数据来,有这个担心)
|
|
|
|
|
|
|
|
我的意思是现在在left/right端打到没有电平变化,如果是有声音模拟信号出来的话,至少应该是有一定波形。目前打到的信号是一个持续的1V多的电平,。您说先把1003调通,应该注意一些什么问题呢?比如在SDI传输过程中DREQ拉低以后,XDCS需不需要拉高?等等类似的问题,谢谢!
|
|
|
|
|
|
|
|
我现在就是对时序还不太明白,datasheet上有说需要每32字节以后检测DREQ状态,我现在有做这个检测(目前改为了1字节一检测,之前是32字节检测一次,如截图所示),我在检测到了DREQ拉低以后将DCS拉高,并且停止送数据。
从FPGA内部的逻辑分析仪抓到的图像如截图,感觉上没有什么问题。我现在寄存器的配置只配置了CLKF 值为0x9800,声音寄存器VOL,值为0x2020,其他的都未配置。 |
|
|
|
The DREQ pin/signal is used to signal if VS1003’s FIFO is capable of receiving data. If DREQ
is high, VS1003 can take at least 32 bytes of SDI data or one SCI command. When these criteria are not met, DREQ is turned low, and the sender should stop transferring new data. DREQ是VS1003的输出信号。如果输出高电平,表示VS1003可以接收至少32字节数据或命令,否则就会拉低,主控方应当停止发送。 所以,只要检测到DREQ为高,就可以放心大胆地发送32字节,期间不必考虑DREQ的状态,即使为低也无所谓; 随后,要等DREQ再次变高,重复以上过程。 |
|
|
|
好的,非常感谢,那么当32个字节后检测到dreq拉低了,停止从SDI上发送数据以外,XDCS、SCLK这些信号需要怎样操作呢?我看datasheet没有说得很清楚。另外在网上搜了一些帖子 ,说初始化完毕以后要在SPI上做4次写零的操作,不知这个是否有必要?如果是"写"0,那难道是使用写命令0x02后面跟数据还是说直接灌4字节0数据在SPI上就可以了呢?谢谢。
|
|
|
|
1、道理上,只要不写内容,XDCS、XCS高低都无所谓。但一般还是拉高吧,避免误操作,更可靠。
如果XDCS、XCS之一为低,SCLK的变化就是写入内容的过程;如果为高,SCLK怎么样都不会翻天。 稳妥起见,在空闲状态应当把XDCS和XCS都拉高,而SCLK都拉低。 2、不了解四个0字节的事。如果手册没有要求,估计是为了延时,等待1003到位。 查下0对应什么命令,或者什么数据,就可以知道吧。一般来说,作为命令或者数据,0都会表示空操作。 |
|
|
|
谢谢!我下午先把代码改一下试试,看情况有没有改善。再来给您答复。
|
|
|
|
我把DCS拉高拉低都试了试,数据从SDI打出去了以后,芯片模拟端依然没有反应。。。。
至于4字节的0,我试了一试反而把0地址寄存器的值全置零了,貌似发现芯片的一个bug? |
|
|
|
|
|
|
|
好的,我再试一试。刚刚也排出了时钟问题。现在配置寄存器的时钟大概在1MHZ左右,SDI打音频数据大概在5MHZ左右。vs1003外部时钟是12.288MHZ,默认启动倍频参数是和外部时钟一样,在配置了CLKF以后内部倍频3倍36MHZ左右,那么按照datasheet来说(CLKIN/7)这两个时钟也应该没有问题。
|
|
|
|
测量的时候没啥反应。。。
另外请教一下MP3的发送问题,比如我用UE32打开任意MP3文件,文件从零地址开始都是以"0x49 0x44 0x33 0x03..."开始,那么我发送的话是以''0100 1001 0100 0100 0011 0011 0000 0011...''顺序形式往下发对吧?不需要做什么byteswap之类的操作吧?目前VS1003是采用的MSB first的形式。 |
|
|
|
1003的DA输出是一个物理过程,MP3数据解包是另一个过程,
在都不确定好坏的情况下,应当把它们断开来调试。 一下搞定全部过程是不现实的。 可否用FPGA按1003的格式生成一个波形? 哪怕阶梯波也行,能用示波器测到的。 这样子先搞好1003,再往前走。 |
|
|
|
VS1003有一个feeding PCM的功能,需要加上WAV文件的header。只有试试这个。
|
|
|
|
终于出声音了!不过播放MP3的时候速度很快,像快进,还不知道为何,,,,
目前是做了以下几个调整: 调整了复位、寄存器置位以后的延时,将SCLK下降沿作为采样时间点,特别是仿造例程每32个字节以后将DCS拉高,并且检测DREQ。 节后继续做测试。 |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 08:53 , Processed in 1.175898 second(s), Total 109, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号