0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3568内置MCU开发介绍之一

chen 来源:chen 作者:chen 2024-12-01 16:09 次阅读

本文介绍RK3568内置的MCU的开发流程,首先介绍MCU程序的构建方法,然后介绍MCU核心与ARM CORTEX A55 AP核心之间的mailbox通信

RK3568内置有4*cortex A55(下文简称AP)和1个RISCV(下文简称MCU)。

wKgZPGdLMg-AFkS0AAA5BGKqG3E264.png

硬件准备

首先介绍一下硬件。主板为风火轮科技的YY3568开发板,主控RK3568。此开发板的相关介绍可以参考

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

RK3568的MCU核心需要使用串口调试,笔者这里使用的是UART4,这里也可以选择其他的,不要跟AP核心的调试串口UART2冲突就行。UART4的位置如下

wKgZO2dLMhGANJMpAAPGb2edcmk906.png

RK3568内置MCU介绍

RK3568内置的MCU核心特性如下:

wKgZO2dLMhCAFtPyAAF0UXDw01o152.png

可以看出这是一个RV32I架构的核心,此核心具体型号不明,主频200MHz

另外从介绍上面看,这个核心没有独立的RAM和flash,所以需要从RK3568的EMMC和DDR上面划分出flash和RAM来支持其运行。

软件介绍

目前RK新版本的Linux SDK已经支持了AMP功能。AMP(Asymmetric Multi-Processing)系统是一种非对称多核异构系统,即在同一芯片内,通过分组CPU,并在不同组的CPU内运行不同的系统。在RK3568上,将Cortex-A55 * 4作为主要核心,运行Linux系统; RISC-V * 1`作为辅助核心跑裸核系统,辅助Linux系统实现快速响应和控制。软件支持如下所示

wKgZO2dLMg-AQVhVAABwV3Z8wiI266.png

RK3568新版的SDK目录如下

wKgZPGdLMg-AKtx-AACu8LjOtV0718.png

相比旧版本的SDK,这里增加了rtos目录,是用于存放RTT源码的,此外external目录下有个hal目录,用于存放bare-metal,也就是裸机的源码。本文重点介绍bare-metal部分,后面的文章会介绍RTT的。

打开hal目录,内容如下

wKgZO2dLMg-AEYGWAABqI-UiVbs084.png

application里面是一些应用示例,board里面的内容没用,可以忽略

doc是开发文档

lib里面是cmsis以及外设库的源码,类似于STM32工程的Drivers目录

middleware里面是中间件的源码,包括rpmsg openamp等

project包含了目前RK所有平台(ap+mcu)的启动文件,main.c,以及编译,打包脚本

test和tools目录也可以忽略

MCU bare-metal程序的构建方法与打包

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下面,注意目录不要搞错,不然后面的构建脚本会找不到工具链

wKgZPGdLMg-APHdPAAAfE0BWw4w022.png

2.在工程根目录下打开external/hal/project/common/GCC/riscv.mk文件,进行如下修改,指定工具链位置

wKgZO2dLMg-AHKK9AACQMgh2NWU795.png

3.在工程根目录下打开external/hal/project/rk3568-mcu目录。此为rk3568-mcu工程

wKgZPGdLMg-AOx6NAAAlP8bbpqA502.png

源码在src目录下,这里添加MCU的打印信息。打开src目录里面的main.c,取消

TEST_USE_UART4M1的注释,这样MCU可以使用UART4进行打印。

wKgZO2dLMg-AC9TpAAAIDZNKCUs800.png

4.rk3568-mcu的GCC目录有构建脚本。打开GCC目录,在此目录下面执行make。编译结果如下

wKgZPGdLMg-ARgKrAACQI8dbc2w138.png

编译之后在此目录下可以看到TestDemo.bin文件,即为可执行程序

5. rk3568-mcu目录下的mkimage.sh,可以将TestDemo.bin转换为分区映像,执行此脚本,会在Image下生成amp.img,此分区映像需要烧写到EMMC一个分区上面。

6.按照RK的默认配置构建整个Linux工程。这个构建工程可以参考RK SDK下面的Rockchip_Developer_Guide_Linux_Software_CN.pdf文档,这里不赘述。构建之后可以在SDK的output目录下可以得到firmware目录,这个为当前打包使用的各个分区映像的软链接。

7.对AP端的部分内容做修改。

分区表增加amp分区

wKgZO2dLMg-AaLPPAAAxfIufm6E975.png

package-file打包文件中增加amp分区映像

wKgZPGdLMg-ANcg3AAAx2n-v3Bw740.png

uboot端打开rk-amp.config,使能uboot阶段加载MCU固件到指定DDR地址的操作。可以在device/rockchip/.chips/rk3566_rk3568的配置文件增加此配置项

wKgZO2dLMg-AH-IRAAAJRV7MASI387.png

kernel端修改设备树,增加amp预留内存。在使用的设备树文件增加#include "rk3568-amp.dtsi"

wKgZPGdLMg-AA9YDAAAfBfptww4124.png

8.将步骤5生成的amp.img,复制到步骤6所述的firmware目录中

然后再次构建整个固件,如果操作无误,则可以生成一个update.img文件。这里明确会将amp.img添加到烧录包里面

wKgZO2dLMg-Aca83AABYW1riQBc857.png

9.将生成的固件烧录到板上,串口4上面配置为1500000波特率,可以看到如下所示的log

wKgZPGdLMg-ADKslAAAfBfptww4653.png

MCU与AP的mailbox通信

RK3568硬件上面有一组mailbox,用于实现MCU与AP通信

1.AP端做如下修改

在kernel的defconfig中增加

CONFIG_ROCKCHIP_MBOX_DEMO=m

打开mailbox的demo

在kernel的rk3568-amp.dtsi中关闭rpmsg对mailbox的占用

wKgZO2dLMg-Aac92AABMNikSKIo250.png

在板级dts文件中增加mailbox-demo配置

wKgZPGdLMg-AcYJIAAAnPaJLWHo699.png

这里使用mailbox的通道0作为rx,通道3作为tx

修改之后,单独构建kernel镜像,在kernel目录下得到boot.img,另外在kernel/drivers/mailbox下得到rockchip-mbox-demo.ko

2.MCU端做如下修改

打开external/hal/project/rk3568-mcu,打开src/main.c,打开TEST_DEMO

wKgZO2dLMhCATtZfAAAn_bJLDVY607.png

再打开src/test_demo.c,打开mbox配置

wKgZPGdLMhCAcKlMAAA6CeYBIwY539.png

修改之后,重新构建amp.img

然后用rk的烧录工具,单独烧录boot分区和amp分区,然后重启,将rockchip-mbox-demo.ko通过adb或者其他方式,放到板上

执行insmod操作之后,AP端的内核日志中有如下信息

wKgZO2dLMhCAE4LOAABfe58m_0I897.png

MCU端的串口有如下信息

wKgZO2dLMhCASuDEAAAe5O9qYq4561.png

这里通过源码简单介绍一下这个测试demo。首先是AP端的,在kernel/drivers/mailbox/rockchip-mbox-demo.c的probe函数中,先通过

mbox_request_channel_byname

申请了名为test-rx test-tx的两个mailbox通道,这个名称是设备树指定的。并且注册了名为rk_mbox_rx_callback的回调函数。申请到通道之后,先用mbox_send_message发送一条数据出去

wKgZPGdLMhCAHyKbAADc3UtMCK4049.pngwKgZPGdLMhCATbLDAAAr23o3nbY715.png

然后在rk_mbox_rx_callback函数内容如下

这里是在不超过MSG_LIMIT的情况下,收到mbox一条数据,就通过mbox发送一条数据出去。发送的数据内容为0x524D5347U

MCU端的逻辑如下

wKgZPGdLMhCAGPylAAETeabhdcY643.png

MCU端也是先注册了一个通道,然后注册名为mbox_remote_isr中断函数,然后中断函数中再调用mbox_remote_cb回调

这个回调函数中收到一条数据,即发一条数据。发送的数据内容为0x98765432

因此就可以看到上面的现象,MCU先收到AP的一条数据,然后发给AP,AP再发给MCU,重复100次。

总结

本文介绍RK3568内置的MCU的开发流程,并介绍了AP和MCU之间通过mailbox进行通信。多数的产品应用中,RK3568都会搭配一个外置的MCU,来实现一些高实时的业务,而自带MCU是闲置的,如果能够利用此MCU,可以省去外部MCU,降低复杂度。同时,使用片上的mailbox进行通信,速度更快,可靠性更高。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17171

    浏览量

    351508
  • RK3568
    +关注

    关注

    4

    文章

    516

    浏览量

    5086
收藏 人收藏

    评论

    相关推荐

    RK3568内置MCU开发介绍之二

    本文重点介绍RK3568内置MCU与AP之间的通信功能,首先介绍RPMsg的框架,然后介绍
    的头像 发表于 12-16 09:09 302次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>内置</b><b class='flag-5'>MCU</b><b class='flag-5'>开发</b><b class='flag-5'>介绍</b>之二

    【迅为】瑞芯微RK3588开发RK3568开发板区别及优势

    RK3568开发
    的头像 发表于 11-18 14:19 438次阅读
    【迅为】瑞芯微<b class='flag-5'>RK</b>3588<b class='flag-5'>开发</b>板<b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板区别及优势

    RK3568烧录工具

    RK3568 烧录工具
    发表于 11-11 14:16 5次下载

    开发更便利!迅为RK3568/RK3588 定制分区镜像发布

    开发更便利!迅为RK3568/RK3588 定制分区镜像发布
    的头像 发表于 11-11 14:00 495次阅读
    <b class='flag-5'>开发</b>更便利!迅为<b class='flag-5'>RK3568</b>/<b class='flag-5'>RK</b>3588 定制分区镜像发布

    RK3568开发板支持AMP双系统

    RK3568开发板支持AMP双系统
    的头像 发表于 06-04 15:33 746次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板支持AMP双系统

    鸿蒙OpenHarmony南向:【RK3568开发介绍

    RK3568开发板基于Rockchip RK3568芯片,集成双核心架构GPU以及高效能NPU;搭载四核64位Cortex-A55处理器,采用22nm先进工艺,主频高达2.0GHz;支持蓝牙
    的头像 发表于 05-07 10:13 874次阅读
    鸿蒙OpenHarmony南向:【<b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板<b class='flag-5'>介绍</b>】

    迅为RK3568开发板驱动开发指南-输入子系统

    迅为RK3568开发板驱动开发指南-输入子系统
    的头像 发表于 02-23 15:11 907次阅读
    迅为<b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板驱动<b class='flag-5'>开发</b>指南-输入子系统

    rv1126和rk3568对比

    rv1126和rk3568对比: 瑞芯微智能视觉芯片RV1126是瑞芯微新代智能视觉芯片,基于四核ARM Cortex-A7内核,内置2T算力 NPU,支持4K30FPS H.264/H.265
    的头像 发表于 01-23 18:05 1.1w次阅读
    rv1126和<b class='flag-5'>rk3568</b>对比

    RK3568-IgH EtherCAT主站开发案例

    RK3568-IgH EtherCAT主站开发案例
    的头像 发表于 01-19 15:20 1868次阅读
    <b class='flag-5'>RK3568</b>-IgH EtherCAT主站<b class='flag-5'>开发</b>案例

    RK3568--Acontis EtherCAT主站开发案例

    RK3568--Acontis EtherCAT主站开发案例
    的头像 发表于 01-19 14:59 879次阅读
    <b class='flag-5'>RK3568</b>--Acontis EtherCAT主站<b class='flag-5'>开发</b>案例

    RK3568---NPU开发案例

    RK3568---NPU开发案例
    的头像 发表于 01-19 13:50 961次阅读
    <b class='flag-5'>RK3568</b>---NPU<b class='flag-5'>开发</b>案例

    RK3568-ISP图像处理开发案例

    RK3568-ISP图像处理开发案例
    的头像 发表于 01-19 11:46 1109次阅读
    <b class='flag-5'>RK3568</b>-ISP图像处理<b class='flag-5'>开发</b>案例

    RK3568-ARM+FPGA通信案例开发手册 (

    RK3568-ARM+FPGA通信案例开发手册 (
    的头像 发表于 01-19 10:31 1197次阅读
    <b class='flag-5'>RK3568</b>-ARM+FPGA通信案例<b class='flag-5'>开发</b>手册 (<b class='flag-5'>一</b>)

    RK3568--基于AMP的多通道AD采集开发

    RK3568--基于AMP的多通道AD采集开发
    的头像 发表于 01-19 10:03 1006次阅读
    <b class='flag-5'>RK3568</b>--基于AMP的多通道AD采集<b class='flag-5'>开发</b>案

    RK3568-视频开发案例

    RK3568-视频开发案例
    的头像 发表于 01-18 15:51 885次阅读
    <b class='flag-5'>RK3568</b>-视频<b class='flag-5'>开发</b>案例