本帖最后由 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电源重启后,不再执行分区命令。
|