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:在0x1000处重新加载 USB BSL 代码...正在擦除闪存

Guru**** 2535880 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/781610/msp430f5659-reloading-usb-bsl-code-at-0x1000-erasing-flash

器件型号:MSP430F5659

大家好、我的工作正常、现在我在从0x1000到0x17FF 擦除闪存时遇到了问题。 当我运行下面的代码时、一旦我进入虚拟写入来启动擦除、程序就失去控制。 它看起来像是在不断复位或永远不会降落。 对正在发生的事情有什么想法? 我可以单步执行虚拟写入、但一旦我执行该行、它就会崩溃。

谢谢

//将正确的 BSL 代码写入1000-17FF
void Rewrite BSL (void)
{_DINT ();
静态无符号 int i、j;
静态 char * Flash_ptr;//初始化闪存指针
静态 char * Mem_ptrD;
Flash_ptr =(char *) 0x1000;
MEM_ptrD =(char *)&BSL_CODE;
for (j=0;j<4;j++)
{FCTL3 = FWKEY;//清除锁定位
FCTL1 = FWKEY | ERASE;//设置擦除位
*闪存_ptr = 0;//虚拟写入以擦除闪存段
FCTL1 = FWKEY |WRT;//为写入操作设置 WRT 位
延迟(100);
Flash_PTR+=0x200;//共4个段

Flash_ptr =(char *) 0x1000;
对于(I = 0;I < 0x800;I++)

*闪存_PTR++=*内存_ptrD++;//将值写入闪存

FCTL1 = FWKEY;//清除 WRT 位
FCTL3 = FWKEY | LOCK;//设置 LOCK 位
返回;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于读取/擦除/写入、必须首先解锁 BSL 闪存区域(如果我记住正确、通过清除 SYSBSLC 中的 SYSBSLPE 位)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    BSL 段具有额外的保护机制。  安全违规(访问闪存中的受保护区域、例如受保护的 BSL)将导致 BOR 复位。

    请检查 SYSBSLPE 位是否为1。 如果是、请在擦除 BSL 存储器之前清除此位。

      

    B.R

    冬季

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Zrno、Winter
    谢谢! 就是这样。 我在写操作之前清除了该位、然后在写操作后将其重新置位、工作正常。
    BR
    Jerry
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴听到这个消息。 我将关闭此帖子。