查看: 2986|回复: 6

[已解决] flexNVM分区为EEROM的程序

[复制链接]

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
38
最后登录
2018-12-14
发表于 2018-12-10 17:33:23 | 显示全部楼层 |阅读模式
本人应用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电源重启后,不再执行分区命令。

最佳答案

hui12356 发表于 2018-12-11 19:50 你好!仿真的时候,我复位读出来的数据都是对的,我每次程序初始化就开始读eeprom,只要不掉电读出数据都正 ... 你仿真的时候代码下载在哪里的?是RAM还是flash? 另外, 你做个IO ...
回复

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

新手上路

Rank: 1

积分
38
最后登录
2018-12-14
 楼主| 发表于 2018-12-10 17:35:46 | 显示全部楼层
主要是数据保存之后,一旦断电就没了,我是参考例程写的,实在是找不出问题,网上别人和我遇到同样的问题,那个大神能指点一下
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2018-12-10 17:52:20 | 显示全部楼层
    hui12356 发表于 2018-12-10 17:35
    主要是数据保存之后,一旦断电就没了,我是参考例程写的,实在是找不出问题,网上别人和我遇到同样的问题, ...

    建议把参考代码都发出来
    开心
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    38
    最后登录
    2018-12-14
     楼主| 发表于 2018-12-10 19:02:01 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24891
    最后登录
    2025-7-21
    发表于 2018-12-11 16:24:55 | 显示全部楼层
    "但是一旦重新上电,势必SIM_FCFG1 寄存器的DEPART位又变为1111,又重新执行分区。"
    如果分区之后,重新上电,这个寄存器不会变为1111.
    你这样,你debug看看,直接多次写EEPROM, 读出来看看值对不对?如果对了,你把代码在加上上电之后就去读EEPROM, 看看重新上电是否还有?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    新手上路

    Rank: 1

    积分
    38
    最后登录
    2018-12-14
     楼主| 发表于 2018-12-11 19:50:28 | 显示全部楼层
    你好!仿真的时候,我复位读出来的数据都是对的,我每次程序初始化就开始读eeprom,只要不掉电读出数据都正常,一掉电数据就没了,实在不明白官方的例程靠谱吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24891
    最后登录
    2025-7-21
    发表于 2018-12-12 13:41:58 | 显示全部楼层
    hui12356 发表于 2018-12-11 19:50
    你好!仿真的时候,我复位读出来的数据都是对的,我每次程序初始化就开始读eeprom,只要不掉电读出数据都正 ...

    你仿真的时候代码下载在哪里的?是RAM还是flash?
    另外, 你做个IO翻转,你烧进去,IO能翻转吗?至少保证代码烧进去断电,上电能够运行。
    你说的官方代码,你用的官方那个代码?什么IDE的工程?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 20:17 , Processed in 0.099870 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表