2473|3

43

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430在线升级的思考和问题请教!!! [复制链接]

本帖最后由 darkduck 于 2015-2-9 16:23 编辑

背景介绍:
    我正在做的一个项目要求实现在线升级功能。使用的是MSP430F5438A芯片。我的基本思路是,将FLASH分为启动区,和三个应用代码存放区。启动区位于0x05C00 ~ 0x0FF7F,三个应用代码存放区Block0~2分别位于  0x10000 ~ 0x1FFFF、0x20000 ~ 0x2FFFF和0x30000 ~ 0x3FFFF。程序启动时首先跳到启动区运行,然后程序根据标志判断当前应用代码运行在哪一个Block,利用跳转指令跳转到相应的Block区中去运行。
    在线升级的方式是通过串口协议,将不同Block的目标文件写入到对应的Block地址。
    由于三个应用代码存放的地址超过了0xFFFF,所以需要将中断向量拷贝到RAM中运行的方式来处理中断;
    并且由于复位中断向量所能跳转的最大地址为0xFFFF,所以程序启动时需要先运行到存放在低于0x10000地址的启动区,再从启动区利用BRA指令,跳转到相应的Block中去运行。

    问题:
    1. 为了编译得到位于三个不同区间的目标文件,需要对CMD文件进行修改,将代码定位到Block0~2的区间。这里有个问题,就是因为我已经将中断向量拷贝到RAM中运行的方式来处理中断,那么CMD文件中原来定义的从0xffd2地址开始存放的中断向量还有没有意义?我试图将CMD文件中的中断向量定义删除,不能编译通过。那么保留原来CMD文件中断向量定义,编译后得到的.txt文件。我是否可以将文件中包含的从0xffd2~0xffff地址的内容删除,保留余下部分。然后通过串口将文件写入到对应的区间,这样程序能正常运行吗?
   比如对于Block1的文件,我希望它是存放在0x10000~0x1ffff区间的,所以将cmd文件中相关地址全部定义到0x10000~0x1ffff区间。但是编译之后得到的.txt文件是从0xffd2开始的。那么我将从0xffd2~0xffff地址的数据删除,得到一个新的.txt文件。再通过串口,将这个新的.txt文件从地址0x10000开始,全部写入到MCU的Flash中。重新启动后,从启动区跳转到Block1的起始地址开始运行,程序是否能够正确运行?

    2. 上述跳转到Block的过程中,是应该跳到每个Block的起始地址,还是应该跳转到main函数的起始地址?
       比如,Block1的起始地址是0x10000,存放在Block1中的应用程序的main函数的起始地址是0x10266,那么在启动区要跳转到Block1时,是应该跳转到0x10000地址,还是0x10266地址呢?

    附件包含了自定义的CMD文件,已经编译得到的map和txt文件

Ref.zip

19.3 KB, 下载次数: 11

最新回复

基本上算是自己写boot程序了吧 这个没搞过,还是请FAE出马吧  详情 回复 发表于 2015-2-10 12:22
 
点赞 关注(1)

回复
举报

43

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
自己顶!!!!
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
基本上算是自己写boot程序了吧
这个没搞过,还是请FAE出马吧
 
个人签名

So TM what......?

 

 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

4
 
是的,BOOT的协议是自定义的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表