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

    浏览量

    9916
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    手把手带你移植HAL库函数

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

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

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

    如何移植爱星云的源码

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

    stm32移植ucos iii教程

    移植µC/OS-III的教程。 准备工作 在开始移植之前,您需要准备以下工具和环境: STM32系列微控制器开发板 STM32CubeMX工具(用于生成底层驱动代码) Keil MDK(用于编译和下载
    的头像 发表于 01-02 16:29 701次阅读

    AI算法在RZ/V芯片中的移植推理流程

    之前文章已介绍了一些AI算法Demo的应用 ,我们提供从模型训练到RZ/V系列嵌入式端推理应用的完整流程。整体流程如下图所示。
    的头像 发表于 12-20 12:21 768次阅读
    AI算法在RZ/V芯片中的<b class='flag-5'>移植</b>推理<b class='flag-5'>流程</b>

    什么是CI/CD?基本的gitlab CI/CD流程详解

    什么是CI/CD?通俗来说就是启动一个服务,能够监听代码变化,然后自动执行打包,发布等流程
    的头像 发表于 12-08 09:50 2690次阅读
    什么是CI/CD?基本的gitlab CI/CD<b class='flag-5'>流程</b>详解

    AD7711的校准流程是?有没有代码可以参考?

    1..AD7711的校准流程是?有没有代码可以参考? 2.10Mhz的外部晶振启动慢,用SPI用外部时钟的话:外部晶振是不是可以省略? 3.16倍的输入电压增益和2.5V的电压基准,回算输入电压是什么公式?
    发表于 12-06 07:19

    嵌入式Linux移植与系统启动解读

    所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说,主要是从一种硬件平台转移到另一种硬件平台上运行。
    的头像 发表于 11-25 10:07 957次阅读
    嵌入式Linux<b class='flag-5'>移植</b>与系统启动解读

    因STM32移植而引发的两个小疑问

    有STM32用户将基于STM32F0芯片的代码移植到STM32F4系列时遇到了些麻烦。其中有个问题跟中断处理有关。有个中断服务程序代码在STM32F0芯片里运行正常,移植到STM32F
    的头像 发表于 11-18 14:12 636次阅读
    因STM32<b class='flag-5'>移植</b>而引发的两个小疑问

    llama.cpp代码结构&amp;调用流程分析

    llama.cpp 的代码结构比较直观,如下所示,为整体代码结构中的比较核心的部分的代码结构
    的头像 发表于 11-07 09:23 1335次阅读
    llama.cpp<b class='flag-5'>代码</b>结构&amp;调用<b class='flag-5'>流程</b>分析

    xapp1218移植到zedboard板子上大体流程是什么?

    将xapp1218移植到zedboard板子上,大体流程是什么
    发表于 10-18 07:16

    用户代码移植到STM32芯片时发生非对齐错误怎么办

    为什么基于Cortex-M3/M4的STM32芯片组织的用户代码移植到基于Cortex-M0/M0+的STM32芯片时为何可能会发生非对齐错误? 这是因为基于Cortex-M3/M4的STM32芯片
    的头像 发表于 09-09 15:48 1187次阅读
    用户<b class='flag-5'>代码</b><b class='flag-5'>移植</b>到STM32芯片时发生非对齐错误怎么办

    有没有官方提供的uCOS-II移植到nano100系列的代码参考?

    请问有没有官方提供的uCOS-II移植到nano100系列的代码参考?
    发表于 08-25 08:10