news 2026/4/17 16:38:54

保姆级教程:在飞凌OK3562J-C开发板上启动Cortex-M0核(含完整配置与烧录流程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在飞凌OK3562J-C开发板上启动Cortex-M0核(含完整配置与烧录流程)

从零实战:飞凌OK3562J-C开发板Cortex-M0核全流程启动指南

第一次拿到飞凌OK3562J-C开发板时,很多工程师都会被其异构多核架构吸引——四核Cortex-A53搭配实时性极强的Cortex-M0核,理论上既能跑Linux又能做实时控制。但当你真正想用M0核跑个简单的日志打印或电机控制时,却发现官方资料里只有A核的例程,M核的启动配置完全是个黑盒。这种"看得见用不着"的体验,相信不少朋友都深有体会。

本文将彻底解决这个痛点。不同于网上零散的教程,我们会从芯片架构原理讲起,手把手带你完成设备树配置→RTOS编译→固件烧录→功能验证的全流程。过程中不仅会解释每个步骤的技术背景,还会标注新手容易踩的坑(比如设备树时钟配置遗漏导致M核无法启动)。最终你将获得:

  1. 一套可复用的M核开发环境
  2. 理解AMP(非对称多处理)的底层机制
  3. 掌握通过RPMSG实现A核与M核通信的基础能力

1. 环境准备:搭建开发环境与理解硬件架构

1.1 硬件连接检查清单

在开始之前,请确保你的OK3562J-C开发板已正确连接:

  • 电源:使用官方12V/2A电源适配器,避免因供电不足导致烧录失败
  • 串口调试:通过Type-C转USB线连接调试串口(通常为UART2)
    # 在Linux主机查看串口设备 ls /dev/ttyUSB* # 使用minicom连接(波特率1500000) sudo minicom -D /dev/ttyUSB0 -b 1500000
  • 烧录模式:板载的USB OTG接口用于固件下载,需准备Micro USB线

1.2 软件工具链安装

飞凌官方推荐使用Ubuntu 18.04/20.04作为开发环境,关键组件包括:

组件版本要求安装命令
SCons≥3.0.0sudo apt-get install scons
ARM GCC9-2020-q2-updatesudo apt-get install gcc-arm-none-eabi
RK开发工具最新版需从瑞芯微开发者网站下载

注意:避免使用过新的GCC版本(如11.x),可能导致RT-Thread编译报错。若已安装高版本,可通过update-alternatives切换:

sudo update-alternatives --install /usr/bin/arm-none-eabi-gcc arm-none-eabi-gcc /usr/bin/arm-none-eabi-gcc-9 90

1.3 理解RK3562J的AMP架构

RK3562J的异构多核设计有其特殊性:

  • 内存隔离:A核与M核有独立的内存区域(见下图),通过reserved-memory节点划分
    +---------------------+ | Linux系统内存 | 0x00000000 - 0x7800000 +---------------------+ | AMP共享内存 | 0x7800000 - 0x7C00000 (4MB) +---------------------+ | RPMsg通信区 | 0x7C00000 - 0x8000000 (4MB) +---------------------+ | M0核专用内存 | 0x8200000 - 0x8300000 (1MB) +---------------------+
  • 时钟依赖:M0核依赖A核提供的时钟源,设备树中必须正确配置cru节点
  • 中断路由:GIC需配置amp-irqs实现核间中断

2. 内核配置:设备树与AMP启动机制

2.1 验证默认设备树配置

飞凌官方SDK通常已包含基础AMP配置,但仍需检查:

cd /path/to/kernel-5.10/arch/arm64/boot/dts/rockchip grep -r "rk3562-amp.dtsi" .

正常应看到OK3562-C-common.dtsi中包含:

#include "rk3562-amp.dtsi"

若未找到,需手动添加并检查以下关键节点:

  1. rockchip_amp:定义M核时钟源和中断路由
  2. reserved-memory:确保amp_shmem_reservedmcu_reserved区域无冲突
  3. rpmsg:配置核间通信的邮箱通道

2.2 常见配置问题排查

问题现象:M核启动后无日志输出
可能原因

  • UART引脚复用冲突:检查pinctrl-0 = <&uart7m1_xfer>;是否取消注释
  • 时钟未使能:确认clocks列表包含SCLK_UART7PCLK_UART7

问题现象:A核无法加载AMP驱动
解决方法

# 检查内核配置 zcat /proc/config.gz | grep AMP # 应输出: CONFIG_ROCKCHIP_AMP=y CONFIG_RPMSG_VIRTIO=y

3. RTOS编译:从配置到固件生成

3.1 获取与配置RT-Thread源码

飞凌提供的RTOS通常基于RT-Thread定制:

cd /path/to/OK3562-linux-source/rtos/bsp/rockchip/rk3562-32 cp board/rk3562_evb1_lp4x/defconfig .config scons --menuconfig

在配置界面中重点关注:

  • Hardware Drivers→ Enable UART7
  • AMP Settings→ Set shared memory address (0x7800000)
  • System→ Set entry point tomcu_entry

3.2 编译与产物分析

执行编译命令后:

./build.sh chip # 选择forlinx_ok3562_linux_rtos_defconfig ./build.sh mcu

生成的amp.img包含以下关键段:

Section Address Size --------------- ----------- -------- .text 0x8200000 0x20000 .shared 0x7800000 0x40000 .heap 0x8240000 0x10000

调试技巧:若编译失败,可查看build.log中的链接脚本(.ld文件)是否正确定义了内存区域。

4. 烧录与验证:实战操作指南

4.1 使用RKDevTool烧录

  1. 进入Loader模式:
    • 按住Recovery键上电
    • 通过lsusb确认设备ID显示2207:350a
  2. 配置烧录表:
    [PARTITION] amp:amp.img
  3. 高级操作:若需保留原有系统,可仅勾选amp分区

4.2 U-Boot阶段验证

成功烧录后,在U-Boot命令行中:

# 查看AMP状态 amp status # 手动启动M核 amp start on # 查看串口输出 uart7 on

正常启动时,UART7会输出类似日志:

[AMP] M0 core started at 0x8200000 [RT-Thread] msh >

4.3 Linux用户空间测试

在A核Linux系统中,可通过RPMSG与M核交互:

# 安装测试工具 sudo apt install rpmsg-char # 发送测试消息 echo "ping" > /dev/rpmsg0 # 接收回复 cat /dev/rpmsg0

5. 进阶开发:从基础启动到实际应用

5.1 外设驱动开发示例

以PWM控制为例,M核端代码:

// pwm_demo.c #include <rtdevice.h> #define PWM_DEV "pwm3" void pwm_test(void) { struct rt_device_pwm *pwm = (struct rt_device_pwm *)rt_device_find(PWM_DEV); rt_pwm_set(pwm, 0, 1000000, 500000); // 1MHz, 50% duty }

需同步修改设备树:

&pwm3 { status = "okay"; pinctrl-names = "active"; pinctrl-0 = <&pwm3m1_pins>; };

5.2 性能优化技巧

  • 内存优化:调整.shared段大小(默认4MB可能过大)
  • 中断延迟:在amp-irqs中配置CPU亲和性
  • 双核同步:使用atomic指令操作共享内存

遇到寄存器访问冲突时,记得检查iomux配置是否与A核冲突。曾经有个项目因为A核的SDIO和M核的SPI共用引脚,调试了整整两天——这种坑希望你们不用再踩。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 16:37:45

5分钟掌握网易云音乐NCM解密:ncmdumpGUI完整使用指南

5分钟掌握网易云音乐NCM解密&#xff1a;ncmdumpGUI完整使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

作者头像 李华
网站建设 2026/4/17 16:37:38

从R15到R18:3GPP标准演进背后,我们如何高效追踪提案动态?

从R15到R18&#xff1a;3GPP标准演进的高效追踪方法论 当5G RedCap技术从R17草案跃入R18正式标准时&#xff0c;某设备厂商的预研团队正面临关键抉择——是立即启动芯片流片&#xff0c;还是等待协议冻结&#xff1f;这种技术路线决策的容错空间往往不超过6个月。3GPP标准演进…

作者头像 李华
网站建设 2026/4/17 16:36:55

保姆级教程:在Ubuntu 20.04上搞定PX4仿真,从MAVROS安装到Gazebo起飞

零基础玩转PX4仿真&#xff1a;Ubuntu 20.04从环境配置到Gazebo首飞全指南 刚接触无人机仿真的开发者常会遇到这样的困境&#xff1a;教程里的命令一运行就报错&#xff0c;依赖项像俄罗斯套娃一样层出不穷&#xff0c;而GitHub的龟速下载更是让人抓狂。本文将手把手带你用最接…

作者头像 李华
网站建设 2026/4/17 16:35:59

Numpy随机数生成实战:从均匀分布到正态分布的应用解析

1. 为什么需要随机数生成&#xff1f; 在数据分析和机器学习领域&#xff0c;随机数生成就像厨师的调味料一样不可或缺。想象一下&#xff0c;如果你要测试一个新开发的推荐算法&#xff0c;但没有真实的用户行为数据怎么办&#xff1f;这时候随机数就能派上用场了。我经常用Nu…

作者头像 李华
网站建设 2026/4/17 16:34:05

ALS-Community:构建UE5.3高性能角色动画系统的实践指南

ALS-Community&#xff1a;构建UE5.3高性能角色动画系统的实践指南 【免费下载链接】ALS-Community Replicated and optimized community version of Advanced Locomotion System V4 for Unreal Engine 5.4 with additional features & bug fixes 项目地址: https://gitc…

作者头像 李华