干货分享丨如何在iMX8MQ 核心板上实现低功耗音频播放
飞凌嵌入式FETMX8MQ-C核心板基于NXP i.MX8MQ处理器设计,该处理器拥有4个Cortex-A53处理器(工业级主频最高为1.3GHz、商业级主频最高为1.5GHz)+1个Cortex-M4处理器。本文将系统讲解——如何在FETMX8MQ-C核心板上实现低功耗音频播放。
01、低功率音频应用概述
在这个应用中,i.MX8处理器A53内核会向M4内核发送请求,然后休眠。M4核独立播放或录制音频,操作完成后唤醒A53核。
五个软件组件被创建来实现这个功能:
·
低功率音频程序
02、软件设计
❶ RPMSG字符设备驱动程序
i.MX8上,核心间使用RPMSG机制来进行消息通信。RPMSG是基于MU模块实现的。
❷ 远程核心共享内存驱动程序
在低功耗音频应用中,Linux需要创建一个非缓冲、非缓存和连续的内存来存储解码的音频数据。M4core只能处理这样的内存空间。
此外,Linux需要获得内存的物理地址并将其传递给M4核心。
通常,在Linux中,我们有两种方法来创建这样的内存空间。
- 使用DMA内存空间,这是使用CMA(连续内存分配器)。
- 在DTS文件中预定义了一个保留的内存空间。
这里我们建议使用DMA内存空间。它更灵活。我们不需要分配一个保留的内存空间,我们可以释放分配的空间。同时,我们可以得到实际地址。
对于这种情况,函数dma_alloc_coherent()是一个理想的函数。
在此基础上,我们创建了一个远程核心共享内存驱动程序,它可以帮助用户分配、读写DMA相干内存空间。
❸ AMP优化
默认情况下,当检测到M4时,内核启用所有模块的时钟。所以SOC电流会很大。在i.mx8M上,电流大约是500毫安。
因此在内核中,我们需要启用m4程序所需的时钟,并对所有其他模块的时钟进行使能。
❹ Linux低功率音频应用程序设计
下图表明低功耗播放音频功能的模块间的关系
1. 低功耗播放程序
低功耗播放程序将解码mp3文件,并在M4核心上播放该文件。
在本程序中,我们将:
- 解码mp3音频文件。
- 复制解码数据到共享内存空间。
- 将已分配缓冲区的物理地址发送到M4核心。
- Linux休眠,等待唤醒信号。
- 当播放结束时,MU中断信号唤醒Linux。
2.低功耗录音程序
低功耗录音程序将接收M4核心上的声音,并在“A53”核心上保存PCM原始数据。
程序将:
- 分配足够的共享内存空间。
- 将已分配缓冲区的物理地址发送到M4核心。
- Linux休眠,等待唤醒信号。
- 当录音完成时,MU中断信号唤醒Linux。
- 从共享内存空间获得音频数据并保存到文件。
3.Decode mp3音频文件
在这个程序中,我们使用gstreamer解码mp3文件到PCM原始数据。
4.复制解码数据到共享内存空间
在这里,我们将使用远程核心共享内存驱动程序将PCM原始数据复制到一个连续的内存空间。
5.将已分配缓冲区的物理地址发送到M4核心
使用RPMSG字符设备发送物理地址的缓冲区到M4核心。
这里我们强调,通常,在一个核心和M4核心之间应该有一个协议。使用RPMSG字符设备,可以在用户空间中实现协议。例如,在低功耗播放程序中,为了访问远程M4核上的音频设备,我们创建了一个音频请求和响应协议。
6. Linux 内核休眠
在Linux中进入挂起模式的命令是:
echomem > /sys/power/state
7. Linux 内核唤醒
在ATF补丁中,我们添加了MU中断作为唤醒源。当Linux内核从M4核得到MU中断时,它将被唤醒。
❺ 在Cortex-M4核上的音频服务
在Cortex-M4内核上创建了一个音频服务器示例。音频服务在低功耗应用程序中,A53和M4之间定义的协议中,实现的是播放或录制的功能。
03、运行低功率音频的程序示例
本章介绍了运行低功率音频的程序示例
❶ ATF 低功耗补丁
ATF实现了功率状态协调接口(PowerState Coordination Interface, PSCI),并具有低功耗的特性。
在默认BSP发行版的Linux内核中,它将会使Cortex-A53内核和Cortex-M4内核同时处于挂起模式。因此ATF需要一个补丁来配合低功耗应用。
ATF补丁将阻止DDR进入retention模式,并且不禁用PLLs
❷ 重新编译内核和驱动
在内核中,加上RPMSG字符设备驱动程序和远程内核共享内存驱动程序的补丁。
❸ 编译低功耗音频应用
编译低功耗音频应用
❹ 编译Cortex-M4核应用
Cortex-M4应用是由IAR开发的,IAR并打开音频服务器示例并编译。
❺ 准备好测试环境
连接好A核和M4核调试串口
❻ 启动uboot运行M4核音频服务程序
在M4核调试串口可以看到
❼ 运行低功耗音频应用
当音频服务在M4内核上运行时,在u-boot中引导内核。
安装RPMSG字符设备和远程核心共享内存驱动程序。
运行./lp_play./ xxxxx .mp3启动低功耗播放。
调试信息:
解码
播放并睡眠
唤醒
运行./lp_record启动低功耗录音。录音的数据将保存为audio_rect.tmp。
04、时间消耗
在低功率音频解决方案中,数据在A53核解码,然后M4核播放。在核之间的协议通信中有一些时间损失。我们试着计算一下这个解的时间损失。
在这个例子中,我们将以两种方式播放48kbps,22050 Hz的steromp3文件,A53核直接播放和M4核通过RPMSG播放。将比较从使用gstreamer打开文件到播放的持续时间。仅对播放进行测试,用户可以根据回放情况对录音进行评估。
播放方法 |
步骤 |
延时 |
A53直接播放 |
GST Decode -> A53 Playback |
116.410ms |
M4播放使用RPMSG |
GST Decode to Shared Buffer -> Send Msg to M4 -> M4 Playback |
467.560ms |
由于低功耗音频播放将做额外的操作,如解码mp3到文件,分配CMA缓冲区,将音频数据从文件到缓冲区,然后从缓冲区到CMA缓冲区,需要一些额外的时间,大约350毫秒。
可以对低功耗播放的其他操作进行一些优化,比如在GST解码中使用appsync,它将把mp3数据直接解码到缓冲区中,通过这种方式,额外的时间可以减半。
05、功耗测试
本章对使用或不使用低功率音频比较了功耗。仅对播放进行测试,用户可以根据播放情况对录音进行评估。
正常播放
i.MX8MQ GA EVK low power audio dtb, no display, eth down, SDCard boot, idle |
||||||
|
SOC |
GPU |
VPU |
DRAM |
NVC DRAM |
|
电压(V) |
0.896 |
0.877 |
0 |
0 |
0.992 |
1.096 |
播放电流(mA) |
65 |
205 |
0 |
0 |
135-446.4 |
70 |
功耗 |
58.24 |
179.785 |
0 |
0 |
148.8 |
71 |
总功耗 |
458.065 |
低功耗音频播放
i.MX8MQ GA EVK low power audio dtb, no display, eth down, SDCard boot, idle |
||||||
|
ARM |
SOC |
GPU |
VPU |
DRAM |
NVC DRAM |
电压(V) |
0.896 |
0.877 |
0 |
0 |
0.992 |
1.096 |
播放电流(mA) |
5 |
230 |
0 |
0 |
150 |
70 |
功耗 |
4.48 |
201.74 |
0 |
0 |
148.8 |
71 |
总功耗 |
426.26 |
注:本文来自NXP提供的ApplicationsNote AN12195
点击此处进入飞凌嵌入式官网>>,了解关于FETMX8MQ-C核心板的更多信息。
点个在看,坐等更多干货~
相关产品 >
-
OKMX8MQ-C开发板
飞凌嵌入式提供基于 NXP/Freescale iMX8、i.MX 8MQ处理器设计ARM核心板FETMX8MQ-C。i.MX8M处理器具有音频、语音和视频处理功能,飞凌iMX8核心板充分发挥NXP iMX8 系列 ARM 处理器性能,对功能做了优化。提供10~15年产品长期供货计划。工作环境温度为-40℃~85℃,满足工业及泛工业场景应用。 了解详情 -
FETMX8MQ-C核心板
基于 NXP/Freescale iMX8、 iMX8X、i.MX 8MQ处理器的ARM核心板。 四核ARM Cortex-A53 ,主频最高1.3GHz,板载2GB RAM,8GB ROM;工作环境温度为-40℃~85℃,满足工业及泛工业场景应用。i.MX8M处理器具有音频、语音和视频处理功能,提供高水平的音频保真度,适用于无风扇运行,散热系统成本低、电池寿命长。具有高速接口可提供灵活连接等优势,并且提供10~15年产品长期供货计划。
了解详情 -
OKMX8MP-C开发板
内置NPU、ISP,AI计算能力高达2.3TOPS|飞凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 开发板 基于高性能低功耗工业级iMX8MP核心板设计,支持多种多种高速通信接口。iMX8MP开发板内置NPU,AI计算能力2.3TOPS,支持4K,支持双图像信号处理器(ISP),是一款支持LinuxQT/android操作系统的iMX8MP开发板。
了解详情 -
FETMX8MP-C核心板
iMX8MP核心板基于 NXP i.MX 8M Plus 处理器设计, 采用4核Cortex-A53 和 Cortex-M7架构。支持双千兆网口,iMX8MP性能强劲最高运行速率可达2.3TOPS,并且i.MX8MP功耗更低≤2W 。iMX 8M Plus系列专注于机器学习和视觉、高级多媒体以及具有高可靠性的工业自动化。它旨在满足智慧家庭、楼宇、城市和工业4.0应用的需求。飞凌iMX8MP核心板提供用户手册,iMX8MP原理图,引脚定义等。
了解详情