微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > KL25Z128的Flash擦写操作

KL25Z128的Flash擦写操作

时间:10-02 整理:3721RD 点击:
下面是我的code

  1. unsigned char
  2. Flash_SectorErase(uint_32 *FlashPointer)
  3. {
  4.     unsigned char Return = Flash_OK;
  5.     uint_32 FlashPtr = (uint_32)FlashPointer;
  6.     /* Allocate space on stack to run flash command out of SRAM */
  7.     /* wait till CCIF is set*/
  8.     while (!(FTFL_FSTAT & FTFL_FSTAT_CCIF_MASK))
  9.     {;}
  10.    
  11.     /* Write command to FCCOB registers */
  12.     FTFL_FCCOB0 = FlashCmd_SectorErase;
  13.     FTFL_FCCOB1 = (uint_8)(FlashPtr >> 16);
  14.     FTFL_FCCOB2 = (uint_8)((FlashPtr >> 8) & 0xFF);
  15.     FTFL_FCCOB3 = (uint_8)(FlashPtr & 0xFF);
  16. FTFL_FSTAT |= 0x80;   
  17.     /* wait for command completion */
  18. while (!(FTFL_FSTAT & FTFL_FSTAT_CCIF_MASK)) {};
  19. }

复制代码

每次运行到:FTFL_FSTAT |= 0x80;
   不管我给的的参数是多少都没用,MCU肯定 复位,求高手指导!

代码是否拷贝到RAM中执行了?

没有,因为我有个代码拷贝到RAM中的历程,

  1. flashCmdSize = 0x200;
  2.     flashCmdFr = (UINT32)FlashCommandSequence - 1;
  3.     flashCmdTo = (UINT32)__ram_for_command_sequence_func;
  4.     for(i=0;i < flashCmdSize;i++)
  5.     {
  6.        value = READ8(flashCmdFr);
  7.        flashCmdFr++;
  8.        WRITE8(flashCmdTo, value);
  9.        flashCmdTo++;
  10.     }
  11.     pFlashCommandSequence = (pFLASHCOMMANDSEQUENCE)((UINT8 *)__ram_for_command_sequence_func + 1);

复制代码

这样的话,在For循环里面也会复位MCU,我不知道为什么。
我想把2个Demo合并成一个,但他们的.ld文件里面的配置不一样,所以会有这种问题。

很可能是因为你没有拷贝到RAM中执行的原因。官方例程有对与FLASH操作的例程。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top