I.MX RT1170双核学习(2):双核相互激活和启动流程

news/2024/7/5 5:13:24

RT1170这个芯片带有双核:Cortex-M7和Corterx-M4,两个核都可以独立地运行,当然双核也可以同时运行。在上一篇文章中,介绍了一下在RT1170中消息模块MU的使用:双核通信之MU消息单元详解,因为这是双核之间用来通信的核心单元。那有了这个基础之后,这一篇文章就来学习一下在这个芯片中如何启动双核。

文章目录

  • 1 内存映射
  • 2 双核启动
    • 2.1 CM7作为主核
    • 2.2 CM4作为主核
  • 3 总结

1 内存映射

首先我们来分别看一下CM7和CM4的芯片内置内存分配:

(1)CM7

Start AddressEnd AddressSizeDescription
2038_0000203F_FFFF512KBOCRAM M7 (FlexRAM)
2036_00002037_FFFF128KBOCRAM M7 (FlexRAM ECC)
2035_00002035_FFFF64KBOCRAM2 ECC
2034_00002034_FFFF64KBOCRAM1 ECC
202C_00002033_FFFF512KBOCRAM2
2024_0000202B_FFFF512KBOCRAM1
2020_00002023_FFFF256KBOCRAM M4 (LMEM 128KB SRAM_L + 128KB SRAM_U backdoor)
2000_00002007_FFFF512KBDTCM (FlexRAM)
0000_00000007_FFFF512KBITCM (FlexRAM)

上面0x20200000~0x2023FFFF的OCRAM M4是CM4 TCM的重映射地址,CM7可以通过这个别名区域访问CM4 TCM。

  • 当CM4关闭电源时,CM7不能访问这块内存,否则结果是不可预测的。
  • CM7通过重映射地址访问这块内存时,速度不及CM4中直接访问这块内存

(2)CM4

Start addressEnd addressSizeDescription
2038_0000203F_FFFF512KBOCRAM M7 (FlexRAM)
2036_00002037_FFFF128KBOCRAM M7 (FlexRAM ECC)
2035_00002035_FFFF64KBOCRAM2 ECC
2034_00002034_FFFF64KBOCRAM1 ECC
202C_00002033_FFFF512KBOCRAM2
2024_0000202B_FFFF512KBOCRAM1
2000_00002001_FFFF128KBSystem TCM (LMEM RAM_U)
1FFE_00001FFF_FFFF128KBCode TCM (LMEM RAM_L)

对于这里的OCRAM M7 (FlexRAM)OCRAM M7 (FlexRAM ECC),虽然这里写的是M7的内存,但是经过我的测试,M4是可以访问和修改这块内存的。

(3)共享内存区域

这里M7和CM4可以共同访问一些内存:

RAMAccess address for CM7Access address for CM4Size
OCRAM M40x2020_00000x1FFE_0000128KB
OCRAM M40x2022_00000x2000_0000128 KB
OCRAM M70x2038_0000Same as CM7128KB
OCRAM M7 ECC0x2036_0000Same as CM7128KB
OCRAM10x2024_0000Same as CM7512 KB
OCRAM20x202C_0000Same as CM7512 KB
OCRAM1_ECC0x2034_0000Same as CM764 KB
OCRAM2_ECC0x2035_0000Same as CM764 KB
  • 当然FlexSPI1和FlexSPI2接的Flash、SEMC接的SDRAM所映射的内存在双核间也是共享的。

2 双核启动

对于RT1170的双核来说,它们有一个主从关系(默认是CM7为主核,CM4为从核)。上电后将启动主核,然后由主核在代码中激活并启动从核。

2.1 CM7作为主核

默认情况下,CM7为主核。在CM7上电后需要激活CM4核。当然我们还需要准备好CM4核的代码,这就有两种情况:

1、CM4代码在NOR上XIP执行:需要提前将CM4的程序放在NOR的指定内存位置即可(编译的时候程序也要链接到这个位置)。

2、CM4代码在内置SRAM中执行

在这里插入图片描述

此时CM7中的程序需要将CM4的程序拷贝到CM4的ITCM中。

  • CM4的程序可以保存在SD卡、EMMC、U盘等存储介质中
  • 这里CM7就可以通过CM4 TCM的重映射地址0x20200000进行拷贝

接下来就是启动CM4核,有两个步骤

(1)设置CM4的向量表地址

RT芯片提供了寄存器来(IOMUXC_LPSR_GPRGPR0GPR1)设置CM4程序的vector table的地址,正确地设置才能成功激活从核。

在这里插入图片描述

我们需要填充CM4_INIT_VTOR_HIGHCM4_INIT_VTOR_LOW为CM4的向量表地址。

(2)激活M4核

需要置以下两个寄存器的位:

在这里插入图片描述

(1)Slice Control Register中的偏移在284h的CTRL_M4CORE寄存器

置bit0为1,可以给CM4进行软件复位

(2)SRC Control Register

CM4会一直保持在复位状态,我们需要置这个寄存器的bit0为1来解除CM4的复位状态。

现在CM4核就成功启动了。

2.2 CM4作为主核

在RT1170中,默认CM7为主核,如果需要设置CM4为主核的话,需要烧写0x960处熔丝的第12位为1。

在这里插入图片描述

同样地,如果CM7的程序需要在RAM中运行,需要CM4的程序来拷贝CM7的程序到RAM中。

接下来也是设置向量表和启动CM7核:

1、向量表:IOMUXC_LPSR_GPRGPR26寄存器

2、复位CM7核:Slice Control Register中的偏移在2A4h的CTRL_M7CORE寄存器

2、启动CM7核:SRC Control Register的bit1

这里就不详细介绍了,因为这种方法需要烧写熔丝,也很少有人用到。

3 总结

本文介绍了CM7和CM4相互激活的基本设置,在SDK中,有一个MCMGR(Multicore Manager)实现了多核之间的管理操作,除了实现本文所述的设置外,还有双核之间状态的同步。下一节就来剖析MCMGR中的源码实现。


http://lihuaxi.xjx100.cn/news/1890220.html

相关文章

群晖(Synology)更换硬盘时间和精神双重折磨的教训

话说玩磁盘阵列的最后结果就是时间上负担不起,并且还被嫌弃。 在磁盘都到位后下一步就是要选择冗余类型了,对大部分人来说使用群晖自己提供的就好了,通常是 SHR。 什么是 SHR Synology Hybrid RAID(SHR)是 Synology…

Nacos配置Mysql数据库

目录 前言1. 配置2. 测试前言 关于Nacos的基本知识可看我之前的文章: Nacos基础版 从入门到精通云服务器 通过docker安装配置Nacos 图文操作以下Nacos的版本为1.1.3 1. 配置 对应的配置文件路径如下: 对应的application.properties为配置文件 需配置端口号 以及 mysql中的…

python自动化测试实战 —— CSDN的Web页面自动化测试

软件测试专栏 感兴趣可看:软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识: 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

Java二叉树的遍历

Java二叉树的遍历 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同探讨Java中二叉树的遍历,解锁这个数据结构的神秘面纱。 J…

【LeetCode每日一题】1904. 你完成的完整对局数

给你两个字符串 startTime 和 finishTime ,均符合 "HH:MM" 格式,分别表示你 进入 和 退出 游戏的确切时间,请计算在整个游戏会话期间,你完成的 完整对局的对局数 。 如果 finishTime 早于 startTime ,这表示…

成功解决 Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found

Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found的解决方案,亲测可用! 方法一:清理IDEA的缓存 File -> Invalidate Caches 方法二:添加版本号 先看自己当前的版本号 首先打开pom.xml文件进行查看C…

区块链的可拓展性研究【05】闪电网络

1.闪电网络:闪电网络是一种基于比特币区块链的 Layer2 扩容方案,它通过建立一个双向支付通道网络,实现了快速、低成本的小额支付。闪电网络的交易速度非常快,可以达到每秒数万笔交易,而且交易费用非常低,几…

西电计科微机原理实验二(详细注释版)

西电计科微机原理实验二(详细注释版) 环境:VSCodeMASM/TASM插件(建议使用相同环境,学校机房环境有点老,可能会出一些奇怪的问题) 实验室:EⅡ-522 实验要求 输入一个不超过5位的十进制数,回车结束输入,并将其转换为二进制数,输出到屏幕上输入非数字字符,报错,重新输入输入q或…