首先,DMIC采集到的每一通道的PCM数据都利用了ping-pong buffer的形式放在对应的缓冲区,而RT600的DMA支持了最多4通道DMIC的数据搬移。因此,采用DMA memory to memory的功能,我们可以把DMIC的4通道PCM数据搬到一个固定的缓冲区(假设为BUFFER1),但是这个BUFFER1中4通道的PCM数据是有固定间隔的,间隔的大小为48bit。有的小伙伴或许这里有疑惑了,为什么间隔的大小是48bit,而不是32或16bit呢?我们接下来慢慢分析。
正是由于DMIC和DMA外设的限制,导致DMA一次只能搬运4通道16bit的PCM数据,假如BUFFER0没有被操作的内存地址已经初始化为0x00,那么我们就可以把那些内存地址上为0x00的地址与PCM数据拼凑成32bit的PCM数据,PCM数据的有效位依旧是16bit,满足CS42888的要求。PCM数据间隔大小为48bit是针对16bit的PCM数据,那针对于32bit的PCM数据来说,这4通道的PCM数据在BUFFER1上的间隔就是32Bbit。
看到这里相信读者已经明白了8通道的PCM数据该怎么处理了,没错,只需要另外再开启1路DMA,还是采用DMA memory to memory的功能,就可以将另外DMIC的4通道PCM数据搬移到BUFFER1内存空间上那些间隔出来的32bit位宽的地址上。
8通道DMIC音频数据采集演示系统,基于i.MX RT600 EVK RevE板子实现,整个硬件平台包括4部分:QSPI NOR Flash板子,DMIC音频采集板,CS42888音频板和i.MX RT600 EVK板,如下图所示。
为了演示,需要注意以下几点:
1. DMIC音频采集板与RT600 EVK板的J31连接。
2. CS42888音频板与RT600 EVK板进行连接,连接情况如表所示:
3. QSPI NOR Flash板和RT600 EVK板的连接,如下表所示。Flexspi Port B和RT600 EVK板的DMIC之间的硬件连接存在冲突,如果使用DMIC,则不能使用Flexspi Port B,因此需要单独外接一块Flash。
4. 音频扬声器插入CS42888音频板的J11,J12,J13,J14,J15和J16端口。
5. 对RT600 EVK板进行改动:
去掉R379-A,R380-A,R384-A,R389-A,R390-A,R391-A,R392-A,R393-A这些电阻。
用0欧姆电阻焊接R379-B,R380-B,R384-B,R389-B,R390-B,R391-B,R392-B,R393-B这些位置。
将ISP开关(SW5)切为(ON OFF OFF),然后将项目的image文件下载到QSPI NOR闪存中。之后再将ISP开关(SW5)切为(ON OFF ON),并使RT600从QSPI NOR Flash启动。具体的实现方法可以参考恩智浦官方的应用文档AN12751“How to Enable Recovery Boot from QSPI Flash”来实现。