[应用相关] 学习笔记+SPI模拟I2S音频接口

[复制链接]
2778|11
 楼主| qiangtech 发表于 2019-12-26 14:44 | 显示全部楼层 |阅读模式
以前做过一些I2S的音频信号接口的应用,所以了解一些I2S规格。从官网上看到AN5086,SPI模拟I2S的应用说明,认为很有用,试验一番。

2019-12-26_140313.png

这个应用的基本理论:
2019-12-26_140803.png
通过SPI外设的分频器,将输入的外部时钟分频后,得到一个适合音频通迅的时钟频率SCK。SCK是音频采样率的整倍数,采样率通常用8K,32K,44.1K,48K等。双声道就*2。然后再*采样的分辨率。
比如,8K采样率的双声道,分辨率为16位,那么SCK就要8K*2*16=256K的频率。
2019-12-26_141834.png
2019-12-26_142011.png
得到SCK后再通过一个定位器的触发同步功能,得到左右通道字选择WS信号。所以I2S通常有四根信号线,外部时钟的CLK,通常叫MCLK,SCK,WS,和数据SD。

根据以上要求,设计一个简单例程来测试一下。手上有一个GO70RB NUCLEO的板子,就用它来做了。这个板子上没有合适的时钟输入用作MCLK,暂时先用内部16M时钟来作。所以SCK会有偏差。16M用SPI的64分频,得到250K的SCK,与要求的256K有一些偏差。

首先,定义一个数组用来存储音频数据。并循环赋一个值。

然后利用DMA的MEM TO PER,将数组的值循环通过SPI输出。很容易的就得到了SCK和SD信号。

另外配置一个定时器,一个输入通道做触发,一个做比较输出。SCK信号用作触发信号,比较输出就可以做WS信号使用了。
2019-12-26_143516.png

定时器的配置有点麻烦,它的功能太多了。做了一些调整之后,终于得到这样的一个输出图。

2019-12-26_135208.png

2019-12-26_135305.png

最下面的是SCK信号,中间是SD,最上面的就是WS信号。

定时器的一些配置。
2019-12-26_135550.png

用G070RB NUCLEO调试,SPI1接口。
IMG_20191226_135105.jpg

SPI模拟I2S可以应用在一些需要简单发声的项目中。


mmuuss586 发表于 2019-12-28 10:12 | 显示全部楼层
感谢分享
keaibukelian 发表于 2020-1-17 15:48 | 显示全部楼层
非常感谢分享
labasi 发表于 2020-1-17 16:05 | 显示全部楼层
非常感谢楼主分享
paotangsan 发表于 2020-1-17 16:30 | 显示全部楼层
非常感谢楼主分享
renzheshengui 发表于 2020-1-17 16:38 | 显示全部楼层
非常感谢楼主分享
xiaoqizi 发表于 2020-1-17 16:50 | 显示全部楼层
非常感谢楼主分享
wowu 发表于 2020-1-17 16:53 | 显示全部楼层
非常感谢楼主分享
wakayi 发表于 2020-1-17 16:53 | 显示全部楼层
非常感谢楼主分享
玛尼玛尼哄 发表于 2020-1-17 20:20 | 显示全部楼层
第一次听说可以这么玩。
ysdx 发表于 2020-5-16 21:14 | 显示全部楼层
请问SPI模拟I2S可以可以实现全双工录放音吗?看你的帖子是放音。谢谢!
 楼主| qiangtech 发表于 2020-5-18 09:23 | 显示全部楼层
ysdx 发表于 2020-5-16 21:14
请问SPI模拟I2S可以可以实现全双工录放音吗?看你的帖子是放音。谢谢!

因为SPI本身就是双工的,所以实现模拟的I2S双工是可行的,具体可以看官方AN5086文档描述。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

1430

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部