打印
[Kinetis]

关于flexNVM分区为EEROM的例程,有问题求助

[复制链接]
1369|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lifeng125521|  楼主 | 2016-2-25 23:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lifeng125521 于 2016-2-26 08:28 编辑

本人应用MK10DX256VLL7片子设计项目,使用技术支持提供的一个flexNVM分区为EEROM的程序,设置fllexRAM为2K的EEROM,且flexNVM为32K的EEROM backup,发现这个函数的一个问题,求助!/***********************************************************************************************
功能:通过FTFL相关寄存器,设置flexNVM为d-flash或EEROM的大小
形参:eeprom_size, int dflash_size
返回:成功 1
            已设置 0
详解:
************************************************************************************************/
int partition_flash(0X33, 0X03)
{
      /* 下面这个if语句,是如果分过区了,不再执行分区命令,直接返回0
       */
      if ((SIM_FCFG1 & SIM_FCFG1_DEPART(0xF)) != 0x00000F00)
      {
        //  printf("\nDevice is already partitioned.\n");
          return 0;
      }
   // 未进行分区,则继续执行下面的分区相关命令。
      /* Write the FCCOB registers */
      FTFL_FCCOB0 = FTFL_FCCOB0_CCOBn(0x80); // Selects the PGMPART command
      FTFL_FCCOB1 = 0x00;
      FTFL_FCCOB2 = 0x00;
      FTFL_FCCOB3 = 0x00;
      FTFL_FCCOB4 = 0X33;  //2K EEROM
      FTFL_FCCOB5 = 0X03;  // 32K  EEROM backup

      /* All required FCCOBx registers are written, so launch the command */
      FTFL_FSTAT = FTFL_FSTAT_CCIF_MASK;

      /* Wait for the command to complete */
      while(!(FTFL_FSTAT & FTFL_FSTAT_CCIF_MASK));

      return 1;
}

上面的函数中,
通过判断SIM_FCFG1 寄存器的DEPART位为1111,表明未进行分区,执行下面的分区命令,且返回1;
一旦分区,DEPART不再等于11111,直接返回0;
但是有个困惑,很久了!
一旦分区完成,在芯片不断电的情况下,是可以保证只分区一次,但是一旦重新上电,势必SIM_FCFG1 寄存器的DEPART位又变为1111,又重新执行分区。
这样的话,以前写进去的数据,是不是已经丢失?按理说即使K10重新上电,在FLASH未重新擦除之前,DEPART位不应该再是1111.

不知道具体怎么用,才能让K10电源重启后,不再执行分区命令。

相关帖子

沙发
lifeng125521|  楼主 | 2016-2-29 10:18 | 只看该作者
补充:程序在RAM运行,是正常的,在擦除之前,哪怕重新上电,也只是执行分区一次。但是在flash运行,分区完后,重新上电,程序还会执行一次分区。为什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

73

帖子

0

粉丝