本文介绍了采用飞凌嵌入式FET1052-C核心板快速的实现7.1声道FLAC播放器。核心板CPU采用i.MX RT1052,具备528MHz的主频,其Arm Cortex-M7核心支持三个SAIs和SAI1有四个传输(TX)数据线,支持7.1环绕声数据传输。CPU的高性能和四线SAI为本方案的实现提供支持。
i.MX RT1052是NXP i.MX RT1050系列跨界处理器中性价比较高的一款,所谓跨界指的是其兼具MPU的高性能和MCU的低功耗与实时性。
1、i.MX RT1052 SAI特性介绍
•具有独立位时钟和帧同步的发送器,支持四条数据线。
•接收器与独立位时钟和帧同步,支持四数据线。
•每个数据线支持最大32字的帧大小。
•字大小从8位到32位可编程。
•帧的第一个字和其余字大小分别可配置。
•每个传输和接收数据线支持异步32×32位FIFO。
•支持在FIFO错误后自动重启,无需软件干预。
•支持将8位和16位数据打包到每个32位FIFO字中。
•支持将多数据线FIFOs组合成单数据线FIFO。
2、FLAC解码
FLAC(Free Lossless Audio Codec)是一种类似于MP3但无损的音频格式,这意味着FLAC中的音频压缩没有任何质量损失。
我们所说的FLAC是自由(free)的不仅仅意味着你可以不花钱而得到它。更重要的是FLAC的文件格式是对公众完全开放的,你可以以任何目的使用它(FLAC 项目只FLAC保留维护 FLAC 格式规格和确认兼容特性的权利),FLAC的文件格式和编码/解码的实现方式都不受任何已知专利的限制。还有,所有的源代码都在开放源代码的授权方式下可以得到。它是第一个真正开放和免费无损音频格式。
八个频道分配是:前左、前右、前中、LFE、后左、后右、左、右。
FLAC在i.MX RT1052上的解码完全是通过软件实现的。
3、方案实现
3.1硬件实现原理
图1 7.1声道系统架构
RT1052核心板从SD卡和USB解码FLAC文件并将数据传输到SAI1, SAI1有四条传输数据线(一条数据线包含两个数据通道)。然后,Codec芯片CS42448 获取4个数据线和时钟来处理数据并使用DACs向后级功放传输8个声道的模拟音频信号。
笔者带着大家来熟悉使用PINMUX表选择核心板上的引脚,用于制作原理图。
首先打开“**_PINMUX.xlsx”文件,表头中Pin Name是引脚的名称,用这个名字可以从i.MX RT1052 CPU手册中找到关于引脚的详细说明;Coords是CPU的球号坐标;Alt0~7是引脚的8种功能描述。
那么我们以本文中最关键的SAI1功能做示例,从表中可以找到支持4个数据线的SAI1,如下图2:
图2
根据这些CPU球号,就可以在飞凌提供的OK1052-C底板原理图中找到这些引脚在底板连接器上的位置(如图3),不过可以发现,这几个引脚已经被QSPI所占用,而QSPI在核心板上用做了QSPI的ROM,所以不建议使用这几个引脚了。
图3
换一组其它引脚,可以找到另外一组支持4 TX线的SAI1引脚,如下图:
图4
同样的方法,可以在OK1052-C底板原理图中找到引脚所在位置,通过图5可以看出,目前飞凌默认配置的是LCD的功能,但是本方案用不到LCD,可以将其用于SAI1的。
图5
按照表格中引脚功能名称,修改原理图标号如下:
图6
其它引脚的配置也是同样的方法,如果所用功能和飞凌OK1052-C底板一致的,可以不修改其功能引脚位置,这样也便于程序的修改、开发。
3.2软件实现流程
S1、CPU、功能引脚和时钟初始化,如USDHC、USB、IIC和SAI。
S2、看门狗初始化,以防止程序错误。
S3、使用IIC实现CS42448编解码器的初始化和配置。
S4、创建和初始化一个新的FLAC流解码器。
S5、检测FLAC文件的信息以配置SAI TX。
S6、解码过程中的音频回放。
S7、当一个音频文件结束,下一个文件开始(到步骤4)。如果SD卡上的所有文件都播放完成后,从头播放音频。
4、附件说明
4.1:《Sch》文件夹,参考原理图源文件。
4.2:《CDB42448_DB2.pdf》CS42448评估板参考手册
4.3:《CS42448_F5.pdf》CS42448芯片手册
4.4:《FET1052-C&FLAC7.1player_PINMUX.xlsx》FET1052-C核心板引脚配置表
|