干貨分享丨如何在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原理圖,引腳定義等。
了解詳情