0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【開源項(xiàng)目】基于OpenHarmony的RK系列開發(fā)板音頻驅(qū)動(dòng)適配方案

電子發(fā)燒友論壇 ? 來(lái)源:未知 ? 2022-10-25 08:25 ? 次閱讀

作者:陳甲印

職位:鴻湖萬(wàn)聯(lián)產(chǎn)品推薦官軟通動(dòng)力高級(jí)技術(shù)專家

fbd0c832-53fa-11ed-a3b6-dac502259ad0.jpg

RK系列開發(fā)板音頻驅(qū)動(dòng)適配(一)

背景:

多媒體系統(tǒng)目前在Linux操作系統(tǒng),windows操作系統(tǒng)已經(jīng)非常成熟,并且應(yīng)用場(chǎng)景廣泛,但是,基于OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)操作系統(tǒng),目前如果使用到多媒體(音頻)是需要做一系列的適配動(dòng)作,才能應(yīng)用到各種場(chǎng)景。

方案:

基于OpenHarmony適配RK系列開發(fā)板音頻驅(qū)動(dòng)總體方案是:基于HDF框架和ADM模型,在內(nèi)核層中創(chuàng)建DAI、DMA和Codec三個(gè)模塊,并實(shí)現(xiàn)例化ADM定義的DAI、DMA和Codec回調(diào)業(yè)務(wù)接口,ADM通過(guò)這些接口實(shí)現(xiàn)音頻數(shù)據(jù)處理與功能控制;然后再通過(guò)HCS配置設(shè)備節(jié)點(diǎn)和服務(wù),通過(guò)HDF的服務(wù)管理機(jī)制,對(duì)內(nèi)核層和用戶層提供服務(wù)。

針對(duì)DAI、DMA和Codec,首先分別創(chuàng)建對(duì)應(yīng)的適配器模塊(RK系列開發(fā)板daiadapter、RK系列開發(fā)板dmaadapter、es8838codecadapter),在其中實(shí)現(xiàn)驅(qū)動(dòng)的注冊(cè)、綁定、初始化和釋放;然后分別創(chuàng)建三者對(duì)應(yīng)的操作集模塊(RK系列開發(fā)板daiops、RK系列開發(fā)板dmaops、es8838codecops),在其中實(shí)現(xiàn)所有ADM定義的對(duì)應(yīng)業(yè)務(wù)接口;最后在deviceinfo.hcs中配置三者公有的參數(shù),若需要配置私有參數(shù),則還需要分別創(chuàng)建三者對(duì)應(yīng)的HCS配置文件(daiconfig.hcs、dmaconfig.hcs、codecconfig.hcs)。

RK系列開發(fā)板 DAI模塊適配:

DAI主要作用是通過(guò)I2S將Soc與Codec連接,實(shí)現(xiàn)在Soc和Codec之間音頻數(shù)據(jù)的傳輸,其中I2S驅(qū)動(dòng)由HDF框架提供。ADM定義的DAI接口包括:DAI設(shè)備初始化、讀寫(Soc的)寄存器、音頻設(shè)備啟動(dòng)、下發(fā)硬件參數(shù)和事件監(jiān)聽(tīng)共6個(gè)接口。

在適配器模塊中實(shí)例化ADM定義的DAI兩個(gè)結(jié)構(gòu)體:DaiData(SoC端DAI數(shù)據(jù)集)和AudioDaiOps(SoC端DAI操作集);在操作集模塊中實(shí)現(xiàn)6個(gè)ADM定義的DAI的業(yè)務(wù)接口函數(shù);配置DAI設(shè)備節(jié)點(diǎn)公有參數(shù),若有需要,則可配置SoC端的I2S寄存器信息等私有參數(shù)。

RK系列開發(fā)板 DAI模塊關(guān)系

fbec3540-53fa-11ed-a3b6-dac502259ad0.jpg

RK系列開發(fā)板daiadapter

實(shí)例化SoC端DAI操作集:g_daiDeviceOps,核心成員字段值定義如下:

Startup = RK系列開發(fā)板DaiStartup;

HwParams = RK系列開發(fā)板DaiHwParams;

Trigger = RK系列開發(fā)板DaiTrigger。

實(shí)例化SoC端DAI數(shù)據(jù)集:g_daiData,核心成員字段值定義如下:

DaiInit = RK系列開發(fā)板DaiDeviceInit;

Read = RK系列開發(fā)板DaiDeviceReadReg;

Write = RK系列開發(fā)板DaiDeviceWriteReg;

ops = &g_daiDeviceOps,SoC端DAI操作集地址。

實(shí)例化HdfDriverEntry類型的DAI驅(qū)動(dòng)實(shí)體:g_daiDriverEntry,核心成員字段值定義如下:

moduleVersion = 1,模塊版本號(hào);

moduleName = "DAI_RK系列開發(fā)板",模塊名;

Bind = DaiDriverBind;

Init = DaiDriverInit;

Release = DaiDriverRelease。

DAI驅(qū)動(dòng)注冊(cè)到鴻蒙系統(tǒng):HDFINIT(gdaiDriverEntry)

實(shí)現(xiàn)以下函數(shù):

DaiDriverInit,DAI驅(qū)動(dòng)初始化函數(shù);

DaiDriverBind,DAI驅(qū)動(dòng)綁定函數(shù);

DaiDriverRelease,DAI驅(qū)動(dòng)釋放函數(shù)。

RK系列開發(fā)板 daiops

實(shí)現(xiàn)以下函數(shù):

RK系列開發(fā)板DaiDeviceInit,初始化SoC端DAI設(shè)備函數(shù);

RK系列開發(fā)板DaiDeviceReadReg,讀SoC端DAI設(shè)備寄存器函數(shù);

RK系列開發(fā)板DaiDeviceWriteReg,寫SoC端DAI設(shè)備寄存器函數(shù);

RK系列開發(fā)板DaiStartup,啟動(dòng)SoC端DAI設(shè)備函數(shù);

RK系列開發(fā)板DaiHwParams,下發(fā)SoC端DAI硬件參數(shù)函數(shù);

RK系列開發(fā)板DaiTrigger,監(jiān)聽(tīng)并處理事件函數(shù)。

總結(jié):

在OpenHarmony操作系統(tǒng)中,適配音頻驅(qū)動(dòng)是非常重要的一個(gè)模塊,本文只是其中的一個(gè)步驟,DAI模塊適配,通過(guò)示意圖的分析,以及核心代碼的指導(dǎo),相信讀者會(huì)對(duì)音頻適配有一個(gè)基本的了解,之后的文章中,會(huì)逐步更新音頻驅(qū)動(dòng)的DMA模塊適配、Codec模塊適配、Audio HCS配置等。

RK系列開發(fā)板音頻驅(qū)動(dòng)適配(二)

背景:

上一篇文章RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南-DAI模塊適配中已經(jīng)闡述音頻驅(qū)動(dòng)適配的DAI模塊適配步驟以及核心代碼的展示,本次主要介紹音頻驅(qū)動(dòng)適配中的DMA模塊適配。

RK系列開發(fā)板 DMA模塊適配:

DMA是一種無(wú)需要CPU的參與就可以讓外設(shè)與系統(tǒng)內(nèi)存之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)挠布C(jī)制,其主要作用是實(shí)現(xiàn)音頻數(shù)據(jù)在SoC設(shè)備與內(nèi)存之間的傳輸,并對(duì)循環(huán)緩存中的數(shù)據(jù)進(jìn)行管理。ADM定義的DMA接口包括:DMA設(shè)備初始化、內(nèi)存的分配與釋放、DMA通道的申請(qǐng)與配置、DMA預(yù)處理、暫停與恢復(fù)、音頻數(shù)據(jù)的提交與懸掛和循環(huán)緩存管理共11個(gè)接口。

在適配器模塊中實(shí)例化ADM定義的DAI兩個(gè)結(jié)構(gòu)體:PlatformData(DMA數(shù)據(jù)集)和AudioDmaOps(DMA操作集);在操作集模塊中實(shí)現(xiàn)DMA的業(yè)務(wù)接口函數(shù);配置DMA設(shè)備節(jié)點(diǎn)公有參數(shù),若有需要,則可配置DMA相關(guān)寄存器信息等私有參數(shù)。

RK系列開發(fā)板 DMA模塊關(guān)系

fc0d50cc-53fa-11ed-a3b6-dac502259ad0.jpg

RK系列開發(fā)板dmaadapter

實(shí)例化DMA操作集:g_dmaDeviceOps,核心成員字段值定義如下:

DmaBufAlloc = RK系列開發(fā)板DmaBufAlloc;

DmaBufFree = RK系列開發(fā)板DmaBufFree;

DmaRequestChannel = RK系列開發(fā)板DmaRequestChannel;

DmaConfigChannel = RK系列開發(fā)板DmaConfigChannel;

DmaPrep = RK系列開發(fā)板DmaPrep;

DmaSubmit = RK系列開發(fā)板DmaSubmit;

DmaPending = RK系列開發(fā)板DmaPending;

DmaPause = RK系列開發(fā)板DmaPause;

DmaResume = RK系列開發(fā)板DmaResume;

DmaPointer = RK系列開發(fā)板PcmPointer。

實(shí)例化DMA數(shù)據(jù)集:g_platformData,核心成員字段值定義如下:

PlatformInit= RK系列開發(fā)板DmaDeviceInit;

ops = &g_dmaDeviceOps,DMA操作集地址;

實(shí)例化HdfDriverEntry類型的DAI驅(qū)動(dòng)實(shí)體:

g_platformDriverEntry,核心成員字段值定義如下:

moduleVersion = 1,模塊版本號(hào);

moduleName = "DMA_RK系列開發(fā)板",模塊名;

Bind = DmaDriverBind;

Init = DmaDriverInit;

Release = DmaDriverRelease。

DMA驅(qū)動(dòng)注冊(cè)到鴻蒙系統(tǒng):HDFINIT(gplatformDriverEntry)

實(shí)現(xiàn)以下函數(shù):

DmaDriverInit,DMA驅(qū)動(dòng)初始化函數(shù);

DmaDriverBind,DMA驅(qū)動(dòng)綁定函數(shù);

DmaDriverRelease,DMA驅(qū)動(dòng)釋放函數(shù)。

RK系列開發(fā)板dmaops

實(shí)現(xiàn)以下函數(shù):

RK系列開發(fā)板DmaDeviceInit,初始化DMA設(shè)備函數(shù);

RK系列開發(fā)板DmaBufAlloc,分配數(shù)據(jù)內(nèi)存函數(shù);

RK系列開發(fā)板DmaBufFree,釋放數(shù)據(jù)內(nèi)存函數(shù);

RK系列開發(fā)板DmaRequestChannel,申請(qǐng)DMA通道函數(shù);

RK系列開發(fā)板DmaConfigChannel,配置DMA通道函數(shù);

RK系列開發(fā)板DmaPrep,DMA預(yù)處理函數(shù);

RK系列開發(fā)板DmaPause,暫停函數(shù);

RK系列開發(fā)板DmaResume,恢復(fù)函數(shù);

RK系列開發(fā)板DmaSubmit,提交數(shù)據(jù)函數(shù);

RK系列開發(fā)板DmaPending,懸掛數(shù)據(jù)函數(shù);

RK系列開發(fā)板PcmPointer,管理數(shù)據(jù)緩存函數(shù)。

總結(jié):

本文詳細(xì)介紹DMA的適配步驟以及核心代碼,相信讀者會(huì)對(duì)音頻適配會(huì)有一個(gè)更清楚深入的了解,之后的文章中,會(huì)逐步更新音頻驅(qū)動(dòng)的Codec模塊適配、Audio HCS配置等。

更多“RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南”點(diǎn)擊下方的文章鏈接閱讀。

RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南(三)

RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南(四)

RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南(五)

fc2cd7ee-53fa-11ed-a3b6-dac502259ad0.png


原文標(biāo)題:【開源項(xiàng)目】基于OpenHarmony的RK系列開發(fā)板音頻驅(qū)動(dòng)適配方案

文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5094

    瀏覽量

    97805
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3731

    瀏覽量

    16431

原文標(biāo)題:【開源項(xiàng)目】基于OpenHarmony的RK系列開發(fā)板音頻驅(qū)動(dòng)適配方案

文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發(fā)板演示

    本文介紹瑞芯微主板/開發(fā)板編譯OpenHarmony源碼后燒錄鏡像的教程,觸覺(jué)智能Purple Pi OH鴻蒙開發(fā)板演示。搭載了瑞芯微RK3566四核處理器,樹莓派卡片電腦設(shè)計(jì),支持
    的頭像 發(fā)表于 12-30 10:08 ?134次閱讀
    <b class='flag-5'>OpenHarmony</b>源碼編譯后燒錄鏡像教程,<b class='flag-5'>RK</b>3566鴻蒙<b class='flag-5'>開發(fā)板</b>演示

    OpenHarmony怎么修改DPI密度值?觸覺(jué)智能RK3566鴻蒙開發(fā)板演示

    開源鴻蒙OpenHarmony系統(tǒng)下,修改DPI密度值的方法,觸覺(jué)智能Purple Pi OH鴻蒙開發(fā)板演示,搭載了瑞芯微RK3566四核處理器,Laval鴻蒙社區(qū)推薦
    的頭像 發(fā)表于 12-24 11:46 ?236次閱讀
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?觸覺(jué)智能<b class='flag-5'>RK</b>3566鴻蒙<b class='flag-5'>開發(fā)板</b>演示

    瑞芯微主板/開發(fā)板Linux系統(tǒng)播放音頻方法,觸覺(jué)智能RK3562開發(fā)板演示

    本文介紹瑞芯微方案主板/開發(fā)板Linux系統(tǒng)播放音頻的方法,觸覺(jué)智能RK3562開發(fā)板演示,通用RK
    的頭像 發(fā)表于 12-13 11:40 ?285次閱讀
    瑞芯微主板/<b class='flag-5'>開發(fā)板</b>Linux系統(tǒng)播放<b class='flag-5'>音頻</b>方法,觸覺(jué)智能<b class='flag-5'>RK</b>3562<b class='flag-5'>開發(fā)板</b>演示

    OpenHarmony屬性信息怎么修改?觸覺(jué)智能RK3566鴻蒙開發(fā)板來(lái)演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,修改產(chǎn)品屬性信息的方法,觸覺(jué)智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新OpenHarmon
    的頭像 發(fā)表于 11-27 09:31 ?207次閱讀
    <b class='flag-5'>OpenHarmony</b>屬性信息怎么修改?觸覺(jué)智能<b class='flag-5'>RK</b>3566鴻蒙<b class='flag-5'>開發(fā)板</b>來(lái)演示

    如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發(fā)板演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,開啟/關(guān)閉SELinux權(quán)限的方法,觸覺(jué)智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新Open
    的頭像 發(fā)表于 11-18 19:03 ?393次閱讀
    如何在<b class='flag-5'>開源</b>鴻蒙<b class='flag-5'>OpenHarmony</b>開啟SELinux模式?<b class='flag-5'>RK</b>3566鴻蒙<b class='flag-5'>開發(fā)板</b>演示

    【迅為】瑞芯微RK3588開發(fā)板RK3568開發(fā)板區(qū)別及優(yōu)勢(shì)

    RK3568開發(fā)板
    的頭像 發(fā)表于 11-18 14:19 ?491次閱讀
    【迅為】瑞芯微<b class='flag-5'>RK</b>3588<b class='flag-5'>開發(fā)板</b><b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)板</b>區(qū)別及優(yōu)勢(shì)

    迅為iTOP-RK3568/RK3588開發(fā)板獲麒麟軟件適配認(rèn)證

    迅為iTOP-RK3568/RK3588開發(fā)板獲麒麟軟件適配認(rèn)證
    的頭像 發(fā)表于 10-18 14:56 ?586次閱讀
    迅為iTOP-<b class='flag-5'>RK</b>3568/<b class='flag-5'>RK</b>3588<b class='flag-5'>開發(fā)板</b>獲麒麟軟件<b class='flag-5'>適配</b>認(rèn)證

    瑞芯微RK3568鴻蒙開發(fā)板OpenHarmony系統(tǒng)修改cfg文件權(quán)限方法

    本文適用于OpenHarmony開源鴻蒙系統(tǒng)修改cfg文件權(quán)限方法,深圳觸覺(jué)智能研發(fā)的RK3566、RK3568、RK3588等
    的頭像 發(fā)表于 09-11 13:26 ?997次閱讀
    瑞芯微<b class='flag-5'>RK</b>3568鴻蒙<b class='flag-5'>開發(fā)板</b><b class='flag-5'>OpenHarmony</b>系統(tǒng)修改cfg文件權(quán)限方法

    Openharmony軟件評(píng)估指南-米爾瑞芯微RK3568開發(fā)板

    MYD-LR3568開發(fā)板正面 圖1-2. 米爾MYD-LR3568開發(fā)板反面 1.軟件資源米爾米粉派3568系列開發(fā)板Openharmony
    發(fā)表于 09-06 20:06

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板

    大家期待已久的迅為RK3568開發(fā)板終于迎來(lái)了鴻蒙4.1系統(tǒng)的強(qiáng)勢(shì)支持!想知道如何實(shí)現(xiàn)快速開發(fā)學(xué)習(xí)嗎?跟著我們一起來(lái)探索吧! 迅為RK3568開發(fā)板
    發(fā)表于 07-23 10:44

    鴻蒙OpenHarmony開發(fā)板解析:【芯片解決方案

    芯片解決方案是指基于某款開發(fā)板的完整解決方案,包含驅(qū)動(dòng)、設(shè)備側(cè)接口適配、開發(fā)板sdk等。
    的頭像 發(fā)表于 05-10 15:42 ?1284次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發(fā)板</b>解析:【芯片解決<b class='flag-5'>方案</b>】

    OpenHarmony鴻蒙實(shí)戰(zhàn)】在RK3399開發(fā)板實(shí)現(xiàn)智能門禁人臉識(shí)別

    基于RK3399開發(fā)板,使用OpenHarmony3.0-LTS開發(fā)的應(yīng)用。通過(guò)定時(shí)獲取攝像頭數(shù)據(jù),實(shí)現(xiàn)人臉識(shí)別比對(duì)等功能。
    的頭像 發(fā)表于 03-20 17:38 ?1482次閱讀
    【<b class='flag-5'>OpenHarmony</b>鴻蒙實(shí)戰(zhàn)】在<b class='flag-5'>RK</b>3399<b class='flag-5'>開發(fā)板</b>實(shí)現(xiàn)智能門禁人臉識(shí)別

    介紹一種OpenAtom OpenHarmony輕量系統(tǒng)適配方案

    本文在不改變?cè)邢到y(tǒng)基礎(chǔ)框架的基礎(chǔ)上, 介紹了一種OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)輕量系統(tǒng)適配方案。
    的頭像 發(fā)表于 03-05 09:24 ?1235次閱讀
    介紹一種OpenAtom <b class='flag-5'>OpenHarmony</b>輕量系統(tǒng)<b class='flag-5'>適配方案</b>

    迅為RK3568開發(fā)板驅(qū)動(dòng)開發(fā)指南-輸入子系統(tǒng)

    迅為RK3568開發(fā)板驅(qū)動(dòng)開發(fā)指南-輸入子系統(tǒng)
    的頭像 發(fā)表于 02-23 15:11 ?933次閱讀
    迅為<b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)板</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開發(fā)</b>指南-輸入子系統(tǒng)

    開源大師兄開發(fā)板通過(guò) OpenHarmony 3.2 Release版本兼容性測(cè)評(píng)

    近期,江蘇潤(rùn)開鴻數(shù)字科技有限公司(以下簡(jiǎn)稱“潤(rùn)開鴻”)開源?師兄開發(fā)板順利通過(guò)OpenHarmony3.2.1Release版本兼容性測(cè)評(píng),為基于開源大師兄
    的頭像 發(fā)表于 01-20 08:02 ?968次閱讀
    <b class='flag-5'>開源</b>大師兄<b class='flag-5'>開發(fā)板</b>通過(guò) <b class='flag-5'>OpenHarmony</b> 3.2 Release版本兼容性測(cè)評(píng)