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

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

3天内不再提示

AN-2058: ADuCM355用户引导加载程序

星星科技指导员 来源:ADI 作者:ADI 2023-06-16 16:31 次阅读

已擦除的ADuCM355 闪存由于没有内核引导加载程序,必须首先由用户应用程序通过串行线进行编程

用户应用程序可以实现自己的引导加载程序,提供一个用于现场自我更新的机制。实现自己的用户引导加载程序要求以适当的方式构建用户应用程序,使其适合用户引导加载程序。

本应用笔记介绍了一种实现用引导加载程序的方法(以下称为"用户引导加载程序"):将用户闪存划分为两个单独的区域,并在一个区域中实现与CrossCore ^®^ 串行闪存编程器兼容的引导加载程序。

ADUCM355背景

用户引导加载程序的实现利用了ADuCM355的以下特性。

ADuCM355具有128 kB的用户闪存,为了擦除和写保护目的,用户闪存被分为多个单独的8 kB块。

复位后,片上内核立即执行以下操作:

  • 利用制造商数据引导器件。
  • 评估用户闪存元数据,以确定是切换到运行用户应用程序还是留在片上内核中。
  • 评估用户闪存元数据,以确定是否对用户闪存空间内的闪存块进行写保护。如果用户应用程序有效,它将应用块写保护并退出用户应用程序。如果用户应用程序无效或BM/P1.1引脚被置为有效,则它不会应用块写保护,而是留在片上内核中(内核执行图参见图7)。

留在片上内核中具有以下优点:

  • 恢复。禁止用户代码运行和执行可能阻止对器件进行所需访问的操作。
  • 避免写保护。无法擦除写保护块,即使批量擦除也不行。这样就避免了通过用户闪存元数据间接应用于用户闪存或通过用户应用程序执行直接应用于用户闪存的写保护。由于代码执行仍在内核中,因此可以进行用户闪存批量擦除。

用户引导加载程序的实现

用户引导加载程序放置在用户闪存的前8 kB中。剩余的120 kB可用于用户应用程序开发(见图1)。微信截图_20200307100422.png

图1.内存布局

用户引导加载程序是一个独立的应用程序,位于用户闪存的前8 kB中。用户应用程序必须从0x2000(即8 kB)开始执行,这需要对标准应用程序进行一些细微修改。

为了进行修改,需要使用自定义链接器配置文件,以将用户应用程序放置在用户闪存的适当区域。

自定义链接器文件的加载可以在IAR Embedded Workbench ^®^ 环境中通过访问链接器 > 配置选项卡来实现,如图5所示。完整过程参见"转换步骤"部分。

将.icf链接器脚本文件与GitHub上提供的ADuCM355标准文件进行比较,图2突出显示了一些不同之处。
微信截图_20200312083258.png

图2.链接器配置文件修改

引导加载程序的放置

用户引导加载程序驻留在用户闪存的前8 kB中。用户引导加载程序的构建与任何其他ADuCM355应用程序一样,带有异常向量表、校验和放置以及用户闪存元数据。

用户应用程序的放置

用户应用程序从0x2000开始放置,应用程序可用空间减少0x2000。Cortex ^®^ -M3中断向量表位于0x2000。用户引导加载程序会更新Cortex-M3向量表偏移寄存器(VTOR)以匹配该位置。

用户闪存元数据偏移0x2000。

用户引导加载程序元数据

用户引导加载程序元数据由片上内核检查并执行相应操作。片上内核首先确保用户引导加载程序区域的有效性,然后转移控制权并将用户闪存写保护应用于用户闪存的用户引导加载程序区域。

用户应用程序元数据

用户应用程序元数据由用户引导加载程序检查并执行相应操作。用户引导加载程序首先确保用户应用程序区域的有效性,然后转移控制权并将用户闪存写保护应用于用户闪存的用户应用程序区域。

用户引导加载程序对用户应用程序元数据执行的检查和操作,与片上内核对用户引导加载程序元数据(或标准应用程序元数据)执行的检查和操作类型相同,仅更改所使用的地址和范围。这样,标准应用程序只需偏移0x2000便可轻松转换为由用户引导加载程序进行操作。

桌面应用程序

该协议与ADI公司CrossCore串行闪存编程器工具兼容,后者可从www.analog.com/crosscore-utilities下载

CrossCore串行闪存编程器工具支持几种不同的协议变体。用户引导加载程序的这种实现支持 ADuCM3027ADuCM3029所实现的版本。选择Target下的ADuCM302x选项,如图3所示。

操作(Action) 支持的选项有 编程(Program)擦除(Erase)

点击 浏览(Browse) 按钮,从 要下载的文件(File to download) 中加载用户应用程序Intel十六进制文件,然后点击 开始(Start) 按钮。

微信截图_20200307100422.png

图3.CrossCore串行闪存编程器窗口

转换步骤

转换现有应用程序以与用户引导加载程序或用户应用程序模型一起使用时,需要执行如下步骤。

  1. 从GitHub下载或克隆ADuCM355软件开发套件(SDK)文件。在GitHub上搜索ADuCM355,找到aducm355-examples SDK文件。
  2. 在SDK中,导航至examples > DigitalDie > M355_Bootloader 。将 BootloaderConstantArray .c文件以及iar文件夹中的 user-bootloader-sample-application.icf文件复制并粘贴到要实现引导加载程序的活动项目目录中。
  3. 在IAR Embedded Workbench中打开所需的项目,然后在项目浏览器中右键点击应用程序文件夹,将BootloaderConstantArray.c文件添加到项目中。然后转到添加(Add) > 添加文件(Add Files) ,选择BootloaderConstantArray.c文件。用户引导加载程序以C文件提供,该C文件包含一个用来实现用户引导加载程序的C指令代码数组。还有一个自定义链接器配置文件,用以确保将此数组正确放置在0x0000 0000处。!微信截图_20200312083258.png

图4.添加引导加载程序
4. 在IAR Embedded Workbench中访问链接器 (Linker) 配置(Config) 选项卡,选择自定义链接器配置文件,如图5所示。选择覆盖 默认值(Override default) 框,然后浏览查找user-bootloader-sample-application.icf文件。
此更改的链接器配置文件确保用户引导加载程序和用户应用程序根据用户引导加载程序或用户应用程序模型正确放置。
微信截图_20200312083305.png

图5.指定自定义链接器配置文件
5. 用户应用程序校验和的计算范围必须根据更改的内存布局加以调整。要在IAR Embedded Workbench中调整校验和计算,请转到链接器(Linker) > 校验和(Checksum) 选项卡,如图6所示。在 起始地址(Start address) 框中输入 0x2000 ,在 结束地址(End address) 框中输入 0x27FB
在标准应用程序中,片上内核使用此计算来检查用户闪存中应用程序的完整性。
在用户引导加载程序或用户应用程序模型中,片上内核在切换到用户引导加载程序之前先检查其完整性,用户引导加载程序在切换到用户应用程序之前先检查其完整性。微信截图_20200314102235.png

图6.校验和计算
6. 修改startup_ADuCM355.c文件。

  1. 添加以下代码行:

    /* Linker provided symbols */

    extern uint32_t FINAL_CRC_PAGE;

  2. 搜索NumOfCRCPages并将以下行:

    __root const uint32_t NumOfCRCPages=0;

    替换为以下行:

    __root const uint32_t NumOfCRCPages=(uint32_t)&FINAL_CRC_PAGE;

  3. 最后一步是向主程序添加一个函数。

    void __iar_init_core (void)

    {

    SCB->VTOR = (uint32_t)

    &__vector_table;

    }
    此函数的作用是将VTOR指向用户固件异常表。引导加载程序已经执行此步骤,但在调试模式下,IAR Embedded Workbench会绕过运行引导加载程序的步骤。IAR Embedded Workbench调试器执行Type 0复位(硬件复位),然后将PC设置到它认为的复位向量。因此,为使中断在调试模式下工作,此函数是必需的。

现在可以正常下载和调试此应用程序。

引导模式引脚

片上内核和用户引导加载程序具有不同的引导模式引脚,这些引脚会改变各自的执行流程。

片上内核引导模式引脚的优先级高于用户引导加载程序引导模式引脚的优先级。

片上内核BM/P1.1引脚

BM/P1.1绕过用户闪存中所有软件的执行。

BM/P1.1引脚连接到EVAL-ADucM355QSPZ评估板上的开关S3。按住开关S3,随后执行复位操作(按下再释放开关S1),就会将片上内核置于引导模式。

用户引导加载程序引导模式P1.0/SYS_WAKE引脚

P1.0/SYS_WAKE引脚绕过用户闪存中可能存在的用户应用程序的执行。如果置为有效,则用户引导加载程序不检查是否存在有效的用户应用程序,而立即进入下载模式。

P1.0/SYS_WAKE引脚连接到EVAL-ADucM355QSPZ评估板上的开关S2。按住开关S2,随后执行复位操作(按下再释放开关S1),就会将用户引导加载程序置于引导模式。

微信截图_20200314102240.png

图7.引导加载程序流程图

审核编辑:郭婷

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

    关注

    9

    文章

    395

    浏览量

    42304
  • 应用程序
    +关注

    关注

    37

    文章

    3265

    浏览量

    57677
收藏 人收藏

    评论

    相关推荐

    ADI推出新型智能电子化学传感器接口IC—ADuCM355

    ADI近日宣布推出一款可实现新一代智能电子化学传感器的新型传感器接口IC。ADuCM355精密模拟微控制器带有生物传感器和化学传感器接口,是目前能够在单个芯片上同时实现恒电位仪和电化学阻抗频谱分析仪(EIS)功能的唯一解决方案。
    的头像 发表于 06-28 10:42 1.1w次阅读

    aducm355内部的温度传感器怎么使用?p2.1口的中断是怎么产生的?

    aducm355内部的温度传感器怎么使用?p2.1口的中断是怎么产生的?
    发表于 01-11 08:15

    请问ADUCM355的阻抗测量范围是多少?

    我想请问ADUCM355的阻抗测量范围,因为我在文档开头的介绍中看到是<1-10M欧,而在下面的参数表里写的确是只到10000欧,也就是10k欧,我想请问哪个是对的呢?英文文档里也是这样。
    发表于 01-11 07:49

    ADUCM355 ADC是否可以设为差动输入模式?

    ADUCM355 ADC 是否可以设为差动输入模式?
    发表于 01-11 07:48

    设计的PCB使用了ADuCm355作为主控,在Keil中识别不到芯片的ID号是什么原因导致的呢?

    设计的PCB使用了ADuCm355作为主控,打算使用四线SWD下载程序。但是,在Keil中识别不到芯片的ID号,请问是什么原因导致的呢。 我用的连接方式为测试Pin与下载针,用手按住连接的。电路板上的供能芯片的模拟电源和数字电源的电压都是3.3v。
    发表于 01-24 08:30

    请问ADuCM355序列器如何控制模拟前端和如何使用DAC输出交流电?

    您好,我现在正使用ADuCM355测试板测试电导率 参考的例程为M355_4WireZ 目前我遇到了两个问题不能参考手册和例程的注释中解决 1.例程通过序列器控制模拟前端进行操作,但是在例程中写入
    发表于 05-20 08:15

    请问ADuCM355序列器如何控制模拟前端和如何使用DAC输出交流电?

    您好,我现在正使用ADuCM355测试板测试电导率 参考的例程为M355_4WireZ 目前我遇到了两个问题不能参考手册和例程的注释中解决 1.例程通过序列器控制模拟前端进行操作,但是在例程中写入
    发表于 05-29 06:27

    ADuCM355和SmartMesh IP技术的无线水质监测系统介绍

    本文介绍使用ADI的ADuCM355和SmartMesh IP技术的无线水质监测系统。
    发表于 06-17 06:52

    新一代智能电子化学传感器的新型传感器接口IC ADuCM355详解

    本文介绍了ADuCM355主要特性,功能框图,应用电路以及评估板EVAL-ADuCM355QSPZ主要特性和应用连接图。
    的头像 发表于 07-22 05:24 8103次阅读
    新一代智能电子化学传感器的新型传感器接口IC <b class='flag-5'>ADuCM355</b>详解

    ADUCM355 具有化学传感器接口的精密模拟微控制器

    电子发烧友网为你提供ADI(ti)ADUCM355相关产品参数、数据手册,更有ADUCM355的引脚图、接线图、封装手册、中文资料、英文资料,ADUCM355真值表,ADUCM355
    发表于 02-22 15:02
    <b class='flag-5'>ADUCM355</b> 具有化学传感器接口的精密模拟微控制器

    ADuCM355和LTC6078解决方案

    在便携式连续水质监测应用中,需要小型的低功耗和平台化测量解决方案。本视频演示的ADuCM355和LTC6078解决方案能够进行常见传感器测量和诊断测试。
    的头像 发表于 06-28 06:12 2191次阅读

    ADuCM355如何提升电化学气体传感器的性能

    本视频展示ADuCM355如何提升电化学气体传感器的智能水平,实现自诊断并延长使用寿命。
    的头像 发表于 06-28 06:10 3849次阅读

    EVAL-ADuCM355QSPZ用户指南

    EVAL-ADuCM355QSPZ用户指南
    发表于 04-27 19:16 11次下载
    EVAL-<b class='flag-5'>ADuCM355</b>QSPZ<b class='flag-5'>用户</b>指南

    EVAL-ADuCM355 EVAL-ADuCM355评估板

    电子发烧友网为你提供ADI(ti)EVAL-ADuCM355相关产品参数、数据手册,更有EVAL-ADuCM355的引脚图、接线图、封装手册、中文资料、英文资料,EVAL-ADuCM355真值表,EVAL-
    发表于 07-15 09:00

    如何使用CAN引导加载程序在MAXQ7665A中加载用户应用代码

    CAN引导加载程序可通过CAN接口对MAXQ7665A微控制器进行编程。引导加载程序还可帮助设计
    的头像 发表于 02-21 16:40 781次阅读
    如何使用CAN<b class='flag-5'>引导</b><b class='flag-5'>加载</b><b class='flag-5'>程序</b>在MAXQ7665A中<b class='flag-5'>加载</b><b class='flag-5'>用户</b>应用代码