打印
[应用相关]

学习笔记+SPI模拟I2S音频接口

[复制链接]
1937|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qiangtech|  楼主 | 2019-12-26 14:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
以前做过一些I2S的音频信号接口的应用,所以了解一些I2S规格。从官网上看到AN5086,SPI模拟I2S的应用说明,认为很有用,试验一番。



这个应用的基本理论:

通过SPI外设的分频器,将输入的外部时钟分频后,得到一个适合音频通迅的时钟频率SCK。SCK是音频采样率的整倍数,采样率通常用8K,32K,44.1K,48K等。双声道就*2。然后再*采样的分辨率。
比如,8K采样率的双声道,分辨率为16位,那么SCK就要8K*2*16=256K的频率。


得到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信号使用了。


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





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

定时器的一些配置。


用G070RB NUCLEO调试,SPI1接口。


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


使用特权

评论回复
沙发
mmuuss586| | 2019-12-28 10:12 | 只看该作者
感谢分享

使用特权

评论回复
板凳
keaibukelian| | 2020-1-17 15:48 | 只看该作者
非常感谢分享

使用特权

评论回复
地板
labasi| | 2020-1-17 16:05 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
5
paotangsan| | 2020-1-17 16:30 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
6
renzheshengui| | 2020-1-17 16:38 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
7
xiaoqizi| | 2020-1-17 16:50 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
wowu| | 2020-1-17 16:53 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
wakayi| | 2020-1-17 16:53 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
10
玛尼玛尼哄| | 2020-1-17 20:20 | 只看该作者
第一次听说可以这么玩。

使用特权

评论回复
11
ysdx| | 2020-5-16 21:14 | 只看该作者
请问SPI模拟I2S可以可以实现全双工录放音吗?看你的帖子是放音。谢谢!

使用特权

评论回复
12
qiangtech|  楼主 | 2020-5-18 09:23 | 只看该作者
ysdx 发表于 2020-5-16 21:14
请问SPI模拟I2S可以可以实现全双工录放音吗?看你的帖子是放音。谢谢!

因为SPI本身就是双工的,所以实现模拟的I2S双工是可行的,具体可以看官方AN5086文档描述。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

1354

帖子

11

粉丝