前 言
本文主要介紹TL3562-MiniEVM評估板的AMP(Asymmetric Multi-processing)開發案例,適用開發環境如下:
Windows開發環境:Windows 7 64bit、Windows 10 64bit
Linux開發環境:VMware16.2.5、Ubuntu20.04.6 64bit
U-Boot:U-Boot-2017.09
Kernel:Linux-5.10.209
LinuxSDK:rk3562-ubuntu20.04-sdk-[版本號](基于rk3562_linux_release_v1.2.0)
工程調試工具:OpenOCD、Eclipse
評估板支持Linux(Kernel-5.10.209)、Baremetal(HAL)、RTOS(RT-Thread)組合的AMP混合架構設計,滿足如電力物聯網、電網繼電保護、電力系統安全控制、工業自動化的需求。
我司提供的AMP-SDK開發包基于官方的rk3562_linux_release_v1.2.0進行拆解。AMP-SDK開發包與AMP案例位于“4-軟件資料Demoamp-demos”目錄下,具體說明如下所示。
備注:
(1) a53-3_baremetal為Cortex-A53(CPU3)核心Baremetal工程文件;
(2) a53-3_rtos為Cortex-A53(CPU3)核心RT-Thread(RTOS)工程文件;
(3) m0_baremetal為Cortex-M0(MCU)核心Baremetal工程文件;
(4) m0_rtos為Cortex-M0(MCU)核心RT-Thread(RTOS)工程文件;
(5) a53-3_baremetal、a53-3_rtos、m0_baremetal、m0_rtos工程均可單獨與Linux端通信。
備注:不同案例目錄結構會有所不同,請以實際情況為準。
HAL(Hardware Abstraction Layer,硬件抽象層)是位于操作系統內核與硬件電路之間的接口層,其目的在于將硬件抽象化。瑞芯微的Standalone系統是一個簡單的、low-level的軟件層,內部實現基于HAL,提供對基本處理器特性(如Cache、Interrupts和Exceptions)的訪問,以及對基礎外設(如標準輸入和輸出、UART、CAN、GMAC、I2C等)的驅動支持。
RT-Thread(Real Time-Thread)是一款國產嵌入式開源實時多線程操作系統,由RT-Thread工作室的專業開發人員開發、維護。RT-Thread不僅僅是一款高效、穩定的實時核心,也是一套面向嵌入式系統的軟件平臺,覆蓋了全搶占的實時操作系統內核。
評估板簡介
創龍科技 TL3562-MiniEVM 是一款基于瑞芯微 RK3562J/RK3562 處理器設計的四核 ARM Cortex-A53 + 單核 ARM Cortex-M0 國產工業評估板,主頻高達 2.0GHz。評估板由核心板和評估底板組成,核心板 CPU、ROM、RAM、電源、晶振等所有元器件均采用國產工業級方案,國產化率 100%,評估底板大部分元器件亦采用國產工業級方案,國產化率約 99%(按元器件數量占比,數據僅供參考)。核心板經過專業的 PCB Layout 和高低溫測試驗證,支持選配屏蔽罩,質量穩定可靠,可滿足各種工業應用環境要求。
評估板引出 2 路 Ethernet、2 路 USB、Micro SD、UART 等通信接口,同時引出 2 路 M IPI CSI、LVDS LCD、MIPI LCD、HDMI OUT、MIC IN、SPK OUT、HP OUT 多媒體接口,支
持 1080P@60fps H.264 視頻編碼、4K@30fps H.265 視頻解碼。
評估板體積小巧,尺寸為 85x130mm,可作為卡片式電腦使用,且便于產品集成,方便用戶快速進行產品方案評估與技術預研。
評估板硬件資源圖解 1
評估板硬件資源圖解 2
開發環境搭建
本章節主要介紹基于Linux + RT-Thread(RTOS)、Baremetal的AMP案例的開發環境搭建。
打開Ubuntu,在任意目錄下執行如下命令,安裝AMP案例編譯所需的相關工具。
Host# sudo apt update
圖 1
Host# sudo apt install scons
圖 2
請將位于產品資料“4-軟件資料Demoamp-demosAMP-SDK”目錄下的AMP-SDK開發包AMP-SDK-[版本號].tar.gz拷貝至Ubuntu的RK3562工作目錄下,版本號請以實際情況為準。執行如下命令,將AMP-SDK開發包解壓至RK3562工作目錄。hal目錄用于存放裸機代碼,rt-thread目錄用于存放rt-thread代碼。
Host# tar -zxf amp-sdk-v1.0.tar.gz
圖 3
至此,AMP開發環境搭建完成。
工程編譯與固化
評估板支持Cortex-M0(MCU)、Cortex-A53(CPU3)核心運行Baremetal(HAL)、RTOS(RT-Thread)程序。本章節以led_flash案例為例,演示基于Linux + RT-Thread(RTOS)、Baremetal的AMP開發案例導入和編譯方法。
工程導入
Baremetal工程導入
(1) Cortex-M0(MCU)核心Baremetal工程導入
請將產品資料“4-軟件資料Demoamp-demosled_flashm0_baremetalproject”目錄下的整個工程源碼文件夾led_flash拷貝至AMP-SDK源碼目錄"hal/project/"下,如下圖所示。
圖 4 m0_baremetal
(2) Cortex-A53(CPU3)核心Baremetal工程導入
請將產品資料“4-軟件資料Demoamp-demosled_flasha53-3_baremetalproject”目錄下的整個工程源碼文件夾led_flash拷貝至AMP-SDK源碼目錄"hal/project/"下,如下圖所示。
圖 5 a53-3_baremetal
RT-Thread(RTOS)工程導入
(1) Cortex-M0(MCU)核心RT-Thread(RTOS)工程導入
請將產品資料“4-軟件資料Demoamp-demosled_flashm0_rtosproject”目錄下的整個工程源碼文件夾led_flash拷貝至AMP-SDK源碼目錄"rtos/bsp/rockchip/"下,如下圖所示。
圖 6 m0_rtos
(2) Cortex-A53(CPU3)核心RT-Thread(RTOS)工程導入
請將產品資料“4-軟件資料Demoamp-demosled_flasha53-3_rtosproject”目錄下的整個工程源碼文件夾led_flash拷貝至AMP-SDK源碼目錄"rtos/bsp/rockchip/"下,如下圖所示。
圖 7 a53-3_rtos
工程編譯
Baremetal工程編譯
(1) Cortex-M0(MCU)核心Baremetal工程編譯
在AMP-SDK目錄下,執行如下命令,進入"hal/project/led_flash/GCC/"目錄,對Baremetal工程進行編譯。
Host# cd hal/project/led_flash/GCC/
Host# make clean
Host# make
圖 8
圖 9
圖 10
編譯完成后,在"hal/project/led_flash/GCC/"目錄下生成程序鏡像文件TestDemo.bin。
圖 11
執行如下命令進入led_flash源碼目錄,將Baremetal程序鏡像文件TestDemo.bin制作生成amp.img鏡像文件。
備注:不同案例打印信息可能會有所差異,請以實際為準。
Host# cd /home/tronlong/RK3562/amp-sdk-v1.0/hal/project/led_flash/
Host# ./mkimage.sh
圖 12
制作完成后,將會在Image目錄下生成Baremetal工程的amp.img鏡像文件。
圖 13
(2) Cortex-A53(CPU3)核心Baremetal工程編譯
在AMP-SDK的目錄下,執行如下命令,進入"hal/project/led_flash/GCC/"目錄,對Baremetal工程進行編譯。
Host# cd hal/project/led_flash/GCC/
Host# make clean
Host# ./build.sh 3 //編譯在Cortex-A53(CPU3)上運行的程序
圖 14
圖 15
圖 16
編譯完成后,在"hal/project/led_flash/GCC/"目錄下生成程序鏡像文件hal3.bin。
圖 17
執行如下命令進入led_flash源碼目錄,將Baremetal程序鏡像文件hal3.bin制作生成amp.img鏡像文件。
備注:不同案例打印信息可能會有所差異,請以實際為準。
Host# cd /home/tronlong/RK3562/amp-sdk-v1.0/hal/project/led_flash
Host# ./mkimage.sh
圖 18
制作完成后,將會在Image目錄下生成Baremetal工程的amp.img鏡像文件。
圖 19
RT-Thread(RTOS)工程編譯
(1) Cortex-M0(MCU)核心RT-Thread(RTOS)工程編譯
執行如下命令,進入AMP-SDK下的"rtos/bsp/rockchip/led_flash/"目錄,配置交叉編譯工具鏈環境。
Host# cd /home/tronlong/RK3562/amp-sdk-v1.0/rtos/bsp/rockchip/led_flash/
Host# export RTT_EXEC_PATH=/home/tronlong/RK3562/amp-sdk-v1.0/prebuilts/gcc/linux-x86/arm/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux/bin
圖 20
執行如下命令,對RT-Thread(RTOS)工程進行編譯。
Host# scons -c
Host# scons
圖 21
圖 22
制作完成后,將會在當前目錄下生成RT-Thread(RTOS)工程的rtthread.bin程序鏡像文件。
圖 23
執行如下命令,將RT-Thread(RTOS)程序鏡像文件rtthread.bin制作生成amp.img鏡像文件。
Host# ./mkimage.sh
圖 24
制作完成后,將會在Image目錄下生成RT-Thread(RTOS)工程的amp.img鏡像文件。
圖 25
(2) Cortex-A53(CPU3)核心RT-Thread(RTOS)工程編譯
執行如下命令,進入AMP-SDK下的"rtos/bsp/rockchip/led_flash/"目錄,對RT-Thread(RTOS)工程進行編譯。
Host# cd /home/tronlong/RK3562/amp-sdk-v1.0/rtos/bsp/rockchip/led_flash
Host# ./build.sh 3
圖 26
圖 27
編譯完成后,將會在當前目錄下生成RT-Thread(RTOS)工程的rtt3.bin程序鏡像文件。
圖 28
執行如下命令,將RT-Thread程序鏡像文件rtt3.bin制作生成amp.img鏡像文件。
Host# ./mkimage.sh
圖 29
制作完成后,將會在Image目錄下生成RT-Thread(RTOS)工程的amp.img鏡像文件。
圖 30
配置文件說明
Cortex-M0(MCU)核心Baremetal/RT-Thread(RTOS)案例的配置文件為amp.its,Cortex-A53(CPU3)核心Baremetal/RT-Thread(RTOS)案例的配置文件為amp_linux.its,此文件均位于Baremetal/RT-Thread(RTOS)案例Image目錄下,負責描述打包生成amp.img鏡像的配置信息。在U-Boot啟動后,讀取amp.img并解析amp.img中的配置信息,然后根據配置信息加載Baremetal、RT-Thread(RTOS)程序到指定內存地址,并啟動Cortex-M0/Cortex-A53核心運行程序。
(1) amp.its
圖 31 Baremetal/RT-Thread(RTOS)程序配置文件amp.its
(2) amp_linux.its
圖 32 Baremetal/RT-Thread(RTOS)程序配置文件amp_linux.its
Baremetal/RT-Thread(RTOS)程序配置文件中的參數說明如下表所示:
工程固化
本小節以“4-軟件資料Demoamp-demosled_flashm0_baremetalbin”目錄下的amp.img鏡像文件為例,演示將amp.img鏡像固化至系統啟動卡或eMMC的加載運行方法。案例"m0_rtosbin"、"a53-3_baremetalbin"、"a53-3_rtosbin"目錄下的amp.img鏡像操作方法類似。
評估板重新上電啟動,在U-Boot啟動階段將讀取amp.img鏡像文件,解析amp.img中的配置信息(配置信息由amp配置文件保存在amp.img),并根據配置信息加載Baremetal、RT-Thread工程至指定內存地址,然后啟動指定CPU運行程序。
通過Linux命令行固化
請將待固化的amp.img鏡像拷貝至評估板文件系統,執行如下命令將其固化至系統啟動卡對應分區。
備注:如需固化至eMMC,請將設備節點修改為"/dev/mmcblk0p8"。
Target# dd if=amp.img of=/dev/mmcblk1p8 conv=fsync
Target# sync
Target# reboot
圖 33
通過瑞芯微開發工具RKDevTool固化
請確保評估板Micro SD卡槽未插入Micro SD卡,并使用Type-C線將評估板USB2.0 OTG接口連接至PC機USB接口。
備注:本小節操作方法僅支持固化amp.img鏡像文件至eMMC,不支持固化至系統啟動卡。
(1) 請參考《系統啟動卡制作及系統固化》文檔安裝瑞芯微開發工具RKDevTool。將待固化的amp.img鏡像文件拷貝至Windows非中文工作目錄下。
(2) 打開瑞芯微開發工具,amp選項選擇待固化的amp.img鏡像文件存放路徑,并勾選對應選項,具體如下圖所示。
圖 34
(3) 將評估板斷電,長按USER1(KEY3)按鍵,再將評估板上電,此時瑞芯微開發工具界面將會出現提示信息“發現一個LOADER設備”,然后松開USER1(KEY3)按鍵。
圖 35
(4) 點擊“執行”選項,將程序鏡像文件amp.img固化至eMMC。
圖 36
(5) 直至出現如下界面,提示“下載完成”的信息,表示將amp.img鏡像文件固化至eMMC成功,此時評估板將自動重啟。
圖 37
通過系統鏡像固化
請參考《Ubuntu系統使用手冊》拆解update.img系統鏡像,將“4-軟件資料Demoamp-demosled_flashm0_baremetalbin”目錄下的amp.img鏡像文件拷貝至Mkimage的"output/Image/"目錄下。
圖 38
執行如下命令,即可在"output/update"目錄合成新的update.img鏡像。
Host# ./mkimage.sh pack
圖 39
圖 40
請參考《系統啟動卡制作及系統固化》文檔,將系統鏡像文件固化至Micro SD卡或eMMC。
備注:Linux內核已預留Cortex-M0/Cortex-A53內存,評估板固化amp.img鏡像后,在U-Boot啟動時Cortex-M0/Cortex-A53將識別此部分內存已被占用,打印以下警告信息,忽略即可。
圖 41
圖 42
AMP開發案例
本章節主要介紹基于Linux + RT-Thread(RTOS)、Baremetal的AMP開發案例說明。
本章節默認使用系統啟動卡(即SD啟動卡,Micro SD方式)啟動系統,使用USB TO UART0串口作為系統調試串口,使用UART2串口作為RT-Thread(RTOS)、Baremetal程序的調試串口。
備注:UART2調試串口的波特率為115200。
請使用Type-C線將評估板USB TO UART0串口連接至PC機,使用杜邦線將USB TO TTL串口模塊與評估底板EXPORT0拓展口的UART2串口連接至PC機的USB接口。
圖 43
圖 44
led_flash案例
案例說明
案例功能:
(1) Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心運行Linux系統;Cortex-M0核心運行RT-Thread(即m0_rtos)、Baremetal(即m0_baremetal)程序,分別控制評估底板用戶可編程指示燈每隔0.5s閃爍一次。
(2) Cortex-A53(CPU0、CPU1、CPU2)核心運行Linux系統;Cortex-A53(CPU3)核心運行RT-Thread(即a53-3_rtos)、Baremetal(即a53-3_baremetal)程序,分別控制評估底板用戶可編程指示燈每隔0.5s閃爍一次。
圖 45
案例測試
請參考“工程編譯與固化”章節將位于案例目錄下"xxxbinamp.img"鏡像固化至評估板。
由于Linux內核會占用UART2串口、LED1和LED2外設資源,因此在運行Baremetal(HAL)、RTOS(RT-Thread)程序前,需先替換關閉相關外設資源的內核鏡像。我司提供已修改的內核鏡像boot.img,位于案例"dtsbin"目錄下,請將其拷貝至評估板文件系統,執行如下命令替換評估板系統內核鏡像。
備注:如需固化至eMMC,請將設備節點修改為"/dev/mmcblk0p3"。
Target# dd if=boot.img of=/dev/mmcblk1p3 conv=fsync //替換內核鏡像
Target# sync
Target# reboot
圖 46
U-Boot啟動后,將加載運行amp.img鏡像,UART2串口終端將打印程序運行信息,同時評估底板用戶可編程指示燈LED1、LED2每隔0.5s閃爍一次。
其中m0_baremetal、m0_rtos、a53-3_baremetal、a53-3_rtos程序鏡像固化后,UART2串口終端打印信息如下:
備注:評估板斷電時,UART2串口終端可能會打印亂碼信息,不影響正常功能,忽略即可。
圖 47 m0_baremetal
圖 48 m0_rtos
圖 49 a53-3_baremetal
圖 50 a53-3_rtos
測試完成后,如需恢復系統默認的內核鏡像,請將位于產品資料“4-軟件資料UbuntuKernelimagelinux-5.10.209-[版本號]-[Git系列號]”目錄下的內核鏡像boot.img拷貝至評估板文件系統,執行如下命令替換內核鏡像。
備注:如需固化至eMMC,請將設備節點修改為"/dev/mmcblk0p3"。
Target# dd if=boot.img of=/dev/mmcblk1p3 conv=fsync
Target# sync
Target# reboot
圖 51
案例編譯
(1) RT-Thread、Baremetal程序編譯
請參考“工程編譯與固化”章節將案例m0_baremetal、m0_rtos、a53-3_barametal或a53-3_rtos目錄下的程序源碼進行編譯。
(2) 內核編譯
為了避免Linux內核占用案例的外設資源,需替換或修改設備樹文件。
我司已提供配置好的設備樹文件,位于案例"dtssrctl3562-minievm-led-flash.dts"路徑下,可直接使用。如需重新編譯適用于本案例的內核鏡像,請將tl3562-minievm-led-flash.dts設備樹文件拷貝至內核源碼"arch/arm64/boot/dts/rockchip/"目錄下,然后參考《Ubuntu系統使用手冊》文檔“編譯設備樹文件”章節重新編譯生成內核鏡像即可。
其中,tl3562-minievm-led-flash.dts設備樹文件是基于內核源碼"arch/arm64/boot/dts/rockchip/"目錄下的tl3562-minievm.dts設備樹文件修改配置的。
修改內容如下:
a) 關閉user_led0、user_led1節點。
圖 52 tl3562-minievm-led-flash.dts
b) 配置rockchip_amp節點。
由于修改了設備樹文件關閉UART2節點,系統啟動時默認關閉UART2時鐘及不配置UART2 pinctrl,因此需在rockchip_amp節點配置UART2時鐘及UART2 pinctrl,保證系統啟動后UART2功能正常,并加入UART2中斷配置,使Cortex-A53(CPU3)正常響應UART2中斷。
圖 53 tl3562-minievm.dts
修改內容如下:
&rockchip_amp {
clocks = <&cru FCLK_BUS_CM0_CORE>, <&cru CLK_BUS_CM0_RTC>,
<&cru PCLK_MAILBOX>, <&cru PCLK_INTC>,
<&cru PCLK_TIMER>, <&cru CLK_TIMER4>, <&cru CLK_TIMER5>,
<&cru SCLK_UART2>, <&cru PCLK_UART2>; //需修改內容
amp-irqs = /bits/ 64 ; //需修改內容
pinctrl-names = "default"; //需修改內容
pinctrl-0 = <&uart2m1_xfer>; //需修改內容
};
圖 54 tl3562-minievm-led-flash.dts
c) 配置princtrl節點
由于UART2串口作為RT-Thread(RTOS)、Baremetal程序的調試串口,需使用UART2引腳,因此需刪除Linux內核占用的引腳。
圖 55 tl3562-minievm-led-flash.dts
刪除如下內容:
0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none
0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none
關鍵代碼
本案例Baremetal程序Cortex-M0(MCU)、Cortex-A53(CPU3)核心控制評估底板的LED1、LED2的關鍵代碼相同;RT-Thread(RTOS)程序Cortex-M0(MCU)、Cortex-A53(CPU3)核心控制評估底板的LED1、LED2的關鍵代碼相同。
(1) Baremetal程序
Baremetal程序的main.c文件位于案例"xxxprojectled_flashsrc"目錄下。
a) 初始化GPIO。
圖 56
b) 控制LED每隔0.5s狀態翻轉。
圖 57
(2) RT-Thread(RTOS)程序
RT-Thread(RTOS)程序的main.c文件位于案例"xxxprojectled_flashapplications"目錄下。
a) 初始化GPIO。
圖 58
b) 控制LED每隔0.5s狀態翻轉。
圖 59
(3) amp.its配置文件
amp.its配置文件為Cortex-M0(MCU)核心配置文件,amp_linux.its配置文件為Cortex-A53(CPU3)核心配置文件,均位于案例Image目錄下,負責描述打包生成amp.img鏡像的配置信息。
圖 60 Baremetal/RT-Thread程序配置文件amp.its
圖 61 Baremetal/RT-Thread程序配置文件amp_linux.its
uart_echo案例
案例說明
案例功能:
(1) Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心運行Linux系統;Cortex-M0(MCU)核心運行RT-Thread(即m0_rtos)、Baremetal(即m0_baremetal)程序,實現UART3串口回顯功能。
(2) Cortex-A53(CPU0、CPU1、CPU2)核心運行Linux系統;Cortex-A53(CPU3)核心運行RT-Thread(即a53-3_rtos)、Baremetal(即a53-3_baremetal)程序,實現UART3串口回顯功能。
圖 62
案例測試
請使用Type-C線將評估板USB TO UART0串口連接至PC機,使用杜邦線將兩個USB TO TTL串口模塊與評估底板EXPORT0拓展口的UART2和UART3串口連接至PC機的USB接口。
兩個USB TO TTL串口模塊與評估底板EXPORT0拓展口的UART2和UART3串口連接方法如下表所示。
UART2連接關系
UART3連接關系
圖 63
硬件連接如下圖所示。
圖 64
請參考“工程編譯與固化”章節將位于案例目錄下"xxxbinamp.img"鏡像固化至評估板。
由于Linux內核會占用RS232 UART2串口、RS485 UART3串口外設資源,因此在運行Baremetal(HAL)、RTOS(RT-Thread)程序前,需先替換關閉相關外設資源的內核鏡像。我司提供已修改的內核鏡像boot.img,位于案例"dtsbin"目錄下,請將其拷貝至評估板文件系統,執行如下命令替換評估板系統內核鏡像。
備注:如需固化至eMMC,請將設備節點修改為"/dev/mmcblk0p3"。
Target# dd if=boot.img of=/dev/mmcblk1p3 conv=fsync //替換內核鏡像
Target# sync
Target# reboot
圖 65
U-Boot啟動后,將加載運行amp.img鏡像,UART2串口終端將打印程序運行信息。
其中m0_baremetal、m0_rtos、a53-3_baremetal、a53-3_rtos程序鏡像固化后,UART2串口終端打印信息如下:
圖 66 m0_baremetal
圖 67 m0_rtos
圖 68 a53-3_baremetal
圖 69 a53-3_rtos
在UART3串口終端輸入8個字符后按回車,串口終端將回顯接收到的字符。
圖 70
備注:評估板斷電時,UART2串口終端可能會打印亂碼信息,不影響功能使用,忽略即可。
案例編譯
(1) RT-Thread(RTOS)、Baremetal程序編譯
請參考“工程編譯與固化”章節將案例m0_baremetal、m0_rtos、a53-3_barametal或a53-3_rtos目錄下的程序源碼進行編譯。
(2) 內核編譯
為了避免Linux內核占用案例的外設資源,需替換或修改設備樹文件。
我司已提供配置修改好的設備樹文件,位于案例目錄下"dtssrctl3562-minievm-uart-echo.dts",可直接使用。如需重新編譯本案例內核鏡像,請將tl3562-minievm-uart-echo.dts設備樹文件拷貝至內核源碼"arch/arm64/boot/dts/rockchip/"目錄下,然后參考《Ubuntu系統使用手冊》文檔“編譯設備樹文件”章節重新編譯生成內核鏡像即可。
其中,tl3562-minievm-uart-echo.dts設備樹文件是基于內核源碼"arch/arm64/boot/dts/rockchip/"目錄下的tl3562-minievm.dts設備樹文件修改配置的。
修改內容如下:
a) 修改設備樹文件關閉設備樹uart3和uart2節點。
圖 71 tl3562-minievm.dts
圖 72 tl3562-minievm.dts
b) 配置rockchip_amp節點。
由于修改了設備樹文件關閉UART2節點和UART3節點,系統啟動時默認關閉UART2、UART3時鐘及不配置UART2 pinctrl、UART3 pinctrl,因此需在rockchip_amp節點配置UART2、UART3時鐘及不配置UART2 pinctrl、UART3 pinctrl,保證系統啟動后UART2和UART3功能正常,并加入UART2、UART3中斷配置,使Cortex-A53(CPU3)正常響應UART2、UART3中斷。
修改內容如下:
&rockchip_amp {
clocks = <&cru FCLK_BUS_CM0_CORE>, <&cru CLK_BUS_CM0_RTC>,
<&cru PCLK_MAILBOX>, <&cru PCLK_INTC>,
<&cru PCLK_TIMER>, <&cru CLK_TIMER4>, <&cru CLK_TIMER5>,
<&cru SCLK_UART2>, <&cru PCLK_UART2>,
<&cru SCLK_UART3>, <&cru PCLK_UART3>;
amp-irqs = /bits/ 64
GIC_AMP_IRQ_CFG_ROUTE(64, 0xd0, CPU_GET_AFFINITY(3, 0))
GIC_AMP_IRQ_CFG_ROUTE(65, 0xd0, CPU_GET_AFFINITY(3, 0))>;
pinctrl-names = "default";
pinctrl-0 = <&uart2m0_xfer &uart3m0_xfer>;
};
圖 73 tl3562-minievm-uart-echo.dts
c) 配置princtrl節點
由于UART2串口作為RT-Thread(RTOS)、Baremetal程序的調試串口,UART3用于案例串口回顯功能,需使用UART2、UART3引腳,因此需刪除Linux內核占用的引腳。
圖 74 tl3562-minievm-uart-echo.dts
刪除如下內容:
0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none
0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none
4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none
4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none
關鍵代碼
(1) m0_baremetal/m0_rtos程序關鍵代碼
m0_baremetal程序的main.c文件位于案例"m0_baremetalprojectuart_echosrc"目錄下,m0_rtos程序的main.c文件位于案例"m0_rtosprojectuart_echoapplications"目錄下。其中,Baremetal與RT-Thread程序main.c文件的關鍵代碼相同。
備注:main.c源碼文件中包含官方板級初始化代碼,本小節僅對程序的關鍵代碼進行說明。
a) 初始化UART3及其中斷。
圖 75 main.c
b) 清除數據buf,拉低流控GPIO,準備接收數據。
圖 76 main.c
c) 在中斷處理函數中,接收8個字節后,拉高流控GPIO,把接收的8個字節發送回去。
圖 77 main.c
d) amp.its配置文件位于RT-Thread(RTOS)/Baremetal案例Image目錄下,負責描述打包生成amp.img鏡像的配置信息。
圖 78 amp.its
(2) a53-3_baremetal/a53-3_rtos核心程序關鍵代碼
Baremetal程序的main.c文件位于案例"a53-3_baremetalprojectuart_echosrc"目錄下,RT-Thread程序的main.c文件位于案例"a53-3_rtosprojectuart_echoapplications"目錄下。其中,Baremetal與RT-Thread程序main.c文件的關鍵代碼存在差異,具體說明如下。
備注:main.c源碼文件中包含官方板級初始化代碼,本小節僅對程序的關鍵代碼進行說明。
a) 初始化UART3及其中斷。
圖 79 a53-3_baremetal main.c程序
圖 80 a53-3_rtos main.c程序
b) 清除數據buf,拉低流控GPIO,準備接收數據。
圖 81 a53-3_baremetal main.c程序
圖 82 a53-3_rtos main.c程序
c) 中斷處理函數中,接收8個字節后,拉高流控GPIO,把接收的8個字節發送回去。
圖 83 a53-3_baremetal main.c程序
圖 84 a53-3_rtos main.c程序
d) amp_linux.its配置文件位于RT-Thread(RTOS)/Baremetal案例Image目錄下,負責描述打包生成amp.img鏡像的配置信息。
圖 85 amp_linux.its
rpmsg_echo案例
案例說明
案例功能:
(1) Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心運行Linux系統與rpmsg_echo應用程序(即host_linux);Cortex-M0(MCU)核心運行RT-Thread(即m0_rtos)、Baremetal(即m0_baremetal)程序,實現Linux端的rpmsg數據的接收與發送功能。
(2) Cortex-A53(CPU0、CPU1、CPU2)核心運行Linux系統與rpmsg_echo應用程序(即host_linux);Cortex-A53(CPU3)核心運行RT-Thread(即a53-3_rtos)、Baremetal(即a53-3_baremetal)程序,實現Linux端的rpmsg數據的接收與發送功能。
案例程序原理如下:
a) RT-Thread(RTOS)、Baremetal端等待接收Linux端的rpmsg數據;
b) Linux端的rpmsg_echo應用程序發送rpmsg數據至RT-Thread(RTOS)、Baremetal端;
c) 當RT-Thread(RTOS)、Baremetal端接收到來至Linux端的rpmsg數據后會將數據發送回Linux端;
d) Linux端將接收來自RT-Thread(RTOS)、Baremetal端的rpmsg數據;
e) Linux程序與RT-Thread(RTOS)、Baremetal程序之間循環往復接收與發送rpmsg數據,實現核間通信。
案例程序流程圖如下:
圖 86
案例測試
請參考“工程編譯與固化”章節將位于案例目錄下"xxxbinamp.img"鏡像固化至評估板。
為了使Linux端的rpmsg正常運行,需按如下步驟替換評估板系統內核鏡像。請將案例"dtsbin"目錄下的內核鏡像boot-rpmsg-echo-mcu.img拷貝至評估板文件系統,執行如下命令將其固化至系統啟動卡。
備注:
a) 如需固化至eMMC,請將設備節點修改為"/dev/mmcblk0p3";
b) 如需運行Cortex-A53(CPU3)核心案例程序,請將內核鏡像替換為boot-rpmsg-echo-a53-3.img內核鏡像。
Target# dd if=boot-rpmsg-echo-mcu.img of=/dev/mmcblk1p3 conv=fsync
Target# sync
Target# reboot
圖 87
U-Boot啟動后,將加載運行amp.img鏡像,UART2串口終端將打印程序運行信息。
圖 88 m0_baremetal
圖 89 m0_rtos
圖 90 a53-3_baremetal
圖 91 a53-3_rtos
將案例"host_linuxbin"目錄下的應用程序rpmsg_echo拷貝至評估板文件系統,執行如下命令查看程序參數信息。"-n"表示rpmsg數據包個數,默認為10。
Target# ./rpmsg_echo -h
圖 92
執行如下命令運行Linux應用程序,發送8個rpmsg數據包至運行Baremetal程序的Cortex-M0核心,當Cortex-M0核心每收到1個rpmsg數據包就會將數據包發送回Linux端。rpmsg數據包內容為"hello there x!"(x是rpmsg數據包序號,每發送一次加1)。
Target# ./rpmsg_echo -n 8
圖 93
備注:評估板斷電時,UART2串口終端可能會打印亂碼信息,不影響功能使用,忽略即可。
案例編譯
(1) RT-Thread(RTOS)、Baremetal程序編譯
請參考“工程編譯與固化”章節將案例m0_baremetal、m0_rtos、a53-3_barametal或a53-3_rtos目錄下的程序源碼進行編譯。
(2) 內核編譯
為了避免Linux內核占用案例的外設資源,需替換或修改設備樹文件。
我司已提供配置修改好的設備樹文件,位于案例目錄"dtssrc"下,可直接使用。如需重新編譯本案例內核鏡像,請將設備樹文件拷貝至內核源碼"arch/arm64/boot/dts/rockchip/"目錄下,然后參考《Ubuntu系統使用手冊》文檔“編譯設備樹文件”章節重新編譯生成內核鏡像即可。
其中,tl3562-minievm-rpmsg-echo-mcu.dts設備樹和tl3562-minievm-rpmsg-echo-a53-3.dts設備樹文件是基于內核源碼"arch/arm64/boot/dts/rockchip/"目錄下的tl3562-minievm.dts設備樹文件修改配置的。
修改內容如下:
a) 關閉設備樹uart2節點。
圖 94 tl3562-minievm -rpmsg-echo-mcu.dts
b) 配置rockchip_amp節點。
由于修改了設備樹文件關閉UART2節點,系統啟動時默認關閉UART2時鐘以及不配置UART2 pinctrl,因此需在rockchip_amp節點配置UART2時鐘以及UART2 pinctrl,保證系統啟動后UART2功能正常,并加入UART2、MAILBOX中斷配置,使Cortex-A53(CPU3)正常響應UART2、MAILBOX中斷。
修改內容如下:
&rockchip_amp {
clocks = <&cru FCLK_BUS_CM0_CORE>, <&cru CLK_BUS_CM0_RTC>,
<&cru PCLK_MAILBOX>, <&cru PCLK_INTC>,
<&cru PCLK_TIMER>, <&cru CLK_TIMER4>, <&cru CLK_TIMER5>,
<&cru SCLK_UART2>, <&cru PCLK_UART2>;
amp-irqs = /bits/ 64
GIC_AMP_IRQ_CFG_ROUTE(64, 0xd0, CPU_GET_AFFINITY(3, 0))>;
pinctrl-names = "default";
pinctrl-0 = <&uart2m0_xfer>;
};
圖 95 tl3562-minievm -rpmsg-echo-mcu.dts
c) 配置rpmsg節點。link-id參數為運行案例程序CPU序號,0x03為Cortex-A53(CPU3),0x04為Cortex-M0(MCU)。
圖 96 tl3562-minievm -rpmsg-echo-mcu.dts
(3) Linux應用程序編譯
請將案例host_linux目錄下的src源碼目錄拷貝至Ubuntu工作目錄下。執行如下命令,配置應用程序交叉編譯工具鏈環境變量,并編譯程序,編譯完成將會在相同目錄下生成可執行程序。
Host# source /home/tronlong/RK3562/Ubuntu/rk3562-ubuntu20.04-sdk-v1.0/environment
Host# make
圖 97
關鍵代碼
本案例Baremetal程序Cortex-M0(MCU)、Cortex-A53(CPU3)核心的關鍵代碼相同;RT-Thread(RTOS)程序Cortex-M0(MCU)、Cortex-A53(CPU3)核心的關鍵代碼相同。
(1) Baremetal程序關鍵代碼
Baremetal程序的main.c文件位于案例"xxxprojectrpmsg_echosrc"目錄下。
備注:main.c源碼文件中包含官方板級初始化代碼,本小節僅對程序的關鍵代碼進行說明。
a) 檢查共享內存,確定主從CPU ID。
圖 98 main.c
b) 初始化rpmsg,并等待與Linux連接。
圖 99 main.c
c) 與Linux連接成功后,創建rpmsg端點,并把端點信息傳遞至Linux。
圖 100 main.c
d) 接收到rpmsg數據包后將數據包發送回Linux。
圖 101 main.c
e) amp配置文件位于RT-Thread(RTOS)/Baremetal案例Image目錄下,負責描述打包生成amp.img鏡像的配置信息。
圖 102 amp.its
圖 103 amp_linux.its
(2) RT-Thread程序關鍵代碼
RT-Thread程序的main.c文件位于案例"xxxprojectrpmsg_echoapplications"目錄下。
a) 檢查共享內存,確定主從CPU ID。
圖 104 main.c
b) 初始化rpmsg,設定等待超時時間為10s,并等待與Linux連接。
圖 105 main.c
c) 與Linux連接成功后,創建rpmsg端點,并把端點信息傳遞至Linux。
圖 106 main.c
d) 接收到rpmsg數據包后將數據包發送回Linux。
圖 107 main.c
(3) Linux端程序關鍵代碼
Linux端程序的rpmsg_echo.c文件位于案例"rpmsg_echohost_linuxsrc"目錄下。
a) 創建并打開rpmsg端點。
圖 108
b) 點地址選擇準則如下。
本地端點地址(RPMSG_MASTER_ADDR):由于1024及以下的端點地址被Linux內核使用,因此本地端點地址需指定大于1024。
遠程端點地址(RPMSG_REMOTE_ADDR):需與Baremetal程序設定的端點地址對應。
圖 109 rpmsg_echo.c文件
圖 110 Baremetal程序main.c文件
c) 構建數據包,通過rpmsg將數據包發送出去,再通過rpmsg接收數據包。
圖 111
審核編輯 黃宇
-
瑞芯微
+關注
關注
24文章
512瀏覽量
52026 -
評估板
+關注
關注
1文章
587瀏覽量
29844 -
RK3562
+關注
關注
0文章
55瀏覽量
265
發布評論請先 登錄
相關推薦
新一代低價開發板芯片RK3562來啦! — 觸覺智能RK3562開發板

基于瑞芯微RK3562 四核 ARM Cortex-A53 + 單核 ARM Cortex-M0工業評估板——NPU開發案列

基于瑞芯微RK3576國產ARM八核2.2GHz A72 工業評估板——Docker容器部署方法說明

新品發布 ▏國產工業級核心+1TOPS算力,瑞芯微RK3562_Mini開發板打造靈活工業解決方案

評論