Standard SDK: I2S – Ameba I2S Audio Demo

Ameba I2S 简介

RTL8195AM和RTL8711AM分别拥有2路和1路I2S界面,支持master和slave模式。
I2S特征:
1. 支持采样频率:8/16/24/32/48/96/44.1/88.2 KHz
2. 支持采样位宽:16/24 bits
3. 集成DMA引擎
4. 支持TX/RX双向传输
5. 支持master/slave模式

I2S Audio demo

此demo使用Ameba作为I2S master,音频编解码芯片SGTL5000作为I2S slave。Ameba通过I2S将数据音频数据传送到SGTL5000,SGTL5000通过耳机输出音频信号,并设置一个音量调节旋钮,用于调节耳机音量(可选)。
此demo有两种获取数字音频数据的方式,第一种是通过数组的方式,存放在Ameba的RAM中。第二种是将音频文件存放在SD卡中,结合Ameba的文件系统和SD卡驱动,从SD卡中播放音频文件。
Demo所用音频数据都是CD品质(16bits,44.1KHz)。

材料准备

Demo平台搭建

Teensy音频扩展板,使用飞思卡尔SGTL5000 codec,支持立体声耳机输出与线路输出,同时也支持立体声线路输入以及单通道麦克风输入。
1
Teensy音频扩展板官网资料:https://www.pjrc.com/store/teensy3_audio.html

1. Ameba连接SGTL5000

2
SGTL5000扩展板通过7根信号线与Ameba相连。I2C(SDA和SCL)用来控制和调整SGTL参数。I2S用于传输音频数据,TX,RX,LRCLK(44.1KHz),BCLK(1.41MHz)和MCLK(11.29MHz), 三个时钟信号均由Ameba产生。
3

2. Ameba扩展SD卡槽 (optional)

参照下图连接SD/MMC卡槽到Ameba,可实现Ameba播放存储在SD卡上的音频文件(wav格式)。
4

3. Ameba接音量旋钮 (optional)

可选用一个线性电位计调节耳机输出音量大小,连接电位计的1端和3端(视电位计本身而定)分别至V3.3和GND,连接2端到Ameba开发板A2。Ameba通过ADC采集A2端口的电压信号,转换为音量信号,以调节codec的耳机输出音量。
5

开启Audio Example

如果使用SDK 3.4b,需要先加入patch:3.4b_patch_i2s_audio_demo(v01)
如果需要开启SD卡功能(仅限RTL8195AM),还需要加入patch:3.4b_patch_sd_storage_(v04)
在platform_opts.h中将Audio Example的宏设置成1,开启Audio example。
6

在example_audio.c中使用一下两个宏配置是否从SD中读取音频数据,以及是否开启音量调节功能,默认都是关闭,即音频数据存放在RAM中,关闭音量调节功能。

#define CONFIG_PLAY_SD_WAV		0	// 1: play wav audio file store on SD card
                                                // 0: play audio file store on memory
#define CONFIG_TUNE_VOLUME		0	// tune volume by trimmer resistor and ADC

重新build SDK,下载ram_all.bin到Ameba,插入耳机即可以听到相应的音频。
如果从RAM中获取音频数据,默认的音频文件为‘鸟叫声’,所以可以听到循环的鸟叫声。
如果选择从SD卡中播放音频文件(wav格式),需要先将wav格式的音频文件存放在SD卡中,并更名为AudioSDTest.wav。
如果已开启音量调节功能,可以左右调节电位器,可以感觉到耳机有明显的音量变化。