本文介紹RK3568內(nèi)置的MCU的開發(fā)流程,首先介紹MCU程序的構(gòu)建方法,然后介紹MCU核心與ARM CORTEX A55 AP核心之間的mailbox通信。
RK3568內(nèi)置有4*cortex A55(下文簡稱AP)和1個RISCV(下文簡稱MCU)。
硬件準(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的位置如下
RK3568內(nèi)置MCU介紹
RK3568內(nèi)置的MCU核心特性如下:
可以看出這是一個RV32I架構(gòu)的核心,此核心具體型號不明,主頻200MHz
另外從介紹上面看,這個核心沒有獨立的RAM和flash,所以需要從RK3568的EMMC和DDR上面劃分出flash和RAM來支持其運行。
軟件介紹
目前RK新版本的Linux SDK已經(jīng)支持了AMP功能。AMP(Asymmetric Multi-Processing)系統(tǒng)是一種非對稱多核異構(gòu)系統(tǒng),即在同一芯片內(nèi),通過分組CPU,并在不同組的CPU內(nèi)運行不同的系統(tǒng)。在RK3568上,將Cortex-A55 * 4作為主要核心,運行Linux系統(tǒng); RISC-V * 1`作為輔助核心跑裸核系統(tǒng),輔助Linux系統(tǒng)實現(xiàn)快速響應(yīng)和控制。軟件支持如下所示
RK3568新版的SDK目錄如下
相比舊版本的SDK,這里增加了rtos目錄,是用于存放RTT源碼的,此外external目錄下有個hal目錄,用于存放bare-metal,也就是裸機的源碼。本文重點介紹bare-metal部分,后面的文章會介紹RTT的。
打開hal目錄,內(nèi)容如下
application里面是一些應(yīng)用示例,board里面的內(nèi)容沒用,可以忽略
doc是開發(fā)文檔
lib里面是cmsis以及外設(shè)庫的源碼,類似于STM32工程的Drivers目錄
middleware里面是中間件的源碼,包括rpmsg openamp等
project包含了目前RK所有平臺(ap+mcu)的啟動文件,main.c,以及編譯,打包腳本
test和tools目錄也可以忽略
MCU bare-metal程序的構(gòu)建方法與打包
1.下載RISC-V的交叉工具鏈,這里使用的是xpack-riscv-none-embed-gcc-10.2.0-1.2-linux-x64,這個交叉工具鏈可以從https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases處下載
下載之后將這個交叉工具鏈解壓到工程根目錄的prebuilts/gcc/linux-x86/riscv64下面,注意目錄不要搞錯,不然后面的構(gòu)建腳本會找不到工具鏈
2.在工程根目錄下打開external/hal/project/common/GCC/riscv.mk文件,進行如下修改,指定工具鏈位置
3.在工程根目錄下打開external/hal/project/rk3568-mcu目錄。此為rk3568-mcu工程
源碼在src目錄下,這里添加MCU的打印信息。打開src目錄里面的main.c,取消
TEST_USE_UART4M1的注釋,這樣MCU可以使用UART4進行打印。
4.rk3568-mcu的GCC目錄有構(gòu)建腳本。打開GCC目錄,在此目錄下面執(zhí)行make。編譯結(jié)果如下
編譯之后在此目錄下可以看到TestDemo.bin文件,即為可執(zhí)行程序
5. rk3568-mcu目錄下的mkimage.sh,可以將TestDemo.bin轉(zhuǎn)換為分區(qū)映像,執(zhí)行此腳本,會在Image下生成amp.img,此分區(qū)映像需要燒寫到EMMC一個分區(qū)上面。
6.按照RK的默認配置構(gòu)建整個Linux工程。這個構(gòu)建工程可以參考RK SDK下面的Rockchip_Developer_Guide_Linux_Software_CN.pdf文檔,這里不贅述。構(gòu)建之后可以在SDK的output目錄下可以得到firmware目錄,這個為當(dāng)前打包使用的各個分區(qū)映像的軟鏈接。
7.對AP端的部分內(nèi)容做修改。
分區(qū)表增加amp分區(qū)
package-file打包文件中增加amp分區(qū)映像
uboot端打開rk-amp.config,使能uboot階段加載MCU固件到指定DDR地址的操作。可以在device/rockchip/.chips/rk3566_rk3568的配置文件增加此配置項
kernel端修改設(shè)備樹,增加amp預(yù)留內(nèi)存。在使用的設(shè)備樹文件增加#include "rk3568-amp.dtsi"
8.將步驟5生成的amp.img,復(fù)制到步驟6所述的firmware目錄中
然后再次構(gòu)建整個固件,如果操作無誤,則可以生成一個update.img文件。這里明確會將amp.img添加到燒錄包里面
9.將生成的固件燒錄到板上,串口4上面配置為1500000波特率,可以看到如下所示的log
MCU與AP的mailbox通信
RK3568硬件上面有一組mailbox,用于實現(xiàn)MCU與AP通信
1.AP端做如下修改
在kernel的defconfig中增加
CONFIG_ROCKCHIP_MBOX_DEMO=m
打開mailbox的demo
在kernel的rk3568-amp.dtsi中關(guān)閉rpmsg對mailbox的占用
在板級dts文件中增加mailbox-demo配置
這里使用mailbox的通道0作為rx,通道3作為tx
修改之后,單獨構(gòu)建kernel鏡像,在kernel目錄下得到boot.img,另外在kernel/drivers/mailbox下得到rockchip-mbox-demo.ko
2.MCU端做如下修改
打開external/hal/project/rk3568-mcu,打開src/main.c,打開TEST_DEMO
再打開src/test_demo.c,打開mbox配置
修改之后,重新構(gòu)建amp.img
然后用rk的燒錄工具,單獨燒錄boot分區(qū)和amp分區(qū),然后重啟,將rockchip-mbox-demo.ko通過adb或者其他方式,放到板上
執(zhí)行insmod操作之后,AP端的內(nèi)核日志中有如下信息
MCU端的串口有如下信息
這里通過源碼簡單介紹一下這個測試demo。首先是AP端的,在kernel/drivers/mailbox/rockchip-mbox-demo.c的probe函數(shù)中,先通過
mbox_request_channel_byname
申請了名為test-rx test-tx的兩個mailbox通道,這個名稱是設(shè)備樹指定的。并且注冊了名為rk_mbox_rx_callback的回調(diào)函數(shù)。申請到通道之后,先用mbox_send_message發(fā)送一條數(shù)據(jù)出去
然后在rk_mbox_rx_callback函數(shù)內(nèi)容如下
這里是在不超過MSG_LIMIT的情況下,收到mbox一條數(shù)據(jù),就通過mbox發(fā)送一條數(shù)據(jù)出去。發(fā)送的數(shù)據(jù)內(nèi)容為0x524D5347U
MCU端的邏輯如下
MCU端也是先注冊了一個通道,然后注冊名為mbox_remote_isr中斷函數(shù),然后中斷函數(shù)中再調(diào)用mbox_remote_cb回調(diào)
這個回調(diào)函數(shù)中收到一條數(shù)據(jù),即發(fā)一條數(shù)據(jù)。發(fā)送的數(shù)據(jù)內(nèi)容為0x98765432
因此就可以看到上面的現(xiàn)象,MCU先收到AP的一條數(shù)據(jù),然后發(fā)給AP,AP再發(fā)給MCU,重復(fù)100次。
總結(jié)
本文介紹RK3568內(nèi)置的MCU的開發(fā)流程,并介紹了AP和MCU之間通過mailbox進行通信。多數(shù)的產(chǎn)品應(yīng)用中,RK3568都會搭配一個外置的MCU,來實現(xiàn)一些高實時的業(yè)務(wù),而自帶MCU是閑置的,如果能夠利用此MCU,可以省去外部MCU,降低復(fù)雜度。同時,使用片上的mailbox進行通信,速度更快,可靠性更高。
審核編輯 黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351186 -
RK3568
+關(guān)注
關(guān)注
4文章
514瀏覽量
5048
發(fā)布評論請先 登錄
相關(guān)推薦
評論