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

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

3天内不再提示

MSPBoot的代码移植流程

电子设计 来源:电子设计 作者:电子设计 2022-01-13 15:32 次阅读

TIMSP430支持在主程序中加载Bootloader的方式进行在线升级操作,通过在线升级功能,客户可以通过外部处理器随时更新MSP430内部的程序及Bug 的远程修复。同时TI也提供了基于MSP430G2553的参考代码,本文详细的介绍了如何将MSP430G2553的Bootloader移植到MSP430G2755中,使用MSP 430G2553 Host对MSP430G2755 Device进行的升级操作。

1. MSP430 Main Memory Bootloader介绍

在MSP430G2xx 中实际上具有一个ROM版本的BSL(Bootloader) ,但是这个BSL仅仅支持外部MCU通过UART进行在线升级,而且而且所有的协议全部固化,无法进行修改或者更改其他接口方式进行升级操作。所以这个需要一个可以在主程序中运行的Bootloader,可以让外部MCU进行用户自定义的升级操作。同时TI也提供了一个基于MSP430G2553的参考例程,可以通过如下链接进行下载。http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPBoot/latest/index_FDS.html

本文使用的参考代码版本为MSPBoot_1_01_00_00,下图为MSPBoot的整个软件框架。

2. MSPBoot的代码移植流程

2.1 MS430G2755 CMD 文件的产生

首先用Per工具产生CMD文件(Generating Linker Files), 通过Per的工具会产生两个CMD文件,其中一个给MSP430G2755的Bootloader使用,另一个给MSP430G2755的应用程序使用。操作指令如下,

C:\Users\a0223791\Desktop\MSP430-BSL-IAP\MSPBoot_1_01_00_00\linkerGen>perl MSPBo

otLinkerGen.pl -file lnk_msp430G2755_Uart_1KB -dev MSP430G2755 -params 0x8000 0x

FFE0 0xFC00 48 6 0x1100 0x20FF 0x80 0x1000 0x10BF

这里面有几个重要的参数说明如下,

<0x8000 > = Start address of Flash/FRAM

对于MSP430G2553地址为0xC000,而MSP430G2755的地址需要修改为0x8000
<0xFFE0 > = Address of interrupt vector table

中断向量表的地址0xFFE0,对于MSP430G2553和MSP430G2755相同
<0xFC00> = Start address of Bootloader

Bootloader的起始地址0xFC00,对于两者也是相同的
<48 > =Size of the proxy table

这里的48对应于12个中断向量,每个中断向量占用4Byte
<6> = Size of shared vectors

在应用程序中一共有3个(P1/Time/Dummy)中断向量,每个中断向量占用2Byte,对应参数为6
<0x1100> = Start address of RAM

RAM的起始地址也需要修改为MSP430G2755的0x1100
<0x20FF > = End address of RAM

RAM的结束地址也需要修改为MSP430G2755的0x20FF
<0x80> = Size of the stack

MSP430G2755默认的堆栈大小为0x80
<0x1000> = Start address of info memory used for bootloader

Information的起始和结束地址MSP430G2553和MSP430G2755一致,无需修改
<0x10BF > = End address of info memory used for bootloader

Information的起始和结束地址MSP430G2553和MSP430G2755一致,无需修改

注意如上修改的参数6,及中断向量的数量,在Bootloader中的中断向量不需要修改,只修改MSP430G2755应用程序App中的中断向量即可,通过下图可以直观看到中断向量的在Bin文件中的分布。

图二 MSP430G2755中断向量

图三 MSP430G2755 Bin文件对应虚拟中断向量表

注意在这里的809C 和80E2 就对应MSP430G2755应用程序中的P1_Isr 和Timer_A,GPIO中断和定时器中断。下图会看到在MSP430G2755 Bootloader中虚拟中断向量表的分布。

图四MSP430G2755 Bootloader虚拟中断向量表

2.2 工程CMD文件添加

将2.1步骤中产生的CMD文件,分别添加到MSP430G2755的Bootloader及应用程序App的工程中,如下图所示

图5 MSP540G2755 CMD文件

特别注意,如果使用的是TI默认的MSP430G2553的工程,需要将原工程的器件型号选择为MSP430G2755,并且把MSP430G2755自带的G2553的CMD文件删除掉,使用生成MSP430G2755的CMD文件。

2.3 应用程序txt转化c文件

通过CCS编译器,编译MSP430G2755的应用程序,编译完成后会产生一个txt文件下载格式,我们需要将这个产生的txt文件转换为.c文件,这个.c文件才能给主控MCU使用,通过Bootloader下载到MSP430G2755中。转化运行指令如下,

C:\Users\ a0223791\Desktop\MSP430-BSL-IAP\G2755_Porting\MSPBoot_1_01_00_00\430txt

_converter>430txt2C.pl App1_MSPBoot.txt AppForHostG2755.c App1

通过这步将生成的.c文件,添加到主MCU中的main函数文件路径中,在这里我们测试的主控MCU是MSP430G2553,添加后的程序如下图所示。

2.4 写入CRC校验地址信息

通过上步我们在主控MSP430G2553中添加了需要升级的应用程序,同时我们还要在主MCU中修改目标升级芯片(MSP430G2755)的CRC地址信息,修改参考如下,

注意此时已经不再需要MSPBoot用户指导手册中的CRC生成工具,进行CRC的校验,我们看到其实直接在主MCU中计算了CRC校验,并且把CRC的值放到指定的位置。

2.5 修改MSP430G2755应用程序

在这测试了将之前MSP430G2553默认的P1.1和P1.2口UART,修改为MSP430G2755硬件P3.4和P3.5口UART接收数据的接口。实际的参考代码如下,

图九 MSP430G2755 UART口修改

特别注意,在MSP430G2755应用程序App中,有两个中断默认使用即P1口和定时器中断,不能直接将P1口和Timer的中断直接屏蔽掉,这样会导致Host主控MSP430G2553升级MSP430G2553成功后,MSP430G2553并未正常的启动应用程序。如果在应用程序中不需要这两个中断向量,则在第一步产生CMD文件的过程中需要修改<6> = Size of shared vectors 这个参数。

3.小结

通过以上步骤我们完成了从MSP430G2553到MSP430G2755Bootloader的移植,那我们总结MSP430G2755 Bootloader和应用程序App的整个程序架构,分析如下。

我们通过工具读取了主程序移植了BootLoader的MSP430G2755的总代码,其中MSP430G2755存储Flash地址分析如下

从0x8000-0x8100为应用程序

从0xFBC0-0xFBF0 为虚拟的中断向量表

从0xFC00-0xFFD0 为Bootloder

从0xFFE0-0xFFF0 为真实的中断向量表

审核编辑:何安

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

    关注

    0

    文章

    341

    浏览量

    10019
收藏 人收藏

    评论

    相关推荐

    STM32连接机智云,代码移植,NTP实时时间获取(一)

    目录一、机智云介绍二、固件下载三、项目例程下载四、代码移植五、代码编写准备(已配置完毕,正式开始编写代码)六、设备配对与连接七、NTP(网络时间协议)实现八、网盘资料链接机智云介绍广州
    的头像 发表于 11-19 01:01 314次阅读
    STM32连接机智云,<b class='flag-5'>代码</b><b class='flag-5'>移植</b>,NTP实时时间获取(一)

    代码解析工具与自动化流程图生成解决方案

      摘要:CasePlayer2是一款强大的源代码解析工具,专门设计用于分析ANSI C、C、C++以及汇编语言源代码,并自动化地生成流程图等文件。该工具集成了多种功能,包括MISRA-C规范检查
    的头像 发表于 10-10 13:40 247次阅读

    基于机智云移植STM32L496G代码移植

    代码详解-机智云(gizwits.com)在移植的过程中遇到的一些问题,这里我将重构一下,大致内容跟文档差不多,但是根据文档的操作,会产生一些奇怪的报错,这里可以根
    的头像 发表于 09-20 08:05 439次阅读
    基于机智云<b class='flag-5'>移植</b>STM32L496G<b class='flag-5'>代码</b><b class='flag-5'>移植</b>

    【GD32 MCU 移植教程】5、GD32E230 系列移植到 GD32F330 系列

    移植到 GD32F330 系列的需求,本文 档专门针对既有的 GD32E230 代码如何移植到 GD32F330 做一个详细的介绍;
    的头像 发表于 09-03 10:05 1208次阅读
    【GD32 MCU <b class='flag-5'>移植</b>教程】5、GD32E230 系列<b class='flag-5'>移植</b>到 GD32F330 系列

    LKT(LCS)代码移植芯片优势

    所谓代码移植就是客户可以把自定义的程序一部分关键代码函数移植到加密芯片中运行。用户采用标准C语言编写代码,通过KEIL C编译器,编译并下载
    的头像 发表于 08-22 10:03 791次阅读

    基于MM32F5270的Ethernet实现LwIP协议栈移植

    LwIP是轻量化的TCP/IP协议,由瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。LwIP具有高度可移植性、代码开源,提供了三种编程接口(API):RAW API、NETCONN API 和 Socket API,用于与
    的头像 发表于 06-21 10:28 1226次阅读
    基于MM32F5270的Ethernet实现LwIP协议栈<b class='flag-5'>移植</b>

    CC2500和CC1101移植说明

    主要通过如何移植移植注意、关于芯片配置、如何生成导出配置四大步骤来说明CC2500和CC1101移植
    的头像 发表于 06-15 14:32 625次阅读
    CC2500和CC1101<b class='flag-5'>移植</b>说明

    代码移植后数据打印不完全是什么原因?

    当前我使用的是TWAI驱动功能,例程测试下来没问题,数据打印完善,但是我将代码twai_self_test例程代码移植自己的工程之中就会出现数据打印不完全的现象。请问是什么原因。
    发表于 06-14 06:30

    第三讲:单片机STC89C52+RA8889驱动控制彩屏 代码的压缩(Keil编译器)

    51单片机驱动控制芯片RA8889,源代码函数冗余较多,移植时可能会碰到输出程序过大,这里介绍压缩代码的方法。
    的头像 发表于 06-05 11:05 571次阅读
    第三讲:单片机STC89C52+RA8889驱动控制彩屏 <b class='flag-5'>代码</b>的压缩(Keil编译器)

    第二讲:单片机STC89C52+RA8889驱动控制彩屏 代码移植介绍

    介绍51单片机如何移植RA8889的代码进行彩屏驱动与控制
    的头像 发表于 06-04 10:36 1009次阅读
    第二讲:单片机STC89C52+RA8889驱动控制彩屏 <b class='flag-5'>代码</b><b class='flag-5'>移植</b>介绍

    手把手带你移植HAL库函数

    在嵌入式系统开发中,硬件抽象层(HAL,HardwareAbstractionLayer)库的使用可以极大地简化开发过程,提高代码的可移植性和维护性。本文将详细介绍如何快速搞懂HAL库的移植,帮助
    的头像 发表于 05-18 08:04 1949次阅读
    手把手带你<b class='flag-5'>移植</b>HAL库函数

    【鸿蒙】标准系统移植指南

    标准系统移植指南 本文描述了移植一块开发板的通用步骤,和具体芯片相关的详细移植过程无法在此一一列举。后续社区还会陆续发布开发板移植的实例供开发者参考。 定义开发板 本文以
    的头像 发表于 02-27 14:36 927次阅读
    【鸿蒙】标准系统<b class='flag-5'>移植</b>指南

    移植RT-THREAD在stm32开发板上,使用rt_kprintf不能正常打印的原因是什么?怎么解决?

    开发环境: STM32CubeMX 用于生成代码; STM32CubeIDE用于调试代码移植过程: 使用STM32CubeMX来移植RT-Thread;
    发表于 02-20 06:24

    求助,如何将C++代码从GNU移植到Tasking编译器?

    使用了使用任务编译器的 Aurix Development Studio IDE。 在将代码从 GNU 编译器移植到 TASKING 编译器的过程中,标准定义库存在多个问题(编译错误)。 您是否已经拥有
    发表于 01-31 07:29

    如何移植爱星云的源码

    上次已经给大家讲了如何搭建中间件SDK(Ai-WB2-12F使用安信可中间件接入爱星云,远程点个灯——第一篇)。经过上次的帖子,小伙伴们想必已经完成一个新项目的添加,并使用WB2编译成功,今天讲如何移植爱星云的源码。 在正式开始之前,先介绍一下设备上云的流程
    的头像 发表于 01-07 11:10 622次阅读
    如何<b class='flag-5'>移植</b>爱星云的源码