msp430 复位问题

msp430 复位问题

此问题尚无答案
All Replies
  • 秀才303分

    msp430复位方式有多种,这些复位方式的结果不一样。

    平台430f5659,我在其上做一个boot程序与应用程序跳转的实验,boot程序使用430的物理中断,应用程序另开辟中断向量表,应用程序的起始点为0x8000,即flash的起始点。

    在应用程序中使用asm("mov &0xFFFE, PC");汇编指令产生系统复位从而跳转到boot程序,在boot中擦除flash然后用串口重新下载应用程序。

    这时问题来了,从应用程序跳转到boot后,擦除flash时只能擦一个segment,后面程序就跑飞了。

    如果我在应用程序中采用掉电复位的方式,则进入boot后擦除flash就没有这个问题。

    我怀疑两种复位方式的不同导致结果的差别,具体原因我想不明白。

    请大家看看这个怎么解决?

  • 榜眼18653分

    你好,

    我看你描述有点模糊,你的boot程序和应用程序都是在main flash

    应用程序起始地址是0x8000?

    那boot程序起始地址是?

    你所谓的boot程序是自己的boot程序还是5XX的BSL程序?

    你描述的两个不同跳转方式我还是没看明白,可不可以用个框图说明问题?

    祝好

    Michael Qian

  • 秀才303分

    boot程序与app(应用程序)都在main flash,boot是自己写的,不是bsl。

    将flash地址的0xe000到0xffff这一段给boot用,其余的给app用。

    boot程序实际是系统的主程序,系统复位后会先进入boot,再从boot跳转到app,可以认为app是boot的一个子程序。

    问题出在擦除flash那一步,不同的复位方式导致擦除的不同结果。

  • 榜眼18653分

    你好,

    我怀疑是不是在不同boot方式下,reset复位向量已经被修改的原因造成。

    不知道你这边方便把你的工程文件发给我在实验室调试一下吗?

    祝好

    Michael Qian

  • 秀才303分

    其实这个问题的核心就是软件复位与掉电复位的区别,我没有找到区别。或许我关注的点是错的?

    怪异的地方是软件复位后(比如软件bor),擦除flash时擦完第一个segment就会停止,这个问题目前还没有解决。

  • 榜眼18653分

    你好,

    其实我也很奇怪为什么擦写完一个segment就会停止。

    看起来怪怪的。

    祝好

    Michael Qian

  • 秀才170分
    SkeletonBoot.zip

    我也遇到一个类似问题,就是先把整个Flash擦除,第一次通过串口升级可以写入成功,但是写完Flash后跳转到应用程序那条语句asm(" mov &0xF9FE, PC;");就没有跳转,其中0xF9FE是应用程序的复位地址,不知道什么原因,单片机用的MSPF5340,BOOT程序如附件所示,请大侠们分析下原因,不胜感激。

  • 秀才303分

    可否一并上传你的xcl文件

  • 秀才170分
    MSP430 Boot xcl.rar

    升级程序和应用程序的xcl文件均已上传,麻烦您帮忙看看问题何在,谢谢。

  • 秀才303分

    1  应用程序复位向量地址是

    -Z(CODE)INTVEC=F980-F9FF
    -Z(CODE)RESET=F9FE-F9FF

    看你原来是这样设置的,没有问题。

    2 你下载速率太高了,改成2400bps试试,应该没啥问题。

  • 举人1415分

    John C Smith

    msp430复位方式有多种,这些复位方式的结果不一样。...

    在应用程序中使用asm("mov &0xFFFE, PC");汇编指令产生系统复位从而跳转到boot程序,...

    從軟件迫使復位,使用 asm("mov &0xFFFE, PC") 不是一個很好的辦法。

    我建議你設置在 PMMCTL0 寄存器中的 PMMSWBOR PMMSWPOR

  • 秀才303分

    印象里,我当时使用外狗复位是好用的。

    几个软件复位都试过,都不行。后来我发现是从app回boot后软件在遇到循环体时跑飞了。

    至于为什么会跑飞还没找到原因。外狗复位没问题,所以我考虑是不同复位对系统的影响是不同的,但不知道是什么影响。

  • 秀才303分

    问题解决了。

    与复位方式没关系,我的思路方向错了。

    实际是应用程序在跳转时没有把所有的中断关掉,导致中断一直在运行使程序跑飞。

    非常感谢您的提醒。看来复位方式还是有区别的,通过拉低rst口会使寄存器都复位,而别的软件复位方式则不会使寄存器复位。

  • 秀才170分

    确实是中断引起的,把其他中断关闭,只用Uart的中断就正常了,非常感谢。

  • 秀才50分

    你好,我用MSP430做IAP从app跳转到boot时使用__disable_interrupt()将中断关闭后,才执行asm(" mov &0xFFFE, PC;"); 到应用程序后执行应用FLASH擦除时还是异常,但是重新上电复位就ok,请问你怎么把所有中断关闭的??