K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

时间:2024-05-19 09:37:55

开发板:K210 AIRV R3版 widora

开发环境:kendryte IDE 官方的

必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图

(一) 新建文件夹10my_code_tfcard_music

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

礼物 + 地球

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

实例 搜索music 选择开发版本(develop) 然后下载到刚才新建的文件夹中

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

安装依赖

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

清理 + 构建

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

我这边报错了

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

显示 未定义 ,应该是我上一节SD/TF卡章节的锅吗

 

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

用到SPI0(上一节SD卡用的就是SPI0) 于是 我们自己补充一下宏定义就行

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

重新安装一次依赖(我习惯这样) , 然后 清理 + 构建

这样就废了, 看了一下, 原来是安装依赖的锅, 不要重新安装依赖,直接清理+构建就行

环境搭建完毕 下面开始改代码

(二) 修改代码

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

TF卡的引脚 先给绑定上

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

保存以下 SD卡搞定引脚

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

紫色区域先不管, 就里面dmac_init等下要看的, 现在先看SD卡要不要改

去看看点击sdcard_test() 然后按F12跳转

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

里面就sdinit有用 点金去看看

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

这些都没用到的 可以删了, 并且我给SPI设置频率为30M,我这边测试可以跑的起, 之前跑10M的(如果不行自己降低速率)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

先一条龙看看有没有读取SD卡成功

报错了

把3个函数删掉就行, 双击进去, 删除就行

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

再一条龙走起

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

SD卡读不了 莫非速度太快了, 改回20M试试

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

确实是SPI太块了, 改20M我这边OK了 (因为之前CPU跑800M/2=400M的, 这次跑了320M/2 = 160M)

在main.c 里面的sysctl_pll_set_freq(SYSCTL_PLL0, 320000000UL); 这个函数 说明跑的160M还是320M?

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

SD卡 + fat文件系统移植没问题, 下面看看I2S音频了

 

(三)下面直接看I2S(音频协议)

线看原理图 

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

I2S_WS -> IO33

I2S_DO -> IO34

I2S_BCK-> IO35

去config ->device那边绑定一下引脚即可,记得保存

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

下面看看代码 I2S在第17章

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

看看dmac 没什么好看的 就是DMA, 在14章

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

直接用就行 里面干了啥不用管,它给我们写好了

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

main.c这个刚才测试过了 没用了 把他注释掉

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

直接看wav_test

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

看看这个初始化,看了下 应该是初始化播放器的 不用管

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

这边用到了一个DMA中断, 等下要看看里面中断执行了什么

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

i2s_init() 才是用到的I2S

i2s_init(I2S_DEVICE_0, I2S_TRANSMITTER, 0x03);

对应 IIS0, 发送模式,通道掩码是3(什么作用的 说明书没有)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

继续 

i2s_tx_channel_config(

I2S_DEVICE_0, I2S_CHANNEL_0, RESOLUTION_16_BIT, SCLK_CYCLES_32,

/*TRIGGER_LEVEL_1*/ TRIGGER_LEVEL_4, RIGHT_JUSTIFYING_MODE);

对应 I2S0,通道0,发送位数16位,时钟选择32位的(I2S配置的那个时钟),DMA深度4,右对齐

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

初始 wav音频解码器 不用管

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

开始放歌

i2s_play(I2S_DEVICE_0, DMAC_CHANNEL3, (void *)wav_file.buff_current,

wav_file.buff_current_len, wav_file.buff_current_len, 16, 2);

对应 I2S0,解码器用的通道3(有个DMA中断的等下要看),存放的歌缓存,

缓存的长度,单次发送帧数(应该是256*1024),单次采样位宽16,2声道

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

开始解码,完之后就跳出死循环

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

看看DMA中断

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

很明显,是通过DMA来判断是不是播放完还是继续播放这些的 用的状态机形式

我的SD卡只有2首歌, 试试beyong的歌, 不知道mp3能不能用wav播放

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

一条龙试试

 

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

播放是沙沙声,应该是播不了,我去搜搜wav格式的歌

printf("result:%d\n", status);

if(BG_READ_WORD(index) != RIFF_ID)

return UNVALID_RIFF_ID;

返回了结果3,为无效ID,应该就是mp3不行了

我在U盘搞了个qiao.wav 试试

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

再一条龙试试

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

成功了 接上喇叭也能听到声音了 我这边用的8欧 2W的喇叭 非常小声

widola的喇叭接在这里

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

功放用的NS4168

K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)果然带不起我的8欧2W

建议你们用4欧2W及其以下的

 

代码太大 还是贴链接,里面有首测试的qiao.wav 所以文件有点大

 

链接:https://pan.baidu.com/s/1bP-I8wC5QoDdkfzM6XL1pA 
提取码:5qn9 
复制这段内容后打开百度网盘手机App,操作更方便哦