RT-Thread SDIO+Fatfs, Helix MP3解码I2S输出 收到板子有几个星期了,研究了一下用这个板子来播放MP3.水平有限,所以花了一些时间。 RT-Thread Studio已经是支持了GEEHY的407系列,所以可以直接在RT-Thread Studio中建立工程: 等建好模板工程后,先把板子上的灯亮起来,顺便测试一下编译,GEEHY LINK的下载和调试。 还好一切顺利,板子上的LED顺利闪动起来了。可以进行下一步了。 增加SDIO驱动,我没有使用Studio内的SDIO驱动包,从GEEHY SDK的例程里找了个SDIO的驱动文件拷进来的.bsp_sdio.c和bsp_sdio.h,放进驱动里。 这两个文件里已经完成了对SDIO的初始化,中断处理和块读写等操作函数,可以满足移值Fatfs的需要了。 这两个文件中,还定义有硬件GPIO引脚接口,按照定义,把GPIO连接到SD卡模块上。
接上SD卡模块后: 因为GEEHY LINK还没有复合CDC设备,不能够与目标芯片的串口通信,所以还准备了一个USB转串口芯片连接到UART2 引脚 。这样,硬件准备就绪了。 增加FATFS,也没有使用STUDIO的ELM FATFS,拷了一个FATFS源文件到项目下面来。 完善下diskio.c,与bsp_sdio.c连接起来。
完成后,就可以用f_mount函数测试一下了: 下一步,增加HELIX MP3解码包,这个可以直接用STUDIO自带的软件包,在RT-Thread Settings里面填加进去: 加入HELIX软件包后,编译发现有四个警告。四个变量定义了未使用。 接下来就是读取SD卡的MP3文件解码了, 这个步骤参考了原子哥的例程来做。
先建一个MP3播放的线程,并加入APP自启动列表中。 在线程中打开根目录,扫描根目录下的MP3文件,并记录文件名到列表中。 在循环中,按顺序播放MP3. 播放时先初始化I2S
播放时MP3数据不断放入I2S的BUFFER. 这些完成以后,测试一下。能够工作了,但是解码播放过程中,经常出现数据错误,或者播放到一半就出错返回。在网上查了一下,最终把SDIO的数据线宽改成单线的就解决了。 播放时I2S波形。因为手头上没有I2S的音频模块,所以还不能测试下确实是否能放出声音来。 总结,终于磕磕绊绊的做成了,基本达到了播放SD MP3文件,I2S输出的目的。但是还是有一些细节没顾上,比如播放按键控制等。后面有空再慢慢来完善。附件把Studio的工程附上,水平有限,仅供参考。
|
非常棒