在线时间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); 
} 
 
 
        
        
        
         |   
 
 
 
 |