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

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

3天内不再提示

Vybrid非对称多核架构的裸机固件

星星科技指导员 来源:嵌入式计算设计 作者:Stefan Agner, Torad 2022-06-14 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在上一篇文章中,Valter Minute 讨论了总体架构以及非对称(也称为异构)多核 SoC 的优势。对于次要 Cortex-M4 内核的操作平台有多种选择:Valter 文章中讨论的示例使用 eCos RTOS,飞思卡尔推广自己的 RTOS MQX。

然而,根据应用程序的不同,人们甚至可能更喜欢裸机解决方案,例如移植旧版固件或为了其简单性。但是,也有缺点,最突出的是缺少外围设备的驱动程序。本文展示了为 Vybrid 的 Cortex-M4 内核创建定制的裸机固件时的一些技术缺陷。

作为一个示例环境,我决定为开源固件库 libopencm3 贡献 Vybrid 支持。该库在 LGPL 版本 3 下获得许可,因此明确允许将封闭源应用程序与该库链接。尽管它的名字,这个库也支持各种 Cortex-M4 微控制器,因此它非常适合 Vybrid 的 Cortex-M4 内核。使用该库,我们可以利用对 Cortex-M4 内核外设的支持,例如系统滴答定时器或嵌套中断控制器。有人可能会争辩说,使用库并不是真正的裸机,但是由于库的几乎所有组件都是完全可选的,因此与使用完整的 RTOS 相比,它更接近于裸机。

该代码尚未合并到上游项目中,但已经可以从 Github 获得(切换到 fsl-vf6xx 分支):https ://github.com/falstaff84/libopencm3和https://github.com/falstaff84/libopencm3-examples 。 此处的详细构建说明:http: //falstaff.agner.ch/2014/07/10/libopencm3-bare-metal-vybrid-examples/

内存和闪存

标准微控制器和 Vybrid 的 Cortex-M4 之间的第一个也是最显着的区别是不同的内存和闪存架构。在微控制器上,非易失性存储器通常可在控制器的线性地址空间中访问,从而允许它执行就地固件 (XIP)。在 Vybrid 上,非易失性内存通常不会以允许其就地执行的方式实现。相反,固件由主操作系统(例如 Linux)从存储介质(例如 NAND 闪存)加载到 RAM 中,随后由 Cortex-M4 内核执行。

有不少于三种内存类型可供运行:紧密耦合内存、片上内存 (OC-RAM/SRAM) 和外部 (DDR) 内存。紧密耦合内存 (TCM) 是可用的最快内存,因为它直接连接到 Cortex-M4 内核。但是,可用的内存量也非常有限。片上存储器 SRAM 是一种流行的选择,因为它在尺寸和速度方面提供了良好的折衷。飞思卡尔提供了一份详尽的文档,讨论了可用内存类型的速度和建议(请参阅 AN4947,了解 Vybrid 架构)。

pYYBAGKn44KAH2VaAAD-7G1PrYY786.png

另一方面是 Cortex-M4 的哈佛式架构,它由两条总线组成,一条用于数据,一条用于指令。为了确保硬件相应地使用这两条总线,内存映射提供别名以使用两条总线访问相同的内存位置:

OC-RAM Code-Bus: 0x1f000000-0x1f03ffff

OC-RAM System-Bus: 0x3f000000-0x3f03ffff

为获得最佳性能,应在链接器文件的内存描述中考虑到这一点;libopencm3 库定义了两个内存区域,代码总线 (pc_ram) 和系统总线 (ps_ram)。在以下示例中,可用内存被分成两半,每个部分有 256K 的 RAM。由于地址是整个内存范围的别名,因此可以根据项目需要自由调整这两个部分的大小。

链接器控制文件片段:examples/vf6xx/colibri-vf61/colibri-vf61.ld

MEMORY

{

pc_ram (rwx) : ORIGIN = 0x1f000000, LENGTH = 256K

ps_ram (rwx) : ORIGIN = 0x3f040000, LENGTH = 256K

}

在节部分,我们需要将代码节(文本)和数据节(例如 bss)的位置分配给这两个内存区域。

链接器控制文件片段:lib/vf6xx/libopencm3_vf6xx.ld

SECTIONS

{

.text : {

*(.vectors) /* Vector table */

。 = ALIGN(0x400);

*(.text.reset_handler) /* Force reset handler at start */

*(.text*) /* Program code */

。 = ALIGN(4);

} 》pc_ram

。..

.bss : {

*(.bss*) /* Read-write zero initialized data */

*(COMMON)

。 = ALIGN(4);

_ebss = 。;

} 》ps_ram

。..

}

向量表和入口地址

另一个重要方面是向量(中断)表。在 Cortex-M4 上,向量表0x00000000在复位时读取。在微控制器上,这通常位于非易失性存储器中。在 Vybrid 上,Cortex-M4 内核最初是关闭的。在固件的初始化代码中,我们可以使用向量表偏移寄存器 (VTOR) 来定义向量表的自定义位置。在上面的链接器文件中,向量表明确放置在固件的开头。lib/vf6xx/vector_chipset.c 中的初始化代码确保在启动时设置 VTOR 寄存器。

对于 Cortex-M4 微控制器,入口点(也称为复位向量)是向量表的一部分。这引入了对 Vybrid 的循环依赖,因为我们从固件代码中初始化向量表(无法从 Cortex-A5 内核访问 VTOR 寄存器)。为了解决这个难题,辅助内核的入口点(“复位向量”)由系统复位控制器 (SRC) 模块的寄存器在外部定义。对于飞思卡尔的启动实用程序“mqxboot”,在 Cortex-A5 内核上运行的 mcc 内核模块中的启动实现可确保相应地设置此寄存器。用户需要将入口点作为参数传递给“mqxboot”。注意:地址需要将位 0 设置为 1,以告诉 CPU 目标是 Thumb 代码(另请参阅参考手册的“运行辅助内核”一章)。

例如,要将固件 demo.bin 加载到 SRAM 并在辅助内核上启动它,可以在主内核上运行的 Linux 上使用 mqxboot:

mqxboot

mqxboot demo.bin 0x3f000000 0x1f000401

加载地址需要可从 Cortex-A5 访问。在本例中,这是 SRAM 的开始。但是,入口点地址是仅适用于 Cortex-M4 内核的代码总线别名。

时钟

由于 Cortex-M4 在源自 Cortex-A5 内核时钟的系统时钟上运行,因此从 Cortex-M4 侧更改时钟并不是一个好主意。然而,为了计算时序,读取时钟寄存器以获得当前速度是必要的。在libopencm3中,计算逻辑在lib/vf6xx/ccm.c下实现。主要时钟是 ARM 内核时钟 (ccm_core_clk)、平台总线时钟(也是 Cortex-M4 内核时钟 (ccm_platform_bus_clk) 以及 IPS(外设)时钟 (ccm_ipg_bus_clk))。

沟通

另一方面是与运行在 Cortex-A5 上的主操作系统进行通信的通信基础设施。libopencm3 实现目前不支持通信。可能最简单的通信实现是定义一个可以从双方访问的共享内存区域(考虑使用使用独占加载/存储指令 LDREX/STREX 的同步机制)。更复杂一点的是 MQX RTOS 的多核通信 (MCC) 组件的实现。该组件利用硬件信号量模块 (SEMA4) 以及四个 CPU 到 CPU 中断之一在有新消息可用时通知另一个 CPU。可以下载最近的 MQX 版本(4.0.2 及更高版本)以获取 MCC 的源代码(验证许可证是否涵盖您的用例)。

结论

在 Vybrid 上移植或实现裸机固件是可能的,而且不是很复杂。毕竟,Vybrid 内部的 Cortex-M4 仍然是执行 ARMv7-M 架构的 Cortex-M4 内核。除了外围驱动程序,链接器文件以及初始设置代码需要一些特殊考虑。

作者:Stefan Agner, Toradex

审核编辑:郭婷

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

    关注

    49

    文章

    8862

    浏览量

    165645
  • 控制器
    +关注

    关注

    114

    文章

    17874

    浏览量

    195073
  • 寄存器
    +关注

    关注

    31

    文章

    5619

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    睿擎平台AMP共享内存:Linux 与 RT-Thread 高速数据交换

    在AMP(AsymmetricMulti-Processing,非对称多处理)混合部署架构中,Linux和RT-Thread运行在同一颗芯片的两个不同核心上,如何高效地在两个系统之间传递大数据,是一
    的头像 发表于 04-22 18:09 275次阅读
    睿擎平台AMP共享内存:Linux 与 RT-Thread 高速数据交换

    90W AC - DC非对称半桥适配器设计解析

    90W AC - DC非对称半桥适配器设计解析 在电子设备的电源设计领域,高效、稳定的电源适配器是关键。今天我们来深入探讨一款基于非对称半桥拓扑(AHB)的90W宽范围输入AC - DC适配器
    的头像 发表于 04-16 09:50 352次阅读

    固变SST隔离驱动器的非对称延时补偿:提升级联型系统单元开关同步性

    基于SiC模块构建的固变SST隔离驱动器的非对称延时补偿:提升级联型系统单元开关同步性的算法实现 固态变压器级联架构与开关同步性的理论基础 在全球能源结构向可再生能源主导转型的背景下,现代分布式电网
    的头像 发表于 04-10 06:34 117次阅读
    固变SST隔离驱动器的<b class='flag-5'>非对称</b>延时补偿:提升级联型系统单元开关同步性

    ADSP - BF561:高性能嵌入式对称多处理器的深度解析

    ADSP - BF561:高性能嵌入式对称多处理器的深度解析 在电子设计领域,一款优秀的处理器对于产品的性能和功能起着至关重要的作用。今天,我们就来深入探讨一下Analog Devices公司
    的头像 发表于 03-23 17:20 718次阅读

    适配“大下行 + 小上行” 场景:信而泰 2544 非对称测试操作指南

    的 ONU-OLT 组网应用中,“非对称” 是业务流量的典型特征: l 家庭用户观看 4K 视频、下载大文件时,产生的下行流量可达百兆甚至千兆级别,而日常发送消息、上传文件的上行流量仅为几兆到几十兆; l 在企业接入场景中,终端设备海量数据采集上传与
    的头像 发表于 01-27 17:09 973次阅读
    适配“大下行 + 小上行” 场景:信而泰 2544 <b class='flag-5'>非对称</b>测试操作指南

    全志T153处理器ARM+RISC-V的双核CP多有强?——飞凌嵌入式

    在嵌入式设备拼性能、拼响应、拼功耗的内卷时代,双核协作才是破局的关键。传统的对称多处理(SMP)架构已难以兼顾全场景需求,非对称多处理(AMP)异构架构正在成为行业主流,在这样的背景下
    的头像 发表于 01-16 08:06 2014次阅读
    全志T153处理器ARM+RISC-V的双核CP多有强?——飞凌嵌入式

    保姆级教程!RK3588 Linux6.1 固件签名完整实现方案(不含rootfs)

    内核)上实操固件签名时,踩了不少官方文档的坑,经过反复调试终于打通全流程。今天就把这份实战经验整理成保姆级教程,从配置到问题排查,一步步带大家搞定 RK3588 的固件签名! 一、核心原理速览     固件签名的核心逻辑是通过
    的头像 发表于 01-14 17:21 2277次阅读
    保姆级教程!RK3588 Linux6.1 <b class='flag-5'>固件</b>签名完整实现方案(不含rootfs)

    米尔RK3506核心板SDK重磅升级,解锁三核A7实时控制新架构

    全与合规性要求。 二、AMP异构实时方案:低成本实现硬实时控制RK3506三核Cortex-A7架构是实时能力的核心。我们实现了非对称多处理(AMP)方案,允许将其中一颗Cortex-A7核隔离
    发表于 12-19 20:35

    乐鑫科技ESP-AMP框架详解!两款已支持的ESP32-P4C5开发板推荐!启明云端乐鑫科技代理

    多核嵌入式开发中,如何实现任务的高效分工与跨核通信,一直是开发者关注的重点。ESP-AMP作为专为ESP32系列打造的非对称多处理框架,现已支持主核运行FreeRTOS、从核运行裸机或其他实时
    的头像 发表于 12-18 18:02 1930次阅读
    乐鑫科技ESP-AMP框架详解!两款已支持的ESP32-P4C5开发板推荐!启明云端乐鑫科技代理

    深入解析SMFA非对称系列表面贴装TVS二极管

    深入解析SMFA非对称系列表面贴装TVS二极管 在电子设备的设计中,保护关键元件免受电压瞬变和浪涌的影响至关重要。TVS(瞬态电压抑制)二极管作为一种常用的保护器件,能够在瞬间吸收大量的能量,将电压
    的头像 发表于 12-15 16:40 488次阅读

    TPSMB非对称系列TVS二极管:汽车应用的理想保护方案

    TPSMB非对称系列TVS二极管:汽车应用的理想保护方案 在汽车电子领域,随着电动汽车的快速发展,对电子元件的性能和可靠性提出了更高的要求。TVS(瞬态电压抑制)二极管作为一种重要的过电压保护元件
    的头像 发表于 12-15 16:20 629次阅读

    【深度实战】MYD-LR3576 AMP非对称多核开发指南:从配置到实战

    一、什么是AMP?为什么重要?AMP(AsymmetricMulti-Processing)非对称多处理架构,允许单个芯片的不同核心运行不同的操作系统或裸机程序。相比传统的SMP(对称多
    的头像 发表于 12-05 08:07 7348次阅读
    【深度实战】MYD-LR3576 AMP<b class='flag-5'>非对称多核</b>开发指南:从配置到实战

    倾佳电子混合逆变器拓扑架构演进及基于非对称碳化硅器件的T型三电平技术应用价值分析

    倾佳电子混合逆变器Hybrid Inverter拓扑架构演进及基于非对称碳化硅器件的T型三电平技术应用价值分析 倾佳电子(Changer Tech)是一家专注于功率半导体和新能源汽车连接器的分销商
    的头像 发表于 10-19 09:04 2056次阅读
    倾佳电子混合逆变器拓扑<b class='flag-5'>架构</b>演进及基于<b class='flag-5'>非对称</b>碳化硅器件的T型三电平技术应用价值分析

    非对称密钥生成和转换规格详解

    生成 以字符串参数生成RSA密钥,具体的“字符串参数”由“RSA密钥类型”和“素数个数”使用符号“|”拼接而成,用于在创建非对称密钥生成器时,指定密钥规格。 说明:生成RSA非对称密钥时,默认素数为2
    发表于 09-01 07:50

    如何在 MA35 系列微处理器 (MPU) 上开发 AMP(非对称多处理)应用程序?

    如何在 MA35 系列微处理器 (MPU) 上开发 AMP(非对称多处理)应用程序,并通过建立多个端点的过程促进与其他内核的多通道数据传输。
    发表于 08-19 06:11