查看: 3818|回复: 0

使用Kinetis/RT SAI 接口连接MEMS-MIC

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3933

    主题

    7554

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    40165
    最后登录
    2025-9-2
    发表于 2019-7-8 08:49:32 | 显示全部楼层 |阅读模式
    MEMS-MIC由于不需要外接codec,在低成本方案中有广泛的应用。但是由于MEMS-MIC采用了PDM编码格式,需要进行PDM到PCM格式的转换。同时为了获取更好的音质,还需要进行FIR滤波。相对于使用codec的MIC,使用MEMS-MIC在解码技术上会略显复杂一些。本文将会讨论在Kinetis/RT MCU上使用SAI接口连接MEMS-MIC的整个接入的方案。

    一、什么是PDM编码

    PDM的字面意思是脉冲密度调制。PDM和我们平时比较常见的PCM有很大的区别,这是一种完全不同的针对模拟信号的数字编码方式。其每次采样仅有1个bit的输出。对于没有接触过这种1bit编码的小伙伴们看到这可能会觉得特别懵,因为这种编码方式相对于大家比较熟悉的PCM编码有很大的区别。

    这里只展示一下PDM输入和原始输入的正弦波的关系图。关于PDM的编码原理的详细介绍会在后期文章中进一步更新。

    正弦波输入以及求和对应的PDM输出的关系,如下图所示:
    1.0.png

    上图中,横坐标是输出的点数,实际物理含义是单位1代表调制时间间隔。

    二、I2S的时序

    I2S的时序如下图所示,由左右声道控制、时钟和数据线构成。在每个时钟周期的上升沿采样数据。这部分比较简单,不需要更多赘述。

    1.2.png

    三、MEMS-MIC的时序

    MEMS-MIC是两线通信的,对于MIC,数据永远是输出的方向。时钟由MCU提供给MEMS-MIC。

    另外我们可以通过外部管脚电平配置MEMS-MIC在上升沿还是下降沿输出数据,而在另外半个周期保持高阻态。

    1.3.png

    这样,我们可以在一个CLK下面组合两个MEMS-MIC,构成两路输入到系统,如下图所示。
    1.4.png

    但是由于KINETIS/RT的SAI接口并不支持同时在上升沿和下降沿采样,对于多通道的MEMS-MIC接入是不能这样做的。后面会详细讲解如何用SAI接入多个MEMS-MIC。

    四、SAI接口介绍

    SAI接口的主要特性如下(以RT1050为例):

    支持4位数据线并发通信

    具有独立的位时钟和帧同步

    每帧可以支持多达32个字

    每个字可以包含8到32个位

    第一个字的位数可以独立配置

    发送和接收具有独立的异步32×32位FIFO

    支持FIFO出错后自动重启,无需软件干预

    支持将8位和16位数据组合成32位再通过FIFO发送盒接收

    支持将多数据线FIFO合并为单数据线FIFO

    五、如何使用Kinetis/RT的SAI口连接MEMS-MIC

    SAI和MEMS-MIC的连接如下图所示:

    1.5.png

    由于没有帧同步,直接对接CLK和DATA就可以了,这个比较简单。

    谈到MEMS和SAI的连接关系,当然就得谈一下KINETIS/RT SAI接口的高级功能了,那就是多通道并行通信。由于SAI并不支持同时在上升沿和下降沿收数据,这样,如果需要在一个SAI口下面接入多个MEMS-MIC,就需要用到这个多通道通信的特性。其连接图如下所示:

    1.6.png

    这部分也很容易理解,每一个通道就是一根独立的RX数据线,SAI支持多少个通道就能挂多少个MEMS-MIC。

    六、PDM到PCM编码的转换

    PDM解码到PCM是通过CIC滤波器和FIR滤波器实现的,其结构图如下:

    1.7.png

    这里需要注意的是,CIC滤波完成后要做Nbit的减采样,还原出低采样率下的PCM数据。比如,3.072MHz的PDM输入数据,完成64 bit的减采样后,会得到3.072MHz/64 = 48KHz的PCM信号。

    另外一个要注意的问题是,我们可以把SAI配置为I2S的timing去接MEMS-MIC,但是,对我我们来说,从MEMS-MIC过来的都是音频的01bit流,是不分左右声道的。一个通道上过来的MEMS-MIC码流就是一路的MIC语音输入。

    下图展示了PDM原始数据,I2S帧,PCM数据,wav文件数据的一些关系。这里要注意的一个要点是I2S过来的数据其实只是一串01码流,在这里本身并没有左右声道的概念,我们只是通过I2S的timing去获取这些01码流而已。

    1.8.png

    七、在SDK中配置SAI

    配置SAI需要考虑以下问题:

    使用LSB or MSB?这个和后面的计算是相关的,一定不能弄错。

    使用上升沿收数据还是使用下降沿收数据?这个是要和硬件设计匹配的,千万别弄错。

    字长的配置。SAI的最大字长是32bit,当字长配置为32bit时,能使DMA的实际带宽最大化。

    采样频率多少?我们设计好采样频率和过采样率后,就可以算出clock的频率,再根据该频率配置SAI的输出时钟。


    按照以上内容设计硬件以及配置SAI接口,在FRDM-K66接入MEMS-MIC的PDM数据码流,解码为PCM格式后存储到SD卡后,经验证,可以播放出清晰的声音。


    八、参考文献

    1-bit A/D and D/A Converters, http://www.cs.tut.fi/sgn/arg/rosti/1-bit/

    Pulse-density modulation, http://en.wikipedia.org/wiki/Pulse-density_modulation

    Delta-sigma modulation,http://en.wikipedia.org/wiki/Delta-sigma_modulation

    作者:郭嘉    文章出处:恩智浦MCU加油站


    qiandao qiandao
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-3 06:09 , Processed in 0.079854 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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