国产!全志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目录存放案例工程源文件。

备注:

  1. 无特殊说明情况下,本文默认使用NAND FLASH配置评估板,默认从Linux系统启动卡启动系统(SD启动模式)进行测试。
  2. Linux系统默认会初始化相关外设,不影响案例测试。
  3. 本文默认使用评估板USB TO UART0串口作为ARM端调试串口,RS232 UART2串口作为HiFi4 DSP/RISC-V核心调试串口,请使用Type-C线连接PC机和评估板的USB TO UART0串口,使用RS232交叉串口母母线、USB转RS232公头串口线,将评估板的RS232 UART2串口连接至PC机的USB接口,如下图所示。

图 1

rpmsg_echo案例

案例功能

案例主要使用RPMsg框架来实现异构的处理器之间进行相互通信。ARM Cortex-A7核心运行Linux系统与rpmsg_echo应用程序,HiFi4 DSP/RISC-V核心运行HiFi4 DSP/RISC-V程序,实现ARM端的rpmsg数据的接收与发送功能。

案例程序流程图如下:

图 2

程序原理说明:

  1. HiFi4 DSP/RISC-V等待接收ARM端的rpmsg数据;
  2. ARM端的rpmsg_echo应用程序发送rpmsg数据至HiFi4 DSP/RISC-V;
  3. 当HiFi4 DSP/RISC-V端接收到ARM端的rpmsg数据后会将数据发送回ARM端;
  4. ARM端将接收来自HiFi4 DSP/RISC-V的rpmsg数据;
  5. ARM端程序与HiFi4 DSP/RISC-V程序之间循环往复接收与发送rpmsg数据,实现核间通信。

案例测试

将评估板上电启动,在U-Boot倒计时结束之前按下空格键进入U-Boot命令行模式,执行如下命令关闭设备树UART2配置,避免Linux内核占用案例的外设资源。

**U-Boot#**fdt set /soc/uart@2500800 status disabled

**U-Boot#**boot

图 3

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核心并加载工程镜像

图 4

HiFi4 DSP核心启动后将自动运行程序,RS232 UART2串口终端将会打印如下类似信息。

图 5

将案例"arm\bin\"目录下的应用程序rpmsg_echo拷贝至评估板文件系统,执行如下命令查看程序参数信息。

Target# ./rpmsg_echo -h

参数解析:

-r <remoteproc_process_name>:rpmsg的控制节点;

-m <message>:发送的信息;

-n <num_msgs>:表示发送rpmsg数据包次数。

图 6

执行如下命令运行ARM端应用程序,发送5次rpmsg数据包至HiFi4 DSP核心,当HiFi4 DSP核心每收到1次rpmsg数据包就会将数据包发送回ARM端。

Target# ./rpmsg_echo -r dsp_rproc@0 -m tronlong -n 5

图 7

当ARM端程序运行时,RS232 UART2串口终端将会打印如下类似信息。

图 8

执行如下命令,关闭HiFi4 DSP核心,程序将停止运行。同时RS232 UART2调试串口终端会打印如下类似信息。

**Target#**echo stop > /sys/class/remoteproc/remoteproc0/state

图 9

图 10

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核心并加载工程镜像

图 11

RISC-V核心启动后将自动运行程序,RS232 UART2串口终端将会打印如下类似信息。

图 12

将案例"arm\bin\"目录下的应用程序rpmsg_echo拷贝至评估板文件系统,执行如下命令查看程序参数信息。

Target# ./rpmsg_echo -h

参数解析:

-r <remoteproc_process_name>:rpmsg的控制节点;

-m <message>:发送的信息;

-n <num_msgs>:表示发送rpmsg数据包的次数。

图 13

执行如下命令运行ARM端应用程序,发送5次rpmsg数据包至RISC-V核心,当RISC-V核心每收到1次rpmsg数据包就会将数据包发送回ARM端。

Target# ./rpmsg_echo -r c906_rproc\@0 -m tronlong -n 5

图 14

当ARM端程序运行时,RS232 UART2串口终端将会打印如下类似信息。

图 15

执行如下命令,关闭RISC-V核心,程序将停止运行。

**Target#**echo stop > /sys/class/remoteproc/remoteproc1/state

图 16

图 17

案例编译

请将产品资料"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

图 18

1.RISC-V程序

请根据《RISC-V案例开发手册》的工程编译、程序固化步骤生成工程镜像。

2.HiFi4 DSP程序

请根据《DSP案例开发手册》的工程编译、程序固化步骤生成工程镜像。

关键代码

1.ARM

main.c文件位于案例"rpmsg_echo\arm\src\"目录下。

创建并打开rpmsg端点。

图 19

通过rpmsg发送数据。

通过rpmsg接收数据。

图 21

关闭rpmsg端点

图 22

2.HiFi4 DSP

main.c文件位于案例"rpmsg_echo\dsp\src\"目录下。

创建任务并开始任务调度。

图 23

初始化msgbox和openamp,并创建rpmsg控制器和端点。

图 24

拷贝数据至信息队列。

图 25

申请内存,创建并开启rpmsg_echo_thread线程。

图 26

标记线程停止标志,释放内存。

图 27

3.RISC-V

main.c文件位于案例"rpmsg_echo\risc-v\src\"目录下。

初始化openamp,并创建rpmsg控制器和端点。

图 28

拷贝数据至信息队列。

图 29

申请内存,创建并开启rpmsg_echo_thread线程。

图 30

标记线程停止标志,释放内存。

图 31

相关推荐
普中科技1 天前
【普中STM32F1xx开发攻略--标准库版】-- 第 38 章 RS485 通信实验
stm32·单片机·嵌入式硬件·开发板·通信·rs485·普中科技
普中科技3 天前
【普中 51-Ai8051 开发攻略】-- 第 3 章 Ai8051U 介绍
单片机·嵌入式硬件·开发板·普中科技·ai8051u·aicube
wotaifuzao3 天前
从128-bit到16-bit:BLE UUID背后的带宽战争与架构设计
性能优化·蓝牙·uuid·低功耗蓝牙·架构设计·嵌入式开发·ble
ShiMetaPi5 天前
从帧触发到事件驱动:RGB+EVS多模态融合下的无人机识别重构
嵌入式硬件·计算机视觉·嵌入式开发·无人机避障·事件相机
Deepoch5 天前
Deepoc具身模型开发板:重塑银发科技关怀的智慧核心
人工智能·科技·开发板·智能·具身模型·deepoc·居家机器人
岩中竹5 天前
芯茂微 LP9961 全集成 LLC 谐振控制器技术详解与方案应用
硬件开发·国产替代·llc·电源技术·llc谐振
Tronlong创龙7 天前
RK3562 单板机多媒体开发完全手册:视频输入输出与 GStreamer 案例详解(一)
开发板·嵌入式开发·硬件开发·工业控制
CodeCraft Studio7 天前
构高可靠嵌入式软件开发环境:Green Hills嵌入式IDE、编译器与JTAG调试工具全面解析
ide·嵌入式硬件·嵌入式开发·c++编译器·嵌入式开发工具·green hills·jtag调试
BackCatK Chen10 天前
TMC2240 芯片数据手册解读 开篇+完整目录
嵌入式开发·电机驱动·tmc2240·tmc2240 数据手册解读·步进电机驱动 ic·芯片解读
CodeCraft Studio11 天前
从车载HMI到数字座舱平台:基于Qt与Qtitan UI组件的汽车嵌入式软件界面开发方案
qt·ui·汽车·嵌入式开发·ui组件·ui框架·数字座舱