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

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

    关注

    454

    文章

    50676

    浏览量

    422992
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9079

    浏览量

    367279
  • 程序
    +关注

    关注

    117

    文章

    3781

    浏览量

    80989
  • keil
    +关注

    关注

    68

    文章

    1212

    浏览量

    166824
收藏 人收藏

    评论

    相关推荐

    Arm自研AI芯片,英伟达、MTK联合研发Arm AI PC处理器,算力之战升级

    电子发烧友网报道(文/吴子鹏)作为目前两大主流处理器架构之一,Arm架构在移动处理器有着非常强的统治力,并持续提升在PC处理器和服务市场的
    的头像 发表于 05-14 00:14 4353次阅读

    ARM处理器的寻址方式

    ARM处理器的寻址方式是处理器在执行指令时,根据指令中给出的地址信息来寻找物理地址的方法。ARM处理器支持多种寻址方式,以满足不同的编程需求
    的头像 发表于 10-05 17:08 234次阅读

    ARM处理器和CPU有什么区别

    ARM处理器和CPU(中央处理器)之间的关系及区别,可以从多个维度进行深入探讨。首先,需要明确的是,ARM处理器并非一种独立的CPU类型,而
    的头像 发表于 09-10 11:24 1352次阅读

    ARM处理器的工作模式和特点

    ARM处理器具有多种工作模式,这些模式根据处理器执行的任务和当前的状态进行划分。常见的ARM处理器工作模式包括用户模式(User Mode)
    的头像 发表于 09-10 11:22 1065次阅读

    ARM处理器的异常中断响应过程

    ARM处理器的异常中断响应是嵌入式系统设计中一个至关重要的环节,它确保了系统在面对内部或外部事件时能够稳定、可靠地运行。
    的头像 发表于 09-10 11:18 871次阅读

    ARM处理器的指令集包括哪些

    ARM处理器的指令集是一个庞大而复杂的系统,它涵盖了多种类型的指令,用于实现数据处理、程序控制、内存访问等多种功能。
    的头像 发表于 09-10 11:15 512次阅读

    ARM处理器的寄存组织及功能

    ARM处理器的寄存组织是其核心架构的重要组成部分,对于理解ARM处理器的运行机制和性能特点具有重要意义。以下是对
    的头像 发表于 09-10 11:11 1191次阅读

    ARM处理器和CISC处理器的区别

    ARM处理器和CISC(复杂指令集计算机)处理器在多个方面存在显著的区别。这些区别主要体现在架构原理、性能与功耗、设计目标、应用领域以及市场生态等方面。
    的头像 发表于 09-10 11:10 443次阅读

    ARM处理器的结构和特点

    ARM处理器,全称Advanced RISC Machines,是一种基于精简指令集(RISC)架构的微处理器。其结构和特点在嵌入式系统、移动设备、物联网等多个领域具有显著优势。以下将详细阐述
    的头像 发表于 09-10 11:09 727次阅读

    ARM处理器概述和发展历程

    ARM处理器是一种基于RISC(精简指令集计算机)架构的高性能微处理器,由英国公司ARM(Advanced RISC Machines)开发和授权。它以其低功耗、低成本和高性能的特点,
    的头像 发表于 09-10 11:07 657次阅读

    AM1705 ARM处理器数据表

    电子发烧友网站提供《AM1705 ARM处理器数据表.pdf》资料免费下载
    发表于 08-08 11:50 0次下载
    AM1705 <b class='flag-5'>ARM</b>微<b class='flag-5'>处理器</b>数据表

    什么是ARM处理器?与x86的比较及其优缺点

    ARM处理器已迅速成为使用最广泛的处理器之一,每年生产多达数十亿台基于ARM的设备。那么,ARM处理器
    的头像 发表于 06-26 16:49 767次阅读
    什么是<b class='flag-5'>ARM</b><b class='flag-5'>处理器</b>?与x86的比较及其优缺点

    dsp是嵌入式微处理器的一种设备吗 ARM嵌入式微处理器有何特点?

    的微处理器,它通常具有低功耗、小尺寸和低成本的特点。 ARM嵌入式微处理器是由ARM公司设计的一系列低功耗、高性能的嵌入式处理器架构。它具有
    的头像 发表于 04-21 09:37 961次阅读

    业界首款基于Arm Cortex-M85处理器的MCU

    所有RA8系列MCU均利用Arm Cortex-M85处理器Arm的Helium威廉希尔官方网站 所带来的高性能,结合矢量/SIMD指令集扩展,能够在数字信号处理器(DSP)和机器学习(ML)的实
    发表于 03-05 14:14 690次阅读
    业界首款基于<b class='flag-5'>Arm</b> Cortex-M85<b class='flag-5'>处理器</b>的MCU

    STM32无法进入片上Bootloader处理方法

    STM32无法进入片上Bootloader处理方法  当STM32芯片无法进入片上Bootloader时,我们需要采取一系列的处理方法来解决这个问题。以下将详细介绍一些常见的
    的头像 发表于 02-02 14:33 2024次阅读