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.

MSP430F2416如何擦写片内地址》64k的地址空间?

Other Parts Discussed in Thread: MSP430F249

原来是用的MSP430F249,后来空间不够了改用F2416,但是地址》0xFFFF的高位空间,不知道如果去擦写这些高位空间。

  • 这部分内容在用户手册312页:http://www.ti.com/cn/lit/pdf/slau144,可以结合以下网页一起看:http://bbs.ednchina.com/BLOG_ARTICLE_2053410.HTM

  • 谢谢Viki,但是网页中只有正常的对地位地址空间的读写方式。

    如果我要对0x13000这个地址的扇区进行擦写操作的话,总是不成功。

    void Test_WriteFlash(void)
    {
    U16 i;
    char* pdb;

    WDTCTL = WDTPW + WDTHOLD;

    //second segment
    pdb = (int *)FLASH_TEST;
    FCTL3 = FWKEY; //clear lock bit
    FCTL1 = FWKEY + ERASE; //set erase bit

    *pdb = 0;
    FCTL1 = FWKEY + WRT; //dummy write
    while ((FCTL3 & BUSY) > 0);
    *pdb = 0x55;

    //-- disable flash write
    FCTL1 = FWKEY;
    FCTL3 = FWKEY + LOCK;

    }

    当#define FLASH_TEST 0x2000时,能够把0x2000地址的扇区删除并对第一个 字节写入0x55.

    当#define FLASH_TEST 0x13000时,对0x13000地址的操作则无法成功。

  •       怎么改代码也解决不了。

          这几天我也在考虑一个类似的问题,刚好在前天找到了解决方法。这实际上是地址的问题,应由编译环节解决。设为大地址模式就成了。

         手册里往往只给出简单实例,缺少我们的个性需求。

  • 请问在IAR中,如何实现你说的改成大地址的模式?

  • ,

    》0xFFFF的高位空间操作不成功,就是由于没有将设置更改为大地址的模式。具体操作见下图。

    BR,

    Lina

  • ,

    总之就是, 当操作的FALSH地址超过了64KBYTE时,需要在编译器选项中处理器设置里将DATA/CODE MODE设置为LARGE。

    上面是IAR中的操作,IAR 开发环境中,右键点项目名称进入Options for node "xxx", 在General Options的Target页面的Data Model选项中 选择Large模式.

    为了防止别人也有类似问题,在CCS中时,操作如下:

    希望对你有帮助!O(∩_∩)O~

    BR,

    Lina

  • __data20_write_short 这个代码就可以解决。