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

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

3天内不再提示

如何编写ARM处理器的Bootloader

工程师 来源:strongerHuang 作者:strongerHuang 2020-10-27 11:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者 | strongerHuang

微信公众号 | strongerHuang

之前从应用的角度给大家分享过Bootloader相关的文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader。

1关于Bootloader

Bootloader顾名思义就是引导加载程序,是在操作系统或应用程序运行之前的一段程序,是在系统上电后执行的一段程序代码

BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式平台。因此,在嵌入式平台里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对bootloader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

---来源百度百科

Bootloader在手机电脑、众多嵌入式系统中都存在,它的作用有很多,比如:初始化底层应用驱动、加载应用程序、更新应用程序等。

不同的设备,Bootloader可能差异很大,通常来说Bootloader比较依赖底层硬件和实际项目需求。

2如何编写bootloader

bootloader是一段引导加载程序代码,它更新用户的应用程序代码,可以使用很多硬件下载通道(例如USB、网络端口)获得新代码。

在执行引导ROM之后,将执行bootloader程序,并在需要时进行更新,然后执行最终用户应用程序。

引导加载程序和用户应用程序应作为两个独立的Project或Object进行编写和编译,从而产生两个独立且可执行的(bin/hex)文件。

引导加载程序的主要任务是在必要时对用户应用程序进行重新编程/替换,并跳转至用户应用程序以执行该程序,应用程序不一定需要知道引导加载程序的存在。

引导加载程序通常位于芯片闪存基址,下面通过一张图来描述内存和Flash代码映射关系:

有很多方法可以引导bootloader进入编程模式,以将用户应用程序重新编程到Flash中,或者直接跳转到现有的用户应用程序来执行。最简单的方法是检查GPIO引脚以确定是否应进入编程模式。

大多数芯片供应商为用户提供了一种方便的方式,例如 ISP 和 IAP 接口,bootloader将使用它们来更新闪存内容。

当Flash内容已更新或已经是最新时,引导加载程序将跳转到用户应用程序。在执行用户应用程序之前,这需要许多步骤:

1.确保CPU处于特权模式。

2.禁用NVIC中所有启用的中断。

3.禁用所有可能产生中断请求的使能外设,并清除这些外设中的所有未使用中断标志。

4.清除NVIC中所有未使用的中断请求。

5.禁用SysTick并清除其异常挂起位。

6.如果引导加载程序使用了单个故障处理程序,请禁用它们。

7.如果发现内核当前与PSP一起运行,则激活MSP(由于编译器可能仍在使用堆栈,因此在此之前需要将PSP复制到MSP)。

8.将用户应用程序的向量表地址加载到SCB-》 VTOR寄存器中。确保地址符合对齐要求。

9.最后一部分是将MSP设置为用户应用程序向量表中找到的值,然后将用户应用程序的重置向量值加载到PC中,也就是跳转功能。

比如通过调用下面的示例BootJump()这样的函数来完成此操作:

static void BootJump(uint32_t *Address){ //1.确保CPU处于特权模式。 if( CONTROL_nPRIV_Msk & __get_CONTROL()) { /* not in privileged mode */ EnablePrivilegedMode() ; } //2.禁用NVIC中所有启用的中断。 Disable_All_Peripherals(); //3.禁用所有可能产生中断请求的使能外设,并清除这些外设中的所有未使用中断标志。 NVIC-》ICER[ 0 ] = 0xFFFFFFFF; NVIC-》ICER[ 1 ] = 0xFFFFFFFF; NVIC-》ICER[ 2 ] = 0xFFFFFFFF; NVIC-》ICER[ 3 ] = 0xFFFFFFFF; NVIC-》ICER[ 4 ] = 0xFFFFFFFF; NVIC-》ICER[ 5 ] = 0xFFFFFFFF; NVIC-》ICER[ 6 ] = 0xFFFFFFFF; NVIC-》ICER[ 7 ] = 0xFFFFFFFF; //4.清除NVIC中所有未使用的中断请求。 NVIC-》ICPR[ 0 ] = 0xFFFFFFFF; NVIC-》ICPR[ 1 ] = 0xFFFFFFFF; NVIC-》ICPR[ 2 ] = 0xFFFFFFFF; NVIC-》ICPR[ 3 ] = 0xFFFFFFFF; NVIC-》ICPR[ 4 ] = 0xFFFFFFFF; NVIC-》ICPR[ 5 ] = 0xFFFFFFFF; NVIC-》ICPR[ 6 ] = 0xFFFFFFFF; NVIC-》ICPR[ 7 ] = 0xFFFFFFFF; //5.禁用SysTick并清除其异常挂起位。 SysTick-》CTRL = 0; SCB-》ICSR |= SCB_ICSR_PENDSTCLR_Msk; //

6.如果引导加载程序使用了单个故障处理程序,请禁用它们。 SCB-》SHCSR &= ~( SCB_SHCSR_USGFAULTENA_Msk | \ SCB_SHCSR_BUSFAULTENA_Msk | \ SCB_SHCSR_MEMFAULTENA_Msk ) ; //7.如果发现内核当前与PSP一起运行,则激活MSP if( CONTROL_SPSEL_Msk & __get_CONTROL()) { /* MSP is not active */ __set_MSP( __get_PSP()) ; __set_CONTROL( __get_CONTROL() & ~CONTROL_SPSEL_Msk); } //8.将用户应用程序的向量表地址加载到SCB-》 VTOR寄存器中。 SCB-》VTOR = ( uint32_t )Address ; //9.跳转 BootJumpASM( Address[ 0 ], Address[ 1 ]);}

再次说明bootloader与底层硬件和实际需求有关,以上代码仅供参考,主要是提供思路,方便大家理解。

责任编辑:haq

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

    关注

    462

    文章

    53534

    浏览量

    459012
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388667
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84760
  • keil
    +关注

    关注

    69

    文章

    1224

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于E203 NICE协处理器扩展指令

    (memory response channel) Nice 反馈通道(response channel) 调用协处理器的方法:扩展一个用RTL级代码编写的协处理器,想个办法调用这个独立
    发表于 10-21 14:35

    Cortex-M0+处理器的HardFault错误介绍

    ARM处理器中,如果一个程序产生了错误并且被处理器检测到,就会产生错误异常。Cortex-M0+处理器只有一种异常用以处理错误:HardF
    的头像 发表于 10-14 10:50 2953次阅读
    Cortex-M0+<b class='flag-5'>处理器</b>的HardFault错误介绍

    德州仪器AM62Ax Sitara™处理器技术解析

    Texas Instruments AM62A/AM62A-Q1基于ARM ^®^ 的处理器是车规级异构ARM处理器系列的一部分。这些处理器
    的头像 发表于 08-13 10:25 1019次阅读
    德州仪器AM62Ax Sitara™<b class='flag-5'>处理器</b>技术解析

    【老法师】多核异构处理器中M核程序的启动、编写和仿真

    有很多研究单片机的小伙伴在面对多核异构处理器时,可能会对多核的启动流程感到困惑——因为不熟悉GCC编程和GDB调试,所以也无法确定多核异构处理器的程序是否能像单片机那样方便地编写和仿真。本篇
    的头像 发表于 08-13 09:05 3631次阅读
    【老法师】多核异构<b class='flag-5'>处理器</b>中M核程序的启动、<b class='flag-5'>编写</b>和仿真

    石油测井仪器电子舱的“大脑”——高温ARM处理器芯片

    175℃高温ARM处理器芯片是高温电子学的尖端成果,是解锁深部、高温油气资源勘探开发的关键技术之一
    的头像 发表于 07-22 13:09 704次阅读
    石油测井仪器电子舱的“大脑”——高温<b class='flag-5'>ARM</b><b class='flag-5'>处理器</b>芯片

    龙芯处理器支持WINDOWS吗?

    龙芯处理器目前不支持原生运行Windows操作系统,主要原因如下: 架构差异 龙芯架构:龙芯早期基于MIPS架构,后续转向自主研发的LoongArch指令集(与x86/ARM不兼容
    发表于 06-05 14:24

    集成多种Arm内核的超高性能微处理器RZ/G2M数据手册

    RZ/G2M凭借双核 Arm® Cortex®-A57(1.5GHz)和四核 Arm Cortex-A53(1.2GHz)中央处理器(CPU),可获得更高规格的处理性能,同时具备 3D
    的头像 发表于 03-10 16:37 916次阅读
    集成多种<b class='flag-5'>Arm</b>内核的超高性能微<b class='flag-5'>处理器</b>RZ/G2M数据手册

    在AWS Graviton4处理器上运行大语言模型的性能评估

    亚马逊云科技 (AWS) 新一代基于 Arm 架构的定制 CPU —— AWS Graviton4 处理器已于 2024 年 7 月正式上线。这款先进的处理器基于 64 位 Arm
    的头像 发表于 02-24 10:28 1233次阅读
    在AWS Graviton4<b class='flag-5'>处理器</b>上运行大语言模型的性能评估

    Arm技术助力Google Axion处理器加速AI工作负载推理

    Arm Neoverse V2 平台赋能的 Google Axion 处理器已在 Google Cloud 上正式上线,其中,C4A 是首款基于 Axion 的云虚拟机,为基于 CPU 的人工智能 (AI) 推理和通用云工作负载实现了显著的性能飞跃。
    的头像 发表于 02-14 14:11 956次阅读
    <b class='flag-5'>Arm</b>技术助力Google Axion<b class='flag-5'>处理器</b>加速AI工作负载推理

    RV1109处理器概述

    RV1109处理器是一款集成了先进技术的高性能芯片,其主要特性彰显了在多个领域的强大应用能力。 该处理器搭载了双核设计,结合了ARM Cortex-A7处理器核心与RISC-V MCU
    的头像 发表于 02-08 17:04 1891次阅读

    量子处理器的作用_量子处理器的优缺点

    量子处理器(QPU),又称量子级计算机处理器,是量子计算机中的核心部件,其作用主要体现在以下几个方面:   一、高速计算与处理能力   量子处理器利用量子比特的叠加和纠缠特
    的头像 发表于 01-27 13:44 1509次阅读

    量子处理器是什么_量子处理器原理

    量子处理器(QPU)是量子计算机的核心部件,它利用量子力学原理进行高速数学和逻辑运算、存储及处理量子信息。以下是对量子处理器的详细介绍:
    的头像 发表于 01-27 11:53 1770次阅读

    EE-218:为ADSP-TS201 TigerSHARC处理器编写高效浮点FFT

    电子发烧友网站提供《EE-218:为ADSP-TS201 TigerSHARC处理器编写高效浮点FFT.pdf》资料免费下载
    发表于 01-14 16:46 0次下载
    EE-218:为ADSP-TS201 TigerSHARC<b class='flag-5'>处理器</b><b class='flag-5'>编写</b>高效浮点FFT

    双向逆变器之ARM内核处理器

    继续原来给大家分享的内容: 双向逆变器之ARM内核处理器 今天用开发板调试了一下工作所需要的波形时序,效果还不错,软件上最终还得用寄存操作,库函数只能做简单的功能,不方便
    的头像 发表于 01-03 09:12 1326次阅读
    双向逆变器之<b class='flag-5'>ARM</b>内核<b class='flag-5'>处理器</b>

    强悍的AWS Graviton4处理器及其背后的Arm Neoverse

    电子发烧友网报道(文/吴子鹏)在今年的亚马逊re:Invent 2024大会上,该公司正式对外发布了旗下第四代自研Arm芯片——Graviton4。作为目前最强大的Graviton处理器
    的头像 发表于 12-19 00:04 2901次阅读