在线时间30 小时
UID3086401
注册时间2014-12-24
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 240
- 最后登录
- 2017-6-28
|
KDS下使用KSDK库操作FLASH,芯片型号MK22FN1M0A,把数据写入FLASH后,读出来都是0x00,
但是读flashSSDConfig.PFlashBase + PFLASH_IFR中的数据是0xFF
参考的是KSDK1.3中的DEMO
#define LAUNCH_CMD_SIZE 0x100
#define CALLBACK_SIZE 0x80
#define TesetBufferSize 4
/* array to copy __Launch_Command func to RAM */
uint16_t __ram_func[LAUNCH_CMD_SIZE/2];
uint16_t __ram_for_callback[CALLBACK_SIZE/2]; /* length of this array depends on total size of the functions need to be copied to RAM*/
uint8 UserFlashWriteBuffer[TesetBufferSize] = {0};
uint8 UserFlashReadBuffer[TesetBufferSize] = {0};
FLASH_SSD_CONFIG flashSSDConfig =
{
.ftfxRegBase = 1073872896U,
.PFlashBase = 0U,
.PFlashSize = 1048576U,
.DFlashBase = 268435456U,
.DFlashSize = 0x00U,
.EERAMBase = 335544320U,
.EEESize = 0x00U,
.DebugEnable = false,
.CallBack = NULL_CALLBACK,
};
pFLASHCOMMANDSEQUENCE g_FlashLaunchCommand = (pFLASHCOMMANDSEQUENCE)0xFFFFFFFF;
void UserFlash_Callback(void)
{
}
void UserFlash_Init(void)
{
uint32_t ret;
uint32_t destination; /* Address of the target location */
uint32_t size;
uint32_t end;
uint8_t securityStatus;
uint16_t number;
uint32_t margin_read_level;
uint32_t i, FailAddr;
FlashInit(&flashSSDConfig);
/**************************************************************************
* Set CallBack to callback function
***************************************************************************/
flashSSDConfig.CallBack = (PCALLBACK)RelocateFunction((uint32_t)__ram_for_callback , CALLBACK_SIZE , (uint32_t)UserFlash_Callback);
g_FlashLaunchCommand = (pFLASHCOMMANDSEQUENCE)RelocateFunction((uint32_t)__ram_func , LAUNCH_CMD_SIZE ,(uint32_t)FlashCommandSequence);
destination = flashSSDConfig.PFlashBase + (flashSSDConfig.PFlashSize - FTFx_PSECTOR_SIZE);
//ERASE
size = FTFx_PSECTOR_SIZE;
ret = FlashEraseSector(&flashSSDConfig, destination, size, g_FlashLaunchCommand);
if (FTFx_OK != ret)
{
printf("Erase Error\n");
}
else
{
printf("Erase OK\n");
}
/* Verify section for several sector of PFLASH */
number = FTFx_PSECTOR_SIZE/FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT;
for(margin_read_level = 0; margin_read_level < 0x2; margin_read_level++)
{
ret = FlashVerifySection(&flashSSDConfig, destination, number, margin_read_level, g_FlashLaunchCommand);
if (FTFx_OK != ret)
{
printf("Check Error\n");
}
}
//Get secuity state
securityStatus = 0x0;
ret = FlashGetSecurityState(&flashSSDConfig, &securityStatus);
switch(securityStatus)
{
case FLASH_NOT_SECURE:
default:
printf("\r\n\r\n---->Flash is UNSECURE!");
break;
case FLASH_SECURE_BACKDOOR_ENABLED:
printf("\r\n\r\n---->Flash is SECURE, BACKDOOR is ENABLED!");
break;
case FLASH_SECURE_BACKDOOR_DISABLED:
printf("\r\n\r\n---->Flash is SECURE, BACKDOOR is DISABLED!");
break;
}
/* Read on P-Flash */
destination = flashSSDConfig.PFlashBase + 0xC0;//PFLASH_IFR; /* Start address of Program Once Field */
ret = FlashReadResource(&flashSSDConfig, destination, UserFlashReadBuffer, 0x0, g_FlashLaunchCommand);
//write
destination = flashSSDConfig.PFlashBase + (flashSSDConfig.PFlashSize - FTFx_PSECTOR_SIZE);
ret = FlashReadResource(&flashSSDConfig, destination, UserFlashReadBuffer, 0x0, g_FlashLaunchCommand);//结果是是0XFF
for(i=0; i<TesetBufferSize; i++)
{
UserFlashWriteBuffer[i] = i;
}
size = TesetBufferSize;
ret = FlashProgram(&flashSSDConfig, destination, size, UserFlashWriteBuffer, g_FlashLaunchCommand);
if (FTFx_OK != ret)
{
printf("Program Error\n");
}
//read
FlashReadResource(&flashSSDConfig, destination, UserFlashReadBuffer, 0, g_FlashLaunchCommand);//结果全是0X00,应该是0,1,2,3
printf("End");
while(1);
}
|
|