百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 软件资讯 > 正文

飞凌嵌入式丨如何在iMX8MQ 核心板上实现低功耗音频播放

ninehua 2025-04-11 03:10 53 浏览

飞凌嵌入式FETMX8MQ-C核心板基于NXP i.MX8MQ处理器设计,该处理器拥有4个Cortex-A53处理器(工业级主频最高为1.3GHz、商业级主频最高为1.5GHz)+1个Cortex-M4处理器。本文将系统讲解——如何在FETMX8MQ-C核心板上实现低功耗音频播放。

01、低功率音频应用概述

在这个应用中,i.MX8处理器A53内核会向M4内核发送请求,然后休眠。M4核独立播放或录制音频,操作完成后唤醒A53核。

五个软件组件被创建来实现这个功能:

  • Linux的Play和 record应用
  • Linux RPMSG 字符设备驱动
  • Linux 远程核心共享内存驱动程序
  • FreeRTOS 音频服务

低功率音频程序

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中断时,它将被唤醒。

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打开文件到播放的持续时间。仅对播放进行测试,用户可以根据回放情况对录音进行评估。

由于低功耗音频播放将做额外的操作,如解码mp3到文件,分配CMA缓冲区,将音频数据从文件到缓冲区,然后从缓冲区到CMA缓冲区,需要一些额外的时间,大约350毫秒。

可以对低功耗播放的其他操作进行一些优化,比如在GST解码中使用appsync,它将把mp3数据直接解码到缓冲区中,通过这种方式,额外的时间可以减半。

05、功耗测试

本章对使用或不使用低功率音频比较了功耗。仅对播放进行测试,用户可以根据播放情况对录音进行评估。

正常播放

低功耗音频播放

注:本文来自NXP提供的ApplicationsNote AN1219

相关推荐

美国国防把360列为榜首,网友:你可以说360坏,但不能说3

刷到是缘分,感谢大家的阅读,希望您能动动小手帮忙点赞,关注,评论。你的支持和鼓励是我前进的动力。在此祝福大家天天快乐,日日开心!0102就好比你们村的流子,平时在村里嚣张跋扈,但其他村的流子想进来撒泼...

无法定位程序输入点怎么解决 教你6招搞定!

电脑的使用过程中,用户可能会遇到“无法定位程序输入点”的错误提示。这个问题通常与动态链接库(DLL)文件有关,可能会阻止程序正常运行。导致这个故障问题的原因有很多,例如系统配置、软件安装或动态链接库(...

网络打印机安装指南,让你轻松搞定【详解】

关注创盛电脑弱电知识每日获取最新行业干货和资料以下是针对各类电脑问题的解决方案,按问题类型分类整理:一、准备工作确保打印机支持有线或无线(Wi-Fi)网络连接。连接打印机到网络有线连接:用网线将打印机...

如何在银河麒麟操作系统上查找并下载软硬件驱动?

银河麒麟卓面操作系统如何查找并下载软硬件驱动?后台有些小伙伴都在问怎么下载驱动?实际上麒麟软件官网提供了软硬件驱动下载链接,如何获取?接下来给大家演示如何查找并下载软硬件驱动。·进入麒麟软件官网,点击...

Wi-Fi总掉线,这个设置要修改!(wi-fi总是掉线)

01关闭网卡的省电模式,这是最常见的Wi-Fi掉线元凶,默认开启,操作步骤Win+X→设备管理器,找到“网络适配器”(也可以像下图这样直接搜索打开)→找到你的无线网卡(名称通常带Wir...

WiFi出现感叹号上不了网怎么办 轻松恢复网络

在日常生活中,WiFi已成为不可或缺的一部分。然而,有时我们会遇到WiFi图标上出现了感叹号,无法上网。无论是办公、学习还是娱乐,这种情况都会严重影响体验。这种情况该怎么解决呢?本期驱动哥就给各位介绍...

摩尔线程发布图形显卡驱动v300.110

IT之家5月20日消息,摩尔线程今日发布版本号为v300.110的图形显卡驱动程序,为游戏玩家和专业用户带来全方位的性能优化与体验提升,特别在3DMark基准测试工具SteelNo...

怎么更新电脑网卡驱动 图文教程分享

网络连接在现代生活中扮演着重要的角色,而网卡驱动是保证稳定网络连接的关键组成部分。随着技术的不断发展,更新网卡驱动已经成为了一个必要的操作。本文将为您介绍常见的网卡驱动更新方法,帮助您成功解决网卡驱动...

柯达Kodak扫描仪i2600驱动及扫描软件下载与安装方法

柯达扫描仪I2600驱动及扫描软件的下载与安装方法!有很多的扫描仪我们找驱动的时候不好找,在打印机驱动网里边下载的话也是比较方便的,可以搜索到柯达I2600,我们往下选,这里边也提供了官方的驱动下载,...

推荐几款免费驱动软件(免费的驱动)

以下是一些免费且值得推荐的驱动程序更新工具,这些软件可以帮助你检测、下载和更新电脑上的驱动程序,确保硬件设备正常运行并保持最新状态:1.360驱动大师轻巧版特点:360安全卫士旗下的产品,界面简洁...

适用产品:电脑产品 目录 一、驱动 2 1、电池

适用产品:电脑产品目录一、驱动21、电池/电源驱动22、键盘驱动23、摄像头驱动24、触摸板驱动25、快捷键驱动26、USB驱动37、Type-C电源驱动38、其他驱动3二、软件4...

手把手教你如何使用免费自动化工具——Appium(安卓版)

上次在上传了一篇Appium后,有人来问我有没有Andriod版的安装教程,这个当然有,抱着负责任的心,在上班摸鱼小半天之后,可算是把教程编辑好了准备环境JDKPythonAndriodSDKNod...

常见电脑USB遇到故障问题处理方法

#什么方法可以改变命运#大家电脑在使用USB存储器的过程中总是会出现这个故障或者那个故障问题,有时候出现无法读取,有时候设备的数据消失了,遇到这个问题是不是非常着急啊,今天教大家自己尝试查看遇到常见u...

无法识别的USB设备?怎么解决?(无法识别的usb设备怎么解决代码43)

大家有没有遇到过这种问题,就是当你把自己的U盘或者其他USB设备插到电脑上的时候,桌面右下角会弹出一个“无法识别的USB设备”的提示?这会导致该USB设备无法正常使用。如何解决无法识别的USB设备问题...

如何调鼠标的灵敏度 快速调节超简单

鼠标灵敏度是指鼠标在移动时,指针在屏幕上移动的速度。适当的鼠标灵敏度不仅能够提高工作效率,还能减少手部疲劳,优化游戏体验。那么不同的使用场景,鼠标灵敏度怎么调呢?本文将详细探讨如何调整鼠标灵敏度,以及...