干貨分享丨如何在iMX8MQ 核心板上實現低功耗音頻播放

原創 2020-12-07 10:15:00 iMX8MQ imx8 i.mx8

飛凌嵌入式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中斷時,它將被喚醒。


? 在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

 

ARM

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核心板的更多信息。

 


 www.tkbv.cn

點個在看,坐等更多干貨~

 

相關產品 >

  • OKMX8MQ-C開發板

    飛凌嵌入式提供基于 NXP/Freescale iMX8、i.MX 8MQ處理器設計ARM核心板FETMX8MQ-C。i.MX8M處理器具有音頻、語音和視頻處理功能,飛凌iMX8核心板充分發揮NXP iMX8 系列 ARM 處理器性能,對功能做了優化。提供10~15年產品長期供貨計劃。工作環境溫度為-40℃~85℃,滿足工業及泛工業場景應用。 了解詳情
    OKMX8MQ-C開發板
  • 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年產品長期供貨計劃。
    了解詳情
    FETMX8MQ-C核心板
  • OKMX8MP-C開發板

    內置NPU、ISP,AI計算能力高達2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發板 基于高性能低功耗工業級iMX8MP核心板設計,支持多種多種高速通信接口。iMX8MP開發板內置NPU,AI計算能力2.3TOPS,支持4K,支持雙圖像信號處理器(ISP),是一款支持LinuxQT/android操作系統的iMX8MP開發板。

    了解詳情
    OKMX8MP-C開發板
  • 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原理圖,引腳定義等。
    了解詳情
    FETMX8MP-C核心板

推薦閱讀 換一批 換一批