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

    文章

    18035

    浏览量

    369491
  • RK3568
    +关注

    关注

    5

    文章

    591

    浏览量

    6567
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    迅为RK3568?重制版RK3568驱动指南全面升级

    迅为RK3568 重制版RK3568驱动指南全面升级
    的头像 发表于 07-28 15:25 ?560次阅读
    迅为<b class='flag-5'>RK3568</b>?重制版<b class='flag-5'>RK3568</b>驱动指南全面升级

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠和唤醒流程的分析
    的头像 发表于 07-22 09:49 ?176次阅读
    <b class='flag-5'>RK3568</b> EVB<b class='flag-5'>开发</b>板 深度休眠与快速醒的工作流程

    RK3568开发板暗藏32位兼容开关?飞凌嵌入式带你键解锁!

    RK3568款64位处理器,飞凌嵌入式为其提供的交叉编译器也是64位的,然而部分用户可能需要在RK3568开发板上运行32位应用。本文将详细阐述如何使用32位交叉编译器,编译出32
    的头像 发表于 07-19 08:49 ?3755次阅读
    <b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板暗藏32位兼容开关?飞凌嵌入式带你<b class='flag-5'>一</b>键解锁!

    【HZ-RK3568开发板免费体验】HZ-RK3568开发板初步接触

    J处理器设计,支持图像H.264编解码处理,内置3D GPU可图像处理,2D硬件加速引擎,内置0.8TOPS NPU算力,具备定AI能力。 RK3568
    发表于 07-10 23:19

    rk3568开发工具

    rk3568开发工具
    发表于 04-16 17:03 ?2次下载

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识
    的头像 发表于 03-06 11:23 ?681次阅读
    【北京迅为】iTOP-<b class='flag-5'>RK3568</b>OpenHarmony系统南向驱动<b class='flag-5'>开发</b>GPIO基础知识

    【技术分享】迅为RK3568开发板使用TFTP加载内核设备树

    【技术分享】迅为RK3568开发板使用TFTP加载内核设备树
    的头像 发表于 02-21 14:04 ?757次阅读
    【技术分享】迅为<b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板使用TFTP加载内核设备树

    RK3568原理图及规格书资料

    RK3568 IoT设备官方参考原理图
    发表于 02-07 15:28 ?18次下载

    迅为RK3568开发板驱动指南Linux中通用SPI设备驱动

    迅为RK3568开发板驱动指南Linux中通用SPI设备驱动
    的头像 发表于 01-23 11:02 ?2933次阅读
    迅为<b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板驱动指南Linux中通用SPI设备驱动

    RK3568内置MCU开发介绍之二

    本文重点介绍RK3568内置MCU与AP之间的通信功能,首先介绍RPMsg的框架,然后介绍
    的头像 发表于 12-16 09:09 ?1403次阅读
    <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 ?1567次阅读
    【迅为】瑞芯微<b class='flag-5'>RK</b>3588<b class='flag-5'>开发</b>板<b class='flag-5'>RK3568</b><b class='flag-5'>开发</b>板区别及优势

    瑞芯微RK3568 USB驱动

    瑞芯微RK3568 USB驱动程序
    发表于 11-11 14:18 ?12次下载

    RK3568烧录工具

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

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

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

    迅为iTOP-RK3568/RK3588开发板获麒麟软件适配认证

    迅为iTOP-RK3568/RK3588开发板获麒麟软件适配认证
    的头像 发表于 10-18 14:56 ?1314次阅读
    迅为iTOP-<b class='flag-5'>RK3568</b>/<b class='flag-5'>RK</b>3588<b class='flag-5'>开发</b>板获麒麟软件适配认证