This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

msp430F5659 flash擦写的问题。

Other Parts Discussed in Thread: MSP430F5659

确切的说,我还没搞清楚问题的来源,姑且这么说吧。

在用串口进行程序升级的测试中,预先在flash中下载一段引导代码,此代码通过串口将应用程序的txt文件下载到指定位置的flash中,完成串口程序升级。

过程中出现一个奇怪的现象,在引导程序通过串口下载程序时,每当将数据下载到0x11010这个地址段时,mcu就会自动复位。通过仿真器调试发现,数据被从起始地址写到0x11010这个地址,0x11011开始就没有数据写入了,实际数据还没完,mcu已经复位了。

我换了不同的板子,使用不同的程序,都出现了这个问题。

后来我从xcl文件中修改了flash地址范围,将0x11010这个地址所在segment去掉。程序就能下载正常了。如下

// ---------------------------
// Code
//

-P(CODE)CODE=8000-ED7F,10000-87FFF
-Z(CODE)CODE_ID

// ---------------------------
// Constant data
//

-Z(CONST)DATA20_C,DATA20_ID=8000-ED7F,10000-87FFF

改为

// ---------------------------
// Code
//

-P(CODE)CODE=8000-ED7F,12000-87FFF
-Z(CODE)CODE_ID

// ---------------------------
// Constant data
//

-Z(CONST)DATA20_C,DATA20_ID=8000-ED7F,12000-87FFF

请问,0x11010开始的这个地址段在′f5系列有什么特别的吗,或者在5659中是特别的吗?

 

  • John C Smith,

    看了你的现象描述,有以下几点建议,你可以逐步看看:

    1. 关于MSP430F5659 BSL的建议

    John C Smith 说:
    在用串口进行程序升级的测试中,预先在flash中下载一段引导代码,此代码通过串口将应用程序的txt文件下载到指定位置的flash中,完成串口程序升级。

    请问你这里用的是自己编写的BSL程序吗?升级程序所在位置是放在哪里的?是Bootstrap loader memory 1000h~17FFh, 还是自己分配的地址?对于MSP430F5xx/MSP430F6xx而言,BSL是flash-based的,建议直接使用TI standard BSL,或者是在Standard BSL基础是稍微更改,来实现customerize BSL. 这样更保险,且资料较全:

    http://processors.wiki.ti.com/index.php/BSL_(MSP430)

    "MSP430 Programming Via the Bootstrap Loader (BSL) User's Guide" http://www.ti.com/lit/ug/slau319g/slau319g.pdf

    "Creating a Custom Flash-Based Bootstrap Loader (BSL)" http://www.ti.com/lit/an/slaa450c/slaa450c.pdf

    2. 关于现有Flash 0x11010地址操作

    我查看了手册,我理解0x11010并没有什么特殊性。

    首先建议建一个最小测试工程,参考code example(msp430f665x_flashwrite_02.c       Flash In-System Programming w/ Long-Word write at 0x1800) 直接对0x11010开始的Flash地址进行擦除和写入的操作,看看会不会出问题?记得当操作的FALSH地址超过了64KBYTE时,需要在编译器选项中处理器设置里将DATA/CODE MODE设置为LARGE。IAR 开发环境中,右键点项目名称进入Options for node "xxx", 在General Options的Target页面的Data Model选项中 选择Large模式.

    如果这样操作可以成功的话,说明此地址是可以操作的。

    其次,你提到由于Flash操作已经导致MCU复位了。你可以查看一下寄存器看看,此复位究竟是不是由于Flash操作的不当引起的。“A Flash memory password violation” 会导致系统PUC. 具体查看SYSRSTIV寄存器的值,是否为“1Ah = Flash password violation (PUC)”,如果不是,你也可以看看值为多少,什么引起复位。

    最好,本身MSP430 Flash操作需要注意的事项较多,例如供电电压,时钟频率,另外还有128Byte累积操作时间不能超过16ms(见datasheet P86)等,要继续操作,需要再次写入password, 还有进行Flash操作时,不能使能中断等等。一般建议,每128Byte,一个segment写入一次password为好,防止操作不当引起复位。

    BR,

    Lina