國產!全志T113-i 雙核Cortex-A7@1.2GHz 工業開發板—ARM + DSP、RISC-V核間通信開發案例
前 言
本文檔主要介紹T113-i處理器的ARM + DSP、RISC-V核間通信開發案例,演示T113-i處理器ARM Cortex-A7與HiFi4 DSP核心、玄鐵C906 RISC-V核心的核間通信。適用開發環境如下:
Windows開發環境:Windows 7 64bit、Windows 10 64bit
虛擬機:VMware15.5.5
Linux開發環境:Ubuntu18.04.4 64bit
U-Boot:U-Boot-2018.07
Kernel:Linux-5.4.61
LinuxSDK:T113_Tina5.0-V1.0(Linux)
T113-i處理器支持Linux(Kernel-5.4.61)、HiFi4 DSP、玄鐵C906 RISC-V組合的OpenAMP架構設計,可滿足如工業HMI、工業PLC、物聯網網關、機器人示教器、戶用儲能EMS/BMS、汽車充電樁的需求。
我司提供的ARM + DSP、RISC-V核間通信開發案例位于產品資料“4-軟件資料\Demo\platform-demos\rpmsg_echo\”目錄下,案例目錄說明如下表所示,其中bin目錄存放程序可執行文件,src目錄存放案例工程源文件。

備注:
- 無特殊說明情況下,本文默認使用NAND FLASH配置評估板,默認從Linux系統啟動卡啟動系統(SD啟動模式)進行測試。
- Linux系統默認會初始化相關外設,不影響案例測試。
- 本文默認使用評估板USB TO UART0串口作為ARM端調試串口,RS232 UART2串口作為HiFi4 DSP/RISC-V核心調試串口,請使用Type-C線連接PC機和評估板的USB TO UART0串口,使用RS232交叉串口母母線、USB轉RS232公頭串口線,將評估板的RS232 UART2串口連接至PC機的USB接口,如下圖所示。

rpmsg_echo案例
案例功能
案例主要使用RPMsg框架來實現異構的處理器之間進行相互通信。ARM Cortex-A7核心運行Linux系統與rpmsg_echo應用程序,HiFi4 DSP/RISC-V核心運行HiFi4 DSP/RISC-V程序,實現ARM端的rpmsg數據的接收與發送功能。
案例程序流程圖如下:

程序原理說明:
- HiFi4 DSP/RISC-V等待接收ARM端的rpmsg數據;
- ARM端的rpmsg_echo應用程序發送rpmsg數據至HiFi4 DSP/RISC-V;
- 當HiFi4 DSP/RISC-V端接收到ARM端的rpmsg數據后會將數據發送回ARM端;
- ARM端將接收來自HiFi4 DSP/RISC-V的rpmsg數據;
- ARM端程序與HiFi4 DSP/RISC-V程序之間循環往復接收與發送rpmsg數據,實現核間通信。
案例測試
將評估板上電啟動,在U-Boot倒計時結束之前按下空格鍵進入U-Boot命令行模式,執行如下命令關閉設備樹UART2配置,避免Linux內核占用案例的外設資源。
U-Boot# fdt set /soc/uart@2500800 status disabled
U-Boot# boot

1.ARM Cortex-A7與HiFi4 DSP核心通信
將本案例"dsp\bin\"目錄下的可執行文件amp_dsp0.bin拷貝至評估板系統的"/lib/firmware/"目錄下,執行如下命令,啟動HiFi4 DSP核心并加載工程鏡像。
Target# echo amp_dsp0.bin > /sys/class/remoteproc/remoteproc0/firmware //指定加載的工程鏡像
Target# echo start > /sys/class/remoteproc/remoteproc0/state //啟用HiFi4 DSP核心并加載工程鏡像

HiFi4 DSP核心啟動后將自動運行程序,RS232 UART2串口終端將會打印如下類似信息。

將案例"arm\bin\"目錄下的應用程序rpmsg_echo拷貝至評估板文件系統,執行如下命令查看程序參數信息。
Target# ./rpmsg_echo -h
參數解析:
-r :rpmsg的控制節點;
-m :發送的信息;
-n :表示發送rpmsg數據包次數。

執行如下命令運行ARM端應用程序,發送5次rpmsg數據包至HiFi4 DSP核心,當HiFi4 DSP核心每收到1次rpmsg數據包就會將數據包發送回ARM端。
Target# ./rpmsg_echo -r dsp_rproc@0 -m tronlong -n 5

當ARM端程序運行時,RS232 UART2串口終端將會打印如下類似信息。

執行如下命令,關閉HiFi4 DSP核心,程序將停止運行。同時RS232 UART2調試串口終端會打印如下類似信息。
Target# echo stop > /sys/class/remoteproc/remoteproc0/state


2.ARM Cortex-A7與RISC-V核心通信
將本案例"risc-v\bin\"目錄下的可執行文件amp_rv0.bin拷貝至評估板系統的"/lib/firmware/"目錄下,執行如下命令,啟動RISC-V核心并加載工程鏡像。
Target# echo amp_rv0.bin > /sys/class/remoteproc/remoteproc1/firmware //指定加載的工程鏡像
Target# echo start > /sys/class/remoteproc/remoteproc1/state //啟用HiFi4 DSP核心并加載工程鏡像

RISC-V核心啟動后將自動運行程序,RS232 UART2串口終端將會打印如下類似信息。

將案例"arm\bin\"目錄下的應用程序rpmsg_echo拷貝至評估板文件系統,執行如下命令查看程序參數信息。
Target# ./rpmsg_echo -h
參數解析:
-r :rpmsg的控制節點;
-m :發送的信息;
-n :表示發送rpmsg數據包的次數。

執行如下命令運行ARM端應用程序,發送5次rpmsg數據包至RISC-V核心,當RISC-V核心每收到1次rpmsg數據包就會將數據包發送回ARM端。
Target# ./rpmsg_echo -r c906_rproc\@0 -m tronlong -n 5

當ARM端程序運行時,RS232 UART2串口終端將會打印如下類似信息。

執行如下命令,關閉RISC-V核心,程序將停止運行。
Target# echo stop > /sys/class/remoteproc/remoteproc1/state


案例編譯
請將產品資料“4-軟件資料\Demo\platform-demos\rpmsg_echo\”案例目錄下的arm、dsp和risc-v目錄的源碼拷貝至Ubuntu工作目錄。
1.ARM程序
進入案例應用程序源碼目錄,執行如下命令,配置應用程序交叉編譯工具鏈環境變量,然后進行編譯,編譯完成將會在當前目錄下生成rpmsg_echo可執行程序。
備注:若為eMMC配置評估板,請將路徑"tlt113-evm-nand"修改為"tlt113-evm-emmc"。
Host# CC=/home/tronlong/T113/tina5.0_v1.0/out/t113_i/tlt113-evm-nand/buildroot/buildroot/host/bin/arm-linux-gnueabi-gcc make

1.RISC-V程序
請根據《RISC-V案例開發手冊》的工程編譯、程序固化步驟生成工程鏡像。
2.HiFi4 DSP程序
請根據《DSP案例開發手冊》的工程編譯、程序固化步驟生成工程鏡像。
關鍵代碼
1.ARM
main.c文件位于案例"rpmsg_echo\arm\src\"目錄下。
創建并打開rpmsg端點。

通過rpmsg發送數據。

通過rpmsg接收數據。

關閉rpmsg端點

2.HiFi4 DSP
main.c文件位于案例"rpmsg_echo\dsp\src\"目錄下。
創建任務并開始任務調度。

初始化msgbox和openamp,并創建rpmsg控制器和端點。

拷貝數據至信息隊列。

申請內存,創建并開啟rpmsg_echo_thread線程。

標記線程停止標志,釋放內存。

3.RISC-V
main.c文件位于案例"rpmsg_echo\risc-v\src\"目錄下。
初始化openamp,并創建rpmsg控制器和端點。

拷貝數據至信息隊列。

申請內存,創建并開啟rpmsg_echo_thread線程。

標記線程停止標志,釋放內存。


本文檔主要介紹T113-i處理器的ARM + DSP、RISC-V核間通信開發案例,演示T113-i處理器ARM Cortex-A7與HiFi4 DSP核心、玄鐵C906 RISC-V核心的核間通信。
浙公網安備 33010602011771號