在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

RK3568內(nèi)置MCU開發(fā)介紹之二

chen ? 來源:chen ? 作者:chen ? 2024-12-16 09:09 ? 次閱讀

本文重點(diǎn)介紹RK3568內(nèi)置的MCU與AP之間的通信功能,首先介紹RPMsg的框架,然后介紹MCU端RPMSG的構(gòu)建方法,最后介紹AP端的RPMSG的配置方法,并進(jìn)行MCU和AP之間通信的演示。

RK3568 MCU開發(fā)的入門介紹可以參考筆者的上一篇文章。

硬件準(zhǔn)備

首先介紹一下硬件。主板為風(fēng)火輪科技的YY3568開發(fā)板,主控RK3568。此開發(fā)板的相關(guān)介紹可以參考

https://wiki.youyeetoo.cn/zh/YY3568

RK3568的MCU核心需要使用串口調(diào)試,筆者這里使用的是UART4,這里也可以選擇其他的,不要跟AP核心的調(diào)試串口UART2沖突就行。 UART4的位置如下

wKgZO2dLMhGANJMpAAPGb2edcmk906.png

RPMsg框架介紹

RPMsg(Remote Processor Messaging)是一種基于virtio的消息傳遞總線,專為異構(gòu)處理器系統(tǒng)之間的通信設(shè)計(jì)。其定義了一個(gè)標(biāo)準(zhǔn)化的通信接口,使得不同架構(gòu)的核心能夠方便地進(jìn)行通信。

RK3568上面有ARM核心和RISCV核心,需要使用RPMsg這種標(biāo)準(zhǔn)化的接口,這樣可以不用考慮大小端轉(zhuǎn)換等兼容問題。在RK3568上面,AP核心是RPMSG的master端,而MCU核心則是remote端。

使用RPMSG通信時(shí),通常會(huì)從VirtIo-Ring緩沖區(qū)中申請一塊buffer,然后將這個(gè)buffer作為共享內(nèi)存,在兩個(gè)核心之間傳輸數(shù)據(jù)。另外二者之間通信時(shí),還需要中斷通知對方有數(shù)據(jù)到達(dá)。以master向remote發(fā)數(shù)據(jù)為例,

1. Master Core發(fā)送時(shí),從 vring0中取得一塊 buffer,再將消息按照 RPMsg協(xié)議填充

2.將處理好的內(nèi)存 buffer鏈接到vring1

3.觸發(fā)中斷通知 Remote Core有數(shù)據(jù)處理待處理

這個(gè)通信流程如下圖所示

wKgZPGdfDj6AUHQ8AALjAK6NkRQ131.png

反過來也是一樣的

在RK3568,可以選擇軟中斷,或者mailbox實(shí)現(xiàn)這個(gè)中斷,通常的做法是選擇mailbox,這樣還可以在觸發(fā)中斷時(shí)額外附帶少量信息。

MCU端RPMSG適配

RK SDK里面提供了兩個(gè)可選的rpmsg組件,分別是由NXP主導(dǎo)開發(fā)的rpmsg-lite,以及openamp項(xiàng)目下面的rpmsg。前者比較簡單,不需要太多額外的組件,因此選擇前者。其工程路徑為

external/hal/middleware/rpmsg-lite

如果想要進(jìn)一步了解rpmsg-lite,其原始的git項(xiàng)目地址為

https://github.com/nxp-mcuxpresso/rpmsg-lite

原始的rpmsg-lite工程僅支持NXP的異構(gòu)處理器,如imx6/imx7/imx8等,RK在此基礎(chǔ)上增加了RK3562/RK3568/RK3588等處理器的支持。

不過RK3568僅支持AP運(yùn)行這個(gè)rpmsg-lite,因此,這里我們要添加支持RK3568 MCU的相關(guān)源碼。具體步驟如下

1、打開external/hal/middleware/rpmsg-lite/lib/include/rpmsg_compiler.h,增加riscv處理器的MEM_BARRIER實(shí)現(xiàn)

wKgZO2dfDjSAAQ_ZAACFJhQXPUw804.png

RISCV處理器使用fence作為內(nèi)存屏障指令,功能類似ARM的dsb指令。

2、屏蔽rpmsg-lite/lib/init/platform/RK3568/rpmsg_init.c中的功能,這個(gè)源文件中的API專門用于AP運(yùn)行bare-metal時(shí)使用rpmsg-lite的,這里使用MCU,需要將其禁用

wKgZPGdfDjSAANRcAABDfWITbLA931.png

3、接下來修改

rpmsg-lite/lib/rpmsg_lite/porting/platform/RK3568/rpmsg_platform.c

文件。這個(gè)文件就是實(shí)現(xiàn)上述rpmsg的傳輸流程,即通過mbox觸發(fā)中斷,然后用virtio來傳輸數(shù)據(jù)。其中virtio傳輸數(shù)據(jù)的功能已經(jīng)由rpmsg-lite實(shí)現(xiàn)了,這里只需要調(diào)用。

platform_init platform_deinit函數(shù)是用于平臺(tái)初始化的,在rpmsg功能init和deinit的時(shí)候會(huì)調(diào)用這兩個(gè)函數(shù),保持跟原來的一致即可

wKgZO2dfDjSAb0sUAAC2byDlm_U643.png

platform_map_mem_region

platform_cache_all_flush_invalidate

platform_cache_disable

platform_vatopa

platform_patova

幾個(gè)函數(shù)在MCU上沒有特殊實(shí)現(xiàn),保持跟原來的一致

platform_interrupt_enable

platform_interrupt_disable

兩個(gè)函數(shù)用于開啟和關(guān)閉mbox中斷,RISCV和ARM中斷控制器不同,需要將原來的GIC的API換成INTMUX的API。此外,此處要選擇一個(gè)mbox通道,筆者選用ch3,后續(xù)AP Linux端也要配置同樣的通道。

wKgZO2dfDjSAMvgXAABj41xraXo671.png

wKgZPGdfDjSAVAnrAABnOMbwRmo698.png

platform_notify函數(shù)為virtqueue的回調(diào)函數(shù),用于在接收數(shù)據(jù)的時(shí)候產(chǎn)生一個(gè)中斷。這里實(shí)現(xiàn)是要通過mbox應(yīng)答AP,這樣AP才認(rèn)為收到了數(shù)據(jù)

wKgZPGdfDjSAAtUNAABjhCNKvhM820.png

platform_init_interrupt用于平臺(tái)初始化中斷,這里的實(shí)現(xiàn)則是初始化mbox,具體修改如下

wKgZO2dfDjyAfydOAAEBJ0EpbpU402.png

platform_global_isr_disable

platform_global_isr_enable

用于開啟和關(guān)閉全局中斷,這里使用默認(rèn)的實(shí)現(xiàn)即可

然后要定義mbox的通道信息

wKgZO2dfDjSAUrI_AAAyQ0pelRg648.png

rpmsg_remote_cb函數(shù)屬于rpmsg的回調(diào),具體由上述的rpmsg_mbox_isr調(diào)用,這兩個(gè)函數(shù)實(shí)現(xiàn)如下

wKgZPGdfDjSAa__oAACxkMoQ3g0387.png

修改完上面的rpmsg之后,還需要實(shí)現(xiàn)一個(gè)測試demo,對前一篇文章介紹的external/hal/project/rk3568-mcu目錄做修改

1.增加mcu對rpmsg的共享內(nèi)存區(qū)域的訪問。rpmsg使用的共享內(nèi)存區(qū)域由AP端Linux指定,作為預(yù)留內(nèi)存。修改GCC目錄下面的 Makefile,改用自定義的ld文件。這里同步打開rpmsg-lite的mk文件編譯

wKgZO2dfDjSALcwvAAA1Kb9mIdo698.png

這個(gè)ld文件可以從lib/CMSIS/Device/RK3568/Source/Templates/GCC復(fù)制一個(gè)過來,然后添加如下內(nèi)容

wKgZPGdfDjSALcYcAABFUKt-OcI649.png

wKgZO2dfDjSAUt0NAABzYeAYLPI015.png

2.修改testdemo,增加rpmsg測試功能

這個(gè)測試demo實(shí)現(xiàn)的功能是remote端收到數(shù)據(jù)后,就給master端發(fā)送一條固定內(nèi)容的數(shù)據(jù)

先增加如下所示宏定義

wKgZPGdfDjSAFBKFAAAps8nRDIU120.png

然后添加一個(gè)名為 rpmsg_linux_test的測試函數(shù)

wKgZO2dfDjWAakUYAAAW9J5V15Q639.png

實(shí)現(xiàn)如下

wKgZPGdfDj6Aa-sDAAGon1VDjPY337.png

這里使用rpmsg_lite_remote_init初始化,這個(gè)初始化會(huì)調(diào)用上述rpmsg_platform.c中實(shí)現(xiàn)的API,就是初始化mbox和中斷

然后使用rpmsg_lite_wait_for_link_up,這個(gè)API會(huì)循環(huán)等待AP Linux端的mbox初始化完成才返回

然后使用rpmsg_ns_bind指定rpmsg回調(diào)函數(shù)為rpmsg_ns_cb。下面看下rpmsg_ns_cb的實(shí)現(xiàn),在進(jìn)入此回調(diào)之后,同時(shí)會(huì)向master端,也就是AP Linux端發(fā)送一條數(shù)據(jù)

wKgZPGdfDjWAQEJdAACxi6iNO58656.png

然后使用rpmsg_lite_send發(fā)送一條數(shù)據(jù)給master端,發(fā)起第一次通信

到這里,mcu端的修改就完成了,按照上一篇文章介紹的方法編譯,下載到板上。

AP端RPMSG適配

AP端的Linux上已經(jīng)有完整的rpmsg框架了,這里只需要修改下配置即可。首先在defconfig文件中打開如下內(nèi)容,這里將支持mbox觸發(fā)rpmsg相關(guān)中斷的源碼編譯進(jìn)內(nèi)核,將測試demo編譯為模塊

wKgZPGdfDjWAFxggAAAQc2yA1yc649.png

然后在設(shè)備樹打開rpmsg的配置,注意rpmsg-tx的通道需要為3,跟上面MCU配置的一樣

wKgZO2dfDjWAIMWRAABJfUa4KyE976.png

完成這些配置之后,編譯出內(nèi)核,然后燒錄到板上,同時(shí)將kernel/drivers/rpmsg/rockchip_rpmsg_test.ko通過adb/ssh等方式推到板上。

MCU與AP rpmsg通信演示

按上面的步驟燒錄amp和kernel后,重啟板子,可以看到MCU端串口有如下打印信息

wKgZO2dfDjaAavkvAAAhKhPIzm8958.png

AP端的dmesg log有如下信息

wKgZPGdfDjaAaI3BAABU5wYNjqs874.png

然后在AP端加載 rockchip_rpmsg_test.ko

wKgZPGdfDjeANoT0AABYTAFyess832.png

可以看到這個(gè)信息跟源碼里面配置的是一致的

wKgZO2dfDjeAZCw6AAASy40lvTQ146.png

說明MCU確實(shí)有收到AP的數(shù)據(jù),并且發(fā)送的數(shù)據(jù)能被AP正確接收

總結(jié)

本文介紹RK3568內(nèi)置的MCU與AP之間的通信功能,MCU端使用rpmsg-lite組件,AP端使用Linux自帶的rpmsg框架,中斷依靠mbox實(shí)現(xiàn),此種方式可以在異構(gòu)核之間可靠傳輸大量數(shù)據(jù)。

審核編輯 黃宇

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

    關(guān)注

    146

    文章

    17704

    瀏覽量

    357906
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9269

    瀏覽量

    373323
  • RISC-V
    +關(guān)注

    關(guān)注

    46

    文章

    2460

    瀏覽量

    47969
  • RK3568
    +關(guān)注

    關(guān)注

    5

    文章

    561

    瀏覽量

    5905
收藏 0人收藏

    評論

    相關(guān)推薦

    RK3568開發(fā)筆記(一)

    JPEG編碼器/解碼器。RK3568平臺(tái)資源 RK3568硬件架構(gòu)圖現(xiàn)在介紹RK3568板卡硬件開發(fā)流程:一、從
    發(fā)表于 02-23 10:08

    RK3568開發(fā)板數(shù)據(jù)手冊

    RK3568 開發(fā)板主控采用的是瑞芯微 A55 64 位四核處理器 RK3568,其主頻高達(dá) 2.0 GHz。集成了 Mali G52 2EE 圖形處理器,支持 4K 解碼和 1080P 編碼
    發(fā)表于 08-30 11:56 ?25次下載

    ROC RK3568 PC源代碼RK3568/RK3588 RKNN SDK

    電子發(fā)燒友網(wǎng)站提供《ROC RK3568 PC源代碼RK3568/RK3588 RKNN SDK.txt》資料免費(fèi)下載
    發(fā)表于 09-20 09:55 ?41次下載
    ROC <b class='flag-5'>RK3568</b> PC源代碼<b class='flag-5'>RK3568</b>/<b class='flag-5'>RK</b>3588 RKNN SDK

    【ROC-RK3568-PC開發(fā)板試用體驗(yàn)】Firefly ROC-RK3568-PC開發(fā)板初探

    2.0GHz,且內(nèi)置 NPU,功能豐富,采用22nm先進(jìn)工藝,具有低功耗高性能的特點(diǎn),可玩性極高。 1 ROC-RK3568-PC開發(fā)板簡介 ROC-RK3568-PC
    的頭像 發(fā)表于 10-18 16:11 ?4195次閱讀
    【ROC-<b class='flag-5'>RK3568</b>-PC<b class='flag-5'>開發(fā)</b>板試用體驗(yàn)】Firefly ROC-<b class='flag-5'>RK3568</b>-PC<b class='flag-5'>開發(fā)</b>板初探

    瑞芯微RK3568主板開發(fā)板PET_RK3568_P01簡述

    瑞芯微RK3568主板開發(fā)板PET_RK3568_P01簡述
    的頭像 發(fā)表于 08-08 11:41 ?4070次閱讀
    瑞芯微<b class='flag-5'>RK3568</b>主板<b class='flag-5'>開發(fā)</b>板PET_<b class='flag-5'>RK3568</b>_P01簡述

    瑞芯微RK3568核心板PET_RK3568_CORE簡述

    瑞芯微RK3568核心板PET_RK3568_CORE簡述
    的頭像 發(fā)表于 08-08 11:44 ?4856次閱讀
    瑞芯微<b class='flag-5'>RK3568</b>核心板PET_<b class='flag-5'>RK3568</b>_CORE簡述

    rk3568是什么架構(gòu)的?

    在22nm FD-SOI工藝節(jié)點(diǎn)上。那么,RK3568使用什么架構(gòu)呢? RK3568采用ARM控股公司開發(fā)的ARM Cortex-A55四核CPU架構(gòu)。Cortex-A55是ARM最新、最高效的CPU
    的頭像 發(fā)表于 08-15 17:25 ?3353次閱讀

    RK3568開發(fā)板規(guī)格書

    RK3568開發(fā)板規(guī)格書
    發(fā)表于 03-23 15:28 ?70次下載

    RK3568-視頻開發(fā)案例

    RK3568-視頻開發(fā)案例
    的頭像 發(fā)表于 01-18 15:51 ?1055次閱讀
    <b class='flag-5'>RK3568</b>-視頻<b class='flag-5'>開發(fā)</b>案例

    RK3568--基于AMP的多通道AD采集開發(fā)案(

    RK3568--基于AMP的多通道AD采集開發(fā)案(
    的頭像 發(fā)表于 01-19 10:34 ?1109次閱讀
    <b class='flag-5'>RK3568</b>--基于AMP的多通道AD采集<b class='flag-5'>開發(fā)</b>案(<b class='flag-5'>二</b>)

    RK3568-ISP圖像處理開發(fā)案例

    RK3568-ISP圖像處理開發(fā)案例
    的頭像 發(fā)表于 01-19 11:46 ?1486次閱讀
    <b class='flag-5'>RK3568</b>-ISP圖像處理<b class='flag-5'>開發(fā)</b>案例

    RK3568---NPU開發(fā)案例

    RK3568---NPU開發(fā)案例
    的頭像 發(fā)表于 01-19 13:50 ?1232次閱讀
    <b class='flag-5'>RK3568</b>---NPU<b class='flag-5'>開發(fā)</b>案例

    RK3568--Acontis EtherCAT主站開發(fā)案例

    RK3568--Acontis EtherCAT主站開發(fā)案例
    的頭像 發(fā)表于 01-19 14:59 ?1147次閱讀
    <b class='flag-5'>RK3568</b>--Acontis EtherCAT主站<b class='flag-5'>開發(fā)</b>案例

    RK3568內(nèi)置MCU開發(fā)介紹之一

    本文介紹RK3568內(nèi)置MCU開發(fā)流程,首先介紹MCU
    的頭像 發(fā)表于 12-01 16:09 ?1352次閱讀
    <b class='flag-5'>RK3568</b><b class='flag-5'>內(nèi)置</b><b class='flag-5'>MCU</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>介紹</b>之一

    rk3568開發(fā)工具

    rk3568開發(fā)工具
    發(fā)表于 04-16 17:03 ?1次下載
    主站蜘蛛池模板: 久久综合99 | 亚洲第一狼人社区 | 特级全黄一级毛片免费 | 天天干天天玩天天操 | 亚洲精品成人在线 | 久久99国产亚洲高清观看首页 | 国产精品你懂得 | 美女被色 | 永久免费观看黄网站 | 欧美中出在线 | 电影天堂在线观看三级 | 日本成人a视频 | 日本写真高清视频免费网站网 | 久久永久视频 | 免费无遮挡很爽很污很黄 | 精品国产一二三区在线影院 | 日本bbxx| 九九午夜| 天堂a免费视频在线观看 | 阿v视频在线观看免费播放 爱爱视频天天干 | 午夜免费福利片观看 | 亚洲四虎在线 | 色婷婷六月桃花综合影院 | 国产三级a三级三级野外 | 四虎影免看黄 | 日本三级a | 日韩亚洲人成在线综合日本 | 好紧好爽太大了h快穿 | 黄a一级| 狼色网站 | 亚洲黄色影片 | 国产免费啪啪 | 色吧在线观看 | www天堂在线 | 99久久免费精品高清特色大片 | 国产黄色片网站 | 曰本女人一级毛片看一级毛 | 久久国产香蕉视频 | 222aaa天堂| 欧美性色黄在线视 | 快乐你懂的在线视频免费观看 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品