查看: 1528|回复: 0

MSP430G2755 Main Bootloader UART 移植指导

[复制链接]
  • TA的每日心情
    开心
    2019-7-26 14:50
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2019-7-29 11:33:18 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 tn28 于 2019-7-29 14:14 编辑

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

    本文基于MS430G2755为目标升级对象,详细讲述BootLoader的使用方法,并给出了具体的移植步骤。

    Figure1为MSPBoot软件框架,本文的分析都是基于这个典型软件框架。


    Figure1. MSPBoot软件框架路

    1. MSP430 Main Memory Bootloader 介绍

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

    2.MSPBoot的代码移植流程

    2.1 MS430G2755 CMD 文件的产生

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


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

    <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文件中的分布。



    Figure1.MSP430G2755中断向量



    Figure2. MSP430G2755 Bin文件对应虚拟中断向量表

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




    Figure3.MSP430G2755 Bootloader虚拟中断向量表


    2.2工程CMD文件添加到工程中

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



    Figure4.MSP540G2755 CMD文件

    2.3应用程序txt转化c文件

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



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

    Figure5.Host MCU添加升级程序


    2.4写入CRC校验地址信息

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



    Figure6. MSP430G2553添加CRC地址信息


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

    Figure7. MSP430G2553 计算CRC数值


    2.5修改MSP430G2755应用程序

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

    Figure8. MSP430G2755 UART口修改

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

    3.小结

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

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

    从0x8000-0x8100为应用程序

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

    从0xFC00-0xFFD0 为Bootloder

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


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 14:10 , Processed in 0.121835 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.