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

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://www.mzph.cn/news/220110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟小德学C++之代码目录

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…

SQL进阶理论篇(二):数据库的设计范式

文章目录 简介数据库的设计范式有哪些数据库中的几种键从1NF到3NF1NF2NF3NFBCNF(巴斯范式) 反范式设计反范式的适用场景总结参考文献 简介 本小节主要内容: 数据库的设计范式都有哪些数据库的键都有哪些1NF、2NF和3NF都是指什么&#xff1f…

STM32的DMA的五大问题

1,DMA控制器的内部结构 STM32中的DMA控制器是一种用于在外设和存储器之间传输数据的专用硬件。DMA控制器的内部结构主要包括以下几个关键部分: 通道: DMA控制器可以有多个通道,每个通道独立管理一个数据传输任务。通道的数量取决于…

一进一出两线制(三线制)模拟量高速信号(50KHz)隔离变送器

一进一出两线制(三线制)模拟量高速信号(50KHz)隔离变送器 型号:JSD TA-2311F系列 产品特点: ◆小体积,低成本,标准 DIN35mm 导轨安装方式 ◆三端隔离(输入、输出、工作电源间相互隔离) ◆高速信号采集,隔离等(-3dB,Min≤ 3.5 uS) ◆高精度等级(0.1% F.S&…

mysql的redolog、undo、binlog的作用

概览: MySQL三大日志包括:undolog,redo log,binlog,它们分别有以下作用: undolog:是Innodb存储引擎事务生成的日志。用于事务的回滚和MVCC,保证了事务的原子性。 redo log&#x…

第二百零四回 模拟对话窗口的页面

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 经验分享5. 内容总结 我们在上一章回中介绍了"修改组件风格的另外一种方法"相关的内容,本章回中将介绍" 如何做一个模拟对话框窗口的页面".闲话休提,让我…

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

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

【C语言程序设计】数组程序设计

目录 前言 一、数组的定义和初始化 二、数组的基本操作 三、数组的高级应用 四、程序设计 4.1 程序设计第一题 4.2 程序设计第二题 4.3 程序设计第三题 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助…

【什么是POI,为什么它会导致内存溢出?】

什么是POI,为什么它会导致内存溢出 什么是POIExcel并没看到的那么小POI的溢出原理 拓展知识几种Workbook格式 什么是POI Apache POl,是一个非常流行的文档处理工具,通常大家会选择用它来处理Excel文件。但是在实际使用的时候经常会遇到内存溢…

textarea 网页文本框在光标处添加内容

在前端研发中我们经常需要使用脚本在文本框中插入内容。如果产品要求不能直接插入开始或者尾部,而是要插入到光标位置,此时我们就需要获取光标/光标选中的位置。 很多时候,我在格式化文本处需要选择选项,将选择的信息输入到光标位…

html 中vue3 的setup里调用element plus的弹窗 提示

引入Elementplus之后&#xff0c;在setup&#xff08;&#xff09;方法外面导入ElMessageBox const {ElMessageBox} ElementPlus 源码 &#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><!-- import Vue before Elemen…

CAN 三: STM32 CAN相关寄存器介绍

1、寄存器列表&#xff08;F1/F4/F7&#xff09; 寄存器名称作用CAN_MCRCAN主控制寄存器主要负责CAN工作模式的配置CAN_BTR位时序寄存器用来设置分频/TBS1/TBS2/TSWJ等参数&#xff0c;设置测试模式CAN_(T/R)IxR标识符寄存器存放(待发送/接收)的报文ID、扩展ID、IDE位及RTR位C…

SpringBoot之实体参数的详细解析

1.3 实体参数 在使用简单参数做为数据传递方式时&#xff0c;前端传递了多少个请求参数&#xff0c;后端controller方法中的形参就要书写多少个。如果请求参数比较多&#xff0c;通过上述的方式一个参数一个参数的接收&#xff0c;会比较繁琐。 此时&#xff0c;我们可以考虑…

XSS防御:内容安全策略 CSP工作原理、配置技巧与最佳实践

前言 公司部门安全合规改造计划&#xff0c;要求所有的Web站点统一添加CSP规则。对于CSP机制我只是之前在应付面试的时候背过相关的概念&#xff0c;并没有真正在项目中实践过。所以希望借助本次改造任务好好理解并实践CSP机制。 什么是CSP CSP的全称是 Content Security Po…

CCF 202104-2:邻域均值--C++

#include<iostream> #include<bits/stdc.h>using namespace std;int A[601][601]; int n;//长宽都为n个像素double FindNeighborSum(int i,int j,int r,int A[][601]) {int sum0;//像素和 int gs0;//领域 中的像素个数 for(int xi-r;x<ir;x)//找到每一个领域像素…

数据分析基础之《numpy(3)—基本操作》

一、基本操作 1、adarray.方法() 2、np.函数名() 二、生成数组的方法 1、生成0和1的数组 为什么需要生成0和1的数组&#xff1f; 我们需要占用位置&#xff0c;或者生成一个空的数组 &#xff08;1&#xff09;ones(shape[, dtype, order]) 生成一组1 shape&#xff1a;形…

NOIP2017提高组day2 - T2:宝藏

题目链接 [NOIP2017 提高组] 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图&#xff0c;藏宝图上标出了 n n n 个深埋在地下的宝藏屋&#xff0c; 也给出了这 n n n 个宝藏屋之间可供开发的 m m m 条道路和它们的长度。 小明决心亲自前往挖掘所有宝藏屋中的宝藏。但…

【沐风老师】科研绘图3DMAX病毒建模教程

3dMax在科研绘图方面也有广泛的应用&#xff0c;本教程就给大家讲解病毒的建模方法&#xff0c;下面直接进入教程&#xff1a; 3dMax病毒建模方法&#xff1a; 1.启动3dMax&#xff0c;在视口中创建一个“几何球体”。方法&#xff1a;右边命令面板->创建->几何体->…

MySQL中EXPLAIN执行计划的分析

一. 执行计划能告诉我们什么&#xff1f; SQL如何使用索引联接查询的执行顺序查询扫描的数据函数 二. 执行计划中的内容 SQL执行计划的输出可能为多行&#xff0c;每一行代表对一个数据库对象的操作 1. ID列 ID列中的如果数据为一组数字&#xff0c;表示执行SELECT语句的顺…

当当狸AR智能学习图集跨越千年文明传承,邀您“面对面”与虚拟诗人互动对诗

中华传统文化底蕴深厚&#xff0c;余韵悠长。即使经过千年的历史裂变&#xff0c;依然历久铭心慰藉着一代又一代人的灵魂。千百年后的今天&#xff0c;成为了我们独一无二的财富。 如今&#xff0c;国人学习中华传统文化的方式有很多&#xff0c;诗词集、动画影片、诗歌传颂等…