社区导航

 
查看: 3588|回复: 5

[原创] 双DMA实现I2S播放SD卡中音乐

[复制链接]

27

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-5-12 17:33:51 | 显示全部楼层 |阅读模式
 本文讨论SD卡作为存储器,I2S播放音频的解决方案

SD卡数据的读取虽然很快,即使在最理想的状态下,播放一秒钟的数据,需要大约%4的时间消耗

8(bit)x2(ch)x2(byte)x48000(hz)/36(MHz)=0.042s

使用单流程模式,这部分损耗是无法忽略的,只能考虑使用DMA模式读取SD卡数据
如果考虑主程序需要承担诸如音量控制,数据监察的功能,I2S也使用DMA模式播放音频

音乐数据的制作
为了简化流程,音乐数据选择完全无编码PCM音频数据格式,将数据直接送往I2S即可播放
I2S设置为16位双声道,每个采样为4字节
可以使用ffmpeg转换mp3或wav及其它音频格式生成纯PCM格式

ffmpeg -i input.mp3 -acodec pcm_s16le -ar 48000 -ac 2 -f s16le output.pcm

在Linux环境中可以使用cat或dd命令写入SD读卡器
文件可以顺序灌入,最后写入'MUSICEND'标识使主程序可实现循环播放控制
结束标识要写入两次为防止跨页

#!/bin/sh

files=""
muend="MUSICEND"
echo -ne "$muend$muend" > music_end

for fff in pcm/*pcm; do
        files="$files $fff"
done
cat $files music_end | dd of=/dev/sde

run_simple_i2s_sd.zip (18.2 KB, 下载次数: 66, 售价: 1 枚芯币)
http://sites.google.com/site/btvnlue/stm32


回复

使用道具 举报

1255

TA的帖子

18

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2012-5-12 19:17:06 | 显示全部楼层
好帖!!真需要!


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-5-15 14:20:39 | 显示全部楼层
不错啊真好


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-5-31 08:29:16 | 显示全部楼层

各位同学们,大家好!

为了方便大家的设计,特推荐一款SD卡串口读写模块。
该模块可以通过三线串口,就可以在SD卡上实现文件的创建和读写,很好用。
具体使用方法和说明,可以到以下链接查看。

http://115.com/file/bec5yoeh#串口读写SD卡模块说明书.pdf
http://115.com/file/an037sl3#串口读写SD卡模块视频讲解.rar
本人硬件出生。如有技术问题,欢迎交流。



回复

使用道具 举报

5

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-7-13 08:27:13 | 显示全部楼层
感谢楼主分享


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-5 15:41:45 | 显示全部楼层
感想楼主,学习一下,


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-19 18:10 , Processed in 0.213209 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表