Flash example for s32k116

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Flash example for s32k116

跳至解决方案
2,047 次查看
AbhiMR
Contributor II

Hi NXP ,

             In ld file i need to define section as below,

MEMORY
{
/* Flash */
m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x000000C0
m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x0001F7E0
m_layout1  (RX) : ORIGIN = 0x0001FBF0, LENGTH = 0x00000400
m_layout2  (RX) : ORIGIN = 0x0001FFF0, LENGTH = 0x00000000

}

 

after which I started using flashdriver.c and .h file .

FLASH_DRV_Init()

/* For erase */

ret = FLASH_DRV_EraseSector(&flashSSDConfig, u32Address, BLOCK_SIZE);
DEV_ASSERT(STATUS_SUCCESS == ret);

 

/* Write data which are of 4 bytes minimum */
ret = FLASH_DRV_Program(&flashSSDConfig, u32Address, MAL_MEM_FLASH_SECTOR_SIZE, u16Data);
DEV_ASSERT(STATUS_SUCCESS == ret);

/* read */

memcpy(store  , linkarray, size );

 

In my code it will work only few time and not consistent with memcpy.

what will be the way to write properly , what are all we need to do config intially ?

Do we have any read function other than memcpy ?

 

Could you please help with better example for this usage ?

0 项奖励
回复
1 解答
1,923 次查看
danielmartynek
NXP TechSupport
NXP TechSupport

Hello @AbhiMR,

If you generated the SDK code in S32DS 3.4 with SDK 4.0.3 installed, you would get this structure

/* Flash user configuration 0 */
const flash_user_config_t Flash_InitConfig0 =
{
.PFlashBase = 0x0U,
.PFlashSize = 0x20000U,
.DFlashBase = 0x10000000U,
.EERAMBase = 0x14000000U,
.CallBack = NULL_CALLBACK
};

in .../board/peripherals_flash_FTFC.c

Not this:

const flash_user_config_t Flash_InitConfig =
{
/*.PFlashBase = 0x0001FBF0U,
.PFlashSize = 0x0001FBF0U,
.DFlashBase = 0x1FFFFC00U,
.EERAMBase = 0x20000000U,
.CallBack = NULL_CALLBACK
*/
.PFlashBase = 0,
.PFlashSize = 0x20000U,
.DFlashBase = 0x0001FFF0U,
.EERAMBase = 0x20000000U,
.CallBack = NULL_CALLBACK
};

 

You need to:

  1. Install S32DS 3.4
  2. Install SDK 4.0.3
  3. Create flash_partitioning_s32k116 from example
  4. Generate the SDK configuration:

     

danielmartynek_1-1734953451248.png

 

Regards,

Daniel

 

 

在原帖中查看解决方案

0 项奖励
回复
5 回复数
2,025 次查看
danielmartynek
NXP TechSupport
NXP TechSupport

Hi @AbhiMR,

I'm not sure I understand the issue here.

You can refer to the S32K1xx RTD drivers.

There is Ftfc_Mem_InFls_Ip_Read() in Ftfc_Mem_InFls_Ip.c

The flash can be read through a pointer, simply like this:

  for(uint32_t i = 0; i < size; i++){
    read_buffer[i] = *((volatile uint8_t *)(address + i));
  }

Check the memory with the debugger after each write.

 

Regards,

Daniel

0 项奖励
回复
2,005 次查看
AbhiMR
Contributor II
extern const flash_user_config_t Flash_InitConfig0;
/* Flash user configuration 0 */
const flash_user_config_t Flash_InitConfig =
{
/*.PFlashBase = 0x0001FBF0U,
.PFlashSize = 0x0001FBF0U,
.DFlashBase = 0x1FFFFC00U,
.EERAMBase = 0x20000000U,
.CallBack = NULL_CALLBACK
*/
.PFlashBase = 0,
.PFlashSize = 0x20000U,
.DFlashBase = 0x0001FFF0U,
.EERAMBase = 0x20000000U,
.CallBack = NULL_CALLBACK
};
How to configure this? I f I change, erase will fail. Can you please provide me an example I can be able to read write above designed layout. Or how i can customise and use in s32k116 please let me know?

Basically i need to do read, write and earse operation on this
m_layout1 (RX) : ORIGIN = 0x0001FBF0, LENGTH = 0x00000400
m_layout2 (RX) : ORIGIN = 0x0001FFF0, LENGTH = 0x00000000
0 项奖励
回复
2,001 次查看
danielmartynek
NXP TechSupport
NXP TechSupport

Hello @AbhiMR,

Where did you get the Flash_InitConfig and the flashdriver.c and .h files? It does not mach the S32K116 memory map (S32K1xx_Memory_Map.xlsx attached to the Reference Manual).

Please use either the S32DS 3.4 IDE with the SDK drivers, or preferably the S32DS3.5 IDE with the  RTD drivers.

There is a GUI that allows you to configure the structures such as Flash_InitConfig.

 

Regards,

Daniel

0 项奖励
回复
1,971 次查看
AbhiMR
Contributor II

/* * Copyright 2020 NXP * All rights reserved. * * NXP Confidential. This software is owned or controlled by NXP and may only be * used strictly in accordance with the applicable license terms. By expressly * accepting such terms or by downloading, installing, activating and/or otherwise * using the software, you are agreeing that you have read, and that you agree to * comply with and are bound by, such license terms. If you do not agree to be * bound by the applicable license terms, then you may not retain, install, * activate or otherwise use the software. The production use license in * Section 2.3 is expressly granted for this software. */ /* ################################################################### ** Filename : main.c ** Project : flash_partitioning_s32k116 ** Processor : s32k116 ** Abstract : ** Main module. ** This module contains user's application code. ** Settings : ** Contents : ** No public methods ** ** ###################################################################*/ /*! ** @file main.c ** @brief ** Main module. ** This module contains user's application code. */ /*! ** @addtogroup main_module main module documentation ** @{ */ /* MODULE main */ /* Including necessary configuration files. */ #include "sdk_project_config.h" #include "interrupt_manager.h" volatile int exit_code = 0; /* User includes */ /* Declare a FLASH config struct which initialized by FlashInit, and will be used by all flash operations */ flash_ssd_config_t flashSSDConfig; /* Data source for program operation */ #define BUFFER_SIZE 0x100u /* Size of data source */ uint8_t sourceBuffer[BUFFER_SIZE]; /* Function declarations */ void CCIF_Handler(void); /* If target is flash, insert this macro to locate callback function into RAM */ START_FUNCTION_DECLARATION_RAMSECTION void CCIF_Callback(void) END_FUNCTION_DECLARATION_RAMSECTION /*! \brief The main function for the project. \details The startup initialization sequence is the following: * - startup asm routine * - main() */ int main(void) { /* Write your local variable definition here */ status_t ret; /* Store the driver APIs return code */ uint32_t address; uint32_t size; uint32_t failAddr; uint32_t i; flash_callback_t pCallBack; #if (FEATURE_FLS_HAS_PROGRAM_PHRASE_CMD == 1u) #ifndef FLASH_TARGET uint8_t unsecure_key[FTFx_PHRASE_SIZE] = {0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFEu, 0xFFu, 0xFFu, 0xFFu}; #endif #else /* FEATURE_FLASH_HAS_PROGRAM_LONGWORD_CMD */ uint8_t unsecure_key[FTFx_LONGWORD_SIZE] = {0xFEu, 0xFFu, 0xFFu, 0xFFu}; #endif /* FEATURE_FLS_HAS_PROGRAM_PHRASE_CMD */ /* Write your code here */ /* Initialize and configure clocks * - see clock manager component for details */ CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT); CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT); /* Init source data */ for (i = 0u; i < BUFFER_SIZE; i++) { sourceBuffer[i] = i; } /* Disable cache to ensure that all flash operations will take effect instantly, * this is device dependent */ #ifndef FLASH_TARGET #ifdef S32K11x_SERIES MSCM->OCMDR[0u] |= MSCM_OCMDR_OCM1(0x3u); MSCM->OCMDR[1u] |= MSCM_OCMDR_OCM1(0x3u); #endif /* S32K11x_SERIES */ #endif /* FLASH_TARGET */ /* Install interrupt for Flash Command Complete event */ INT_SYS_InstallHandler(FTFC_IRQn, CCIF_Handler, (isr_t*) 0); INT_SYS_EnableIRQ(FTFC_IRQn); /* Enable global interrupt */ INT_SYS_EnableIRQGlobal(); /* Always initialize the driver before calling other functions */ ret = FLASH_DRV_Init(&Flash_InitConfig0, &flashSSDConfig); DEV_ASSERT(STATUS_SUCCESS == ret); /* Erase a sector in DFlash */ address = flashSSDConfig.DFlashBase; size = FEATURE_FLS_DF_BLOCK_SECTOR_SIZE; ret = FLASH_DRV_EraseSector(&flashSSDConfig, address, size); DEV_ASSERT(STATUS_SUCCESS == ret); /* Verify the erase operation at margin level value of 1, user read */ ret = FLASH_DRV_VerifySection(&flashSSDConfig, address, size / FTFx_PHRASE_SIZE, 1u); DEV_ASSERT(STATUS_SUCCESS == ret); /* Write some data to the erased DFlash sector */ address = flashSSDConfig.DFlashBase; size = BUFFER_SIZE; ret = FLASH_DRV_Program(&flashSSDConfig, address, size, sourceBuffer); DEV_ASSERT(STATUS_SUCCESS == ret); /* Verify the program operation at margin level value of 1, user margin */ ret = FLASH_DRV_ProgramCheck(&flashSSDConfig, address, size, sourceBuffer, &failAddr, 1u); DEV_ASSERT(STATUS_SUCCESS == ret); /* Remove warning for unused variable */ (void)ret; for(;;) { if(exit_code != 0) { break; } } return exit_code; }

 

 

Its hitting Device assert. 

In this I want to explore how to use dflash 

0 项奖励
回复
1,924 次查看
danielmartynek
NXP TechSupport
NXP TechSupport

Hello @AbhiMR,

If you generated the SDK code in S32DS 3.4 with SDK 4.0.3 installed, you would get this structure

/* Flash user configuration 0 */
const flash_user_config_t Flash_InitConfig0 =
{
.PFlashBase = 0x0U,
.PFlashSize = 0x20000U,
.DFlashBase = 0x10000000U,
.EERAMBase = 0x14000000U,
.CallBack = NULL_CALLBACK
};

in .../board/peripherals_flash_FTFC.c

Not this:

const flash_user_config_t Flash_InitConfig =
{
/*.PFlashBase = 0x0001FBF0U,
.PFlashSize = 0x0001FBF0U,
.DFlashBase = 0x1FFFFC00U,
.EERAMBase = 0x20000000U,
.CallBack = NULL_CALLBACK
*/
.PFlashBase = 0,
.PFlashSize = 0x20000U,
.DFlashBase = 0x0001FFF0U,
.EERAMBase = 0x20000000U,
.CallBack = NULL_CALLBACK
};

 

You need to:

  1. Install S32DS 3.4
  2. Install SDK 4.0.3
  3. Create flash_partitioning_s32k116 from example
  4. Generate the SDK configuration:

     

danielmartynek_1-1734953451248.png

 

Regards,

Daniel

 

 

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2014928%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3Es32k116%E7%9A%84Flash%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2014928%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%20NXP%20%2C%3C%2FP%3E%3CP%3E%E5%9C%A8%20ld%20%E6%96%87%E4%BB%B6%E4%B8%AD%E6%88%91%E9%9C%80%E8%A6%81%E5%AE%9A%E4%B9%89%E5%A6%82%E4%B8%8B%E9%83%A8%E5%88%86%EF%BC%8C%3C%2FP%3E%3CP%3E%E8%AE%B0%E5%BF%86%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%20%2F*%20%E9%97%AA%E5%85%89%20*%2F%3CBR%20%2F%3E%20m_interrupts%20(RX)%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x00000000%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x000000C0%3CBR%20%2F%3E%20m_flash_config%EF%BC%88RX%EF%BC%89%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x00000400%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x00000010%3CBR%20%2F%3E%20m_text%EF%BC%88RX%EF%BC%89%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x00000410%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x0001F7E0%3CBR%20%2F%3E%20m_layout1%20(RX)%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x0001FBF0%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x00000400%3CBR%20%2F%3E%20m_layout2%20(RX)%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x0001FFF0%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x00000000%3C%2FP%3E%3CP%3E%7D%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E4%B9%8B%E5%90%8E%E6%88%91%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8%20flashdriver.c%E5%92%8C.h%E6%96%87%E4%BB%B6%20%E3%80%82%3C%2FP%3E%3CP%3EFLASH_DRV_%E5%88%9D%E5%A7%8B%E5%8C%96()%3C%2FP%3E%3CP%3E%2F*%20%E7%94%A8%E4%BA%8E%E6%93%A6%E9%99%A4%20*%2F%3C%2FP%3E%3CP%3Eret%20%3D%20FLASH_DRV_EraseSector%EF%BC%88%26amp%3BflashSSDConfig%EF%BC%8Cu32%E5%9C%B0%E5%9D%80%EF%BC%8CBLOCK_SIZE%EF%BC%89%EF%BC%9B%3CBR%20%2F%3E%20DEV_ASSERT%EF%BC%88%E7%8A%B6%E6%80%81%E6%88%90%E5%8A%9F%3D%3Dret%EF%BC%89%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F*%20%E5%86%99%E5%85%A5%E8%87%B3%E5%B0%91%204%20%E4%B8%AA%E5%AD%97%E8%8A%82%E7%9A%84%E6%95%B0%E6%8D%AE%20*%2F%3CBR%20%2F%3E%20ret%20%3D%20FLASH_DRV_Program%EF%BC%88%EF%BC%86flashSSDConfig%EF%BC%8Cu32Address%EF%BC%8CMAL_MEM_FLASH_SECTOR_SIZE%EF%BC%8Cu16Data%EF%BC%89%EF%BC%9B%3CBR%20%2F%3E%20DEV_ASSERT%EF%BC%88%E7%8A%B6%E6%80%81%E6%88%90%E5%8A%9F%3D%3Dret%EF%BC%89%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20%E8%AF%BB%20*%2F%3C%2FP%3E%3CP%3Ememcpy(%E5%AD%98%E5%82%A8%EF%BC%8C%E9%93%BE%E6%8E%A5%E6%95%B0%E7%BB%84%EF%BC%8C%E5%A4%A7%E5%B0%8F)%EF%BC%9B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E5%9C%A8%E6%88%91%E7%9A%84%E4%BB%A3%E7%A0%81%E4%B8%AD%E5%AE%83%E5%8F%AA%E8%83%BD%E5%B7%A5%E4%BD%9C%E5%87%A0%E6%AC%A1%E5%B9%B6%E4%B8%94%E4%B8%8E%20memcpy%20%E4%B8%8D%E4%B8%80%E8%87%B4%E3%80%82%3C%2FP%3E%3CP%3E%E6%AD%A3%E7%A1%AE%E7%9A%84%E4%B9%A6%E5%86%99%E6%96%B9%E5%BC%8F%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%8C%E6%88%91%E4%BB%AC%E6%9C%80%E5%88%9D%E9%9C%80%E8%A6%81%E5%81%9A%E4%BB%80%E4%B9%88%E9%85%8D%E7%BD%AE%EF%BC%9F%3C%2FP%3E%3CP%3E%E9%99%A4%E4%BA%86%20memcpy%20%E4%B9%8B%E5%A4%96%EF%BC%8C%E6%88%91%E4%BB%AC%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E8%AF%BB%E5%8F%96%E5%87%BD%E6%95%B0%E5%90%97%EF%BC%9F%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E6%82%A8%E8%83%BD%E5%90%A6%E5%B8%AE%E5%8A%A9%E6%8F%90%E4%BE%9B%E6%AD%A4%E7%94%A8%E6%B3%95%E7%9A%84%E6%9B%B4%E5%A5%BD%E7%9A%84%E7%A4%BA%E4%BE%8B%EF%BC%9F%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2018575%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9As32k116%E7%9A%84Flash%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2018575%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F242862%22%20target%3D%22_blank%22%3E%40AbhiMR%3C%2FA%3E%20%EF%BC%8C%3C%2FP%3E%0A%3CP%3E%E5%A6%82%E6%9E%9C%E6%82%A8%E4%BD%BF%E7%94%A8%20SDK%204.0.3%20%E5%9C%A8%20S32DS%203.4%20%E4%B8%AD%E7%94%9F%E6%88%90%20SDK%20%E4%BB%A3%E7%A0%81%E5%AE%89%E8%A3%85%E5%90%8E%EF%BC%8C%E6%82%A8%E5%B0%86%E8%8E%B7%E5%BE%97%E6%AD%A4%E7%BB%93%E6%9E%84%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3E%2F*%20Flash%20user%20configuration%200%20*%2F%0Aconst%20flash_user_config_t%20Flash_InitConfig0%20%3D%0A%7B%0A.PFlashBase%20%3D%200x0U%2C%0A.PFlashSize%20%3D%200x20000U%2C%0A.DFlashBase%20%3D%200x10000000U%2C%0A.EERAMBase%20%3D%200x14000000U%2C%0A.CallBack%20%3D%20NULL_CALLBACK%0A%7D%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%E5%9C%A8...%2Fboard%2Fperipherals_flash_FTFC.c%E4%B8%AD%3C%2FP%3E%0A%3CP%3E%E4%B8%8D%E6%98%AF%E8%BF%99%E4%B8%AA%EF%BC%9A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3Econst%20flash_user_config_t%20Flash_InitConfig%20%3D%0A%7B%0A%2F*.PFlashBase%20%3D%200x0001FBF0U%2C%0A.PFlashSize%20%3D%200x0001FBF0U%2C%0A.DFlashBase%20%3D%200x1FFFFC00U%2C%0A.EERAMBase%20%3D%200x20000000U%2C%0A.CallBack%20%3D%20NULL_CALLBACK%0A*%2F%0A.PFlashBase%20%3D%200%2C%0A.PFlashSize%20%3D%200x20000U%2C%0A.DFlashBase%20%3D%200x0001FFF0U%2C%0A.EERAMBase%20%3D%200x20000000U%2C%0A.CallBack%20%3D%20NULL_CALLBACK%0A%7D%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E6%82%A8%E9%9C%80%E8%A6%81%EF%BC%9A%3C%2FP%3E%0A%3COL%3E%0A%3CLI%3EInstall%20S32DS%203.4%3C%2FLI%3E%0A%3CLI%3E%E5%AE%89%E8%A3%85%20SDK%204.0.3%3C%2FLI%3E%0A%3CLI%3E%E4%BB%8E%E7%A4%BA%E4%BE%8B%E5%88%9B%E5%BB%BA%20flash_partitioning_s32k116%3C%2FLI%3E%0A%3CLI%3E%E7%94%9F%E6%88%90SDK%E9%85%8D%E7%BD%AE%EF%BC%9A%3CBR%20%2F%3E%0A%20%3CBR%20%2F%3E%0A%3C%2FLI%3E%0A%3C%2FOL%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22danielmartynek_1-1734953451248.png%22%20style%3D%22width%3A%20566px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22danielmartynek_1-1734953451248.png%22%20style%3D%22width%3A%20566px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F317071i33790B800D73E016%2Fimage-dimensions%2F566x281%3Fv%3Dv2%22%20width%3D%22566%22%20height%3D%22281%22%20role%3D%22button%22%20title%3D%22danielmartynek_1-1734953451248.png%22%20alt%3D%22danielmartynek_1-1734953451248.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3C%2FP%3E%0A%3CP%3EDaniel%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2017336%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9As32k116%E7%9A%84Flash%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2017336%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%2F*%20*%20%E7%89%88%E6%9D%83%E6%89%80%E6%9C%89%202020%20NXP%20*%20%E4%BF%9D%E7%95%99%E6%89%80%E6%9C%89%E6%9D%83%E5%88%A9%E3%80%82*%20*%20NXP%20%E6%9C%BA%E5%AF%86%E3%80%82%E8%AF%A5%E8%BD%AF%E4%BB%B6%E7%94%B1%20NXP%20%E6%8B%A5%E6%9C%89%E6%88%96%E6%8E%A7%E5%88%B6%EF%BC%8C%E5%B9%B6%E4%B8%94%E5%8F%AA%E8%83%BD%E4%B8%A5%E6%A0%BC%E6%8C%89%E7%85%A7%E9%80%82%E7%94%A8%E7%9A%84%E8%AE%B8%E5%8F%AF%E6%9D%A1%E6%AC%BE%E4%BD%BF%E7%94%A8%E3%80%82%E9%80%9A%E8%BF%87%E6%98%8E%E7%A1%AE*%E6%8E%A5%E5%8F%97%E6%AD%A4%E7%B1%BB%E6%9D%A1%E6%AC%BE%E6%88%96%E9%80%9A%E8%BF%87%E4%B8%8B%E8%BD%BD%E3%80%81%E5%AE%89%E8%A3%85%E3%80%81%E6%BF%80%E6%B4%BB%E5%92%8C%2F%E6%88%96%E4%BB%A5%E5%85%B6%E4%BB%96%E6%96%B9%E5%BC%8F*%E4%BD%BF%E7%94%A8%E8%AF%A5%E8%BD%AF%E4%BB%B6%EF%BC%8C%E6%82%A8%E5%90%8C%E6%84%8F%E6%82%A8%E5%B7%B2%E9%98%85%E8%AF%BB%E5%B9%B6%E5%90%8C%E6%84%8F*%E9%81%B5%E5%AE%88%E5%B9%B6%E5%8F%97%E6%AD%A4%E7%B1%BB%E8%AE%B8%E5%8F%AF%E6%9D%A1%E6%AC%BE%E7%9A%84%E7%BA%A6%E6%9D%9F%E3%80%82%E5%A6%82%E6%9E%9C%E6%82%A8%E4%B8%8D%E5%90%8C%E6%84%8F%E5%8F%97%E9%80%82%E7%94%A8%E8%AE%B8%E5%8F%AF%E6%9D%A1%E6%AC%BE%E7%9A%84%E7%BA%A6%E6%9D%9F%EF%BC%8C%E5%88%99%E6%82%A8%E5%8F%AF%E8%83%BD%E6%97%A0%E6%B3%95%E4%BF%9D%E7%95%99%E3%80%81%E5%AE%89%E8%A3%85%E3%80%81%E6%BF%80%E6%B4%BB%E6%88%96%E4%BB%A5%E5%85%B6%E4%BB%96%E6%96%B9%E5%BC%8F%E4%BD%BF%E7%94%A8%E8%AF%A5%E8%BD%AF%E4%BB%B6%E3%80%82*%20%E7%AC%AC%202.3%20%E8%8A%82%E4%B8%AD%E7%9A%84%E7%94%9F%E4%BA%A7%E4%BD%BF%E7%94%A8%E8%AE%B8%E5%8F%AF%E6%98%8E%E7%A1%AE%E6%8E%88%E4%BA%88%E6%AD%A4%E8%BD%AF%E4%BB%B6%E3%80%82*%2F%20%2F*%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%20%23%23%20**%20Filename%20%3A%20main.c%20**%20Project%20%3A%20flash_partitioning_s32k116%20**%20Processor%20%3A%20s32k116%20**%20Abstract%20%3A%20**%20Main%20module.%20**%20This%20module%20contains%20user's%20application%20code.%20**%20Settings%20%3A%20**%20Contents%20%3A%20**%20No%20public%20methods%20**%20**%20%23%23%20%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23%23*%2F%20%2F*!%20**%20%40file%20main.c**%20%40brief%20**%20%E4%B8%BB%E6%A8%A1%E5%9D%97%E3%80%82**%20%E8%AF%A5%E6%A8%A1%E5%9D%97%E5%8C%85%E5%90%AB%E7%94%A8%E6%88%B7%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%BB%A3%E7%A0%81%E3%80%82*%2F%20%2F*%EF%BC%81**%20%40addtogroup%20main_module%20%E4%B8%BB%E6%A8%A1%E5%9D%97%E6%96%87%E6%A1%A3**%20%40%7B%20*%2F%20%2F*%20MODULE%20main%20*%2F%20%2F*%20%E5%8C%85%E6%8B%AC%E5%BF%85%E8%A6%81%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E3%80%82*%2F%20%23include%20%22sdk_project_config.h%22%20%23include%20%22interrupt_manager.h%22%20volatile%20int%20exit_code%20%3D%200%3B%20%2F*%20%E7%94%A8%E6%88%B7%E5%8C%85%E5%90%AB%20*%2F%20%2F*%20%E5%A3%B0%E6%98%8E%E7%94%B1%20FlashInit%20%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84%20FLASH%20%E9%85%8D%E7%BD%AE%E7%BB%93%E6%9E%84%EF%BC%8C%E5%B9%B6%E5%B0%86%E7%94%B1%E6%89%80%E6%9C%89%20flash%20%E6%93%8D%E4%BD%9C%E4%BD%BF%E7%94%A8%20*%2F%20flash_ssd_config_t%20flashSSDConfig%3B%20%2F*%20%E7%A8%8B%E5%BA%8F%E6%93%8D%E4%BD%9C%E7%9A%84%E6%95%B0%E6%8D%AE%E6%BA%90%20*%2F%20%23define%20BUFFER_SIZE%200x100u%20%2F*%20%E6%95%B0%E6%8D%AE%E6%BA%90%E7%9A%84%E5%A4%A7%E5%B0%8F%20*%2F%20uint8_t%20sourceBuffer%5BBUFFER_SIZE%5D%3B%20%2F*%20%E5%87%BD%E6%95%B0%E5%A3%B0%E6%98%8E%20*%2F%20void%20CCIF_Handler(void)%3B%20%2F*%20%E5%A6%82%E6%9E%9C%E7%9B%AE%E6%A0%87%E6%98%AF%20flash%EF%BC%8C%E5%88%99%E6%8F%92%E5%85%A5%E6%AD%A4%E5%AE%8F%E4%BB%A5%E5%B0%86%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E5%AE%9A%E4%BD%8D%E5%88%B0%20RAM%20%E4%B8%AD%20*%2F%20START_FUNCTION_DECLARATION_RAMSECTION%20void%20CCIF_Callback(void)%20END_FUNCTION_DECLARATION_RAMSECTION%20%2F*%EF%BC%81%5Cbrief%20%E9%A1%B9%E7%9B%AE%E7%9A%84%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD%E3%80%82%5Cdetails%20%E5%90%AF%E5%8A%A8%E5%88%9D%E5%A7%8B%E5%8C%96%E5%BA%8F%E5%88%97%E5%A6%82%E4%B8%8B%EF%BC%9A%20*%20-%20%E5%90%AF%E5%8A%A8%20asm%20%E4%BE%8B%E7%A8%8B%20*%20-%20main()%20*%2F%20int%20main(void)%20%7B%20%2F*%20%E5%9C%A8%E6%AD%A4%E5%A4%84%E5%86%99%E5%85%A5%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E5%AE%9A%E4%B9%89%20*%2F%20status_t%20ret%3B%20%2F*%20%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%20API%20%E8%BF%94%E5%9B%9E%E4%BB%A3%E7%A0%81%20*%2F%20uint32_t%20address%3B%20uint32_t%20size%3B%20uint32_t%20failAddr%3B%20uint32_t%20i%3B%20flash_callback_t%20pCallBack%3B%20%23if%20(FEATURE_FLS_HAS_PROGRAM_PHRASE_CMD%20%3D%3D%201u)%20%23ifndef%20FLASH_TARGET%20uint8_t%20unsecure_key%5BFTFx_PHRASE_SIZE%5D%20%3D%20%7B0xFFu%2C%200xFFu%2C%200xFFu%2C%200xFFu%2C%200xFEu%2C%200xFFu%2C%200xFFu%7D%3B%20%23endif%20%23else%20%2F*%20FEATURE_FLASH_HAS_PROGRAM_LONGWORD_CMD%20*%2F%20uint8_t%20unsecure_key%5BFTFx_LONGWORD_SIZE%5D%20%3D%20%7B0xFEu%2C%200xFFu%2C%200xFFu%2C%200xFFu%7D%3B%20%23endif%20%2F*%20FEATURE_FLS_HAS_PROGRAM_PHRASE_CMD%20*%2F%20%2F*%20%E5%9C%A8%E6%AD%A4%E5%A4%84%E5%86%99%E5%85%A5%E6%82%A8%E7%9A%84%E4%BB%A3%E7%A0%81%20*%2F%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%E5%B9%B6%E9%85%8D%E7%BD%AE%E6%97%B6%E9%92%9F%20*%20-%20%E6%9C%89%E5%85%B3%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF%EF%BC%8C%E8%AF%B7%E5%8F%82%E9%98%85%E6%97%B6%E9%92%9F%E7%AE%A1%E7%90%86%E5%99%A8%E7%BB%84%E4%BB%B6%20*%2F%20CLOCK_SYS_Init(g_clockManConfigsArr%2C%20CLOCK_MANAGER_CONFIG_CNT%2C%20g_clockManCallbacksArr%2C%20CLOCK_MANAGER_CALLBACK_CNT)%3B%20CLOCK_SYS_UpdateConfiguration(0U%2C%20CLOCK_MANAGER_POLICY_AGREEMENT)%3B%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%E6%BA%90%E6%95%B0%E6%8D%AE%20*%2F%20for%20(i%20%3D%200u%3B%20i%20%26lt%3B%20BUFFER_SIZE%3B%20i%2B%2B)%20%7B%20sourceBuffer%5Bi%5D%20%3D%20i%3B%20%7D%20%2F*%20%E7%A6%81%E7%94%A8%E7%BC%93%E5%AD%98%E4%BB%A5%E7%A1%AE%E4%BF%9D%E6%89%80%E6%9C%89%E9%97%AA%E5%AD%98%E6%93%8D%E4%BD%9C%E7%AB%8B%E5%8D%B3%E7%94%9F%E6%95%88%EF%BC%8C*%20%E8%BF%99%E5%8F%96%E5%86%B3%E4%BA%8E%E8%AE%BE%E5%A4%87%20*%2F%20%23ifndef%20FLASH_TARGET%20%23ifdef%20S32K11x_SERIES%20MSCM-%26gt%3BOCMDR%5B0u%5D%20%7C%3D%20MSCM_OCMDR_OCM1(0x3u)%3B%20MSCM-%26gt%3BOCMDR%5B1u%5D%20%7C%3D%20MSCM_OCMDR_OCM1(0x3u)%3B%20%23endif%20%2F*%20S32K11x_SERIES%20*%2F%20%23endif%20%2F*%20FLASH_TARGET%20*%2F%20%2F*%20%E4%B8%BA%20Flash%20%E5%91%BD%E4%BB%A4%E5%AE%8C%E6%88%90%E4%BA%8B%E4%BB%B6%E5%AE%89%E8%A3%85%E4%B8%AD%E6%96%AD%20*%2F%20INT_SYS_InstallHandler(FTFC_IRQn%2C%20CCIF_Handler%2C%20(isr_t*)%200)%3B%20INT_SYS_EnableIRQ(FTFC_IRQn)%3B%20%2F*%20%E5%90%AF%E7%94%A8%E5%85%A8%E5%B1%80%E4%B8%AD%E6%96%AD%20*%2F%20INT_SYS_EnableIRQGlobal()%3B%20%2F*%20%E5%9C%A8%E8%B0%83%E7%94%A8%E5%85%B6%E4%BB%96%E5%87%BD%E6%95%B0%E4%B9%8B%E5%89%8D%E5%A7%8B%E7%BB%88%E5%88%9D%E5%A7%8B%E5%8C%96%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%20*%2F%20ret%20%3D%20FLASH_DRV_Init(%26amp%3BFlash_InitConfig0%2C%20%26amp%3BflashSSDConfig)%3B%20DEV_ASSERT(STATUS_SUCCESS%20%3D%3D%20ret)%3B%20%2F*%20%E6%93%A6%E9%99%A4%20DFlash%20%E4%B8%AD%E7%9A%84%E6%89%87%E5%8C%BA%20*%2F%20address%20%3D%20flashSSDConfig.DFlashBase%3B%20size%20%3D%20FEATURE_FLS_DF_BLOCK_SECTOR_SIZE%3B%20ret%20%3D%20FLASH_DRV_EraseSector(%26amp%3BflashSSDConfig%2C%20address%2C%20size)%3B%20DEV_ASSERT(STATUS_SUCCESS%20%3D%3D%20ret)%3B%20%2F*%20%E5%9C%A8%E8%A3%95%E5%BA%A6%E7%BA%A7%E5%88%AB%E5%80%BC%E4%B8%BA%201%20%E6%97%B6%E9%AA%8C%E8%AF%81%E6%93%A6%E9%99%A4%E6%93%8D%E4%BD%9C%EF%BC%8C%E7%94%A8%E6%88%B7%E8%AF%BB%E5%8F%96%20*%2F%20ret%20%3D%20FLASH_DRV_VerifySection(%26amp%3BflashSSDConfig%2C%20address%2C%20size%20%2F%20FTFx_PHRASE_SIZE%2C%201u)%3B%20DEV_ASSERT(STATUS_SUCCESS%20%3D%3D%20ret)%3B%20%2F*%20%E5%B0%86%E4%B8%80%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%86%99%E5%85%A5%E5%B7%B2%E6%93%A6%E9%99%A4%E7%9A%84%20DFlash%20%E6%89%87%E5%8C%BA%20*%2F%20address%20%3D%20flashSSDConfig.DFlashBase%3B%20size%20%3D%20BUFFER_SIZE%3B%20ret%20%3D%20FLASH_DRV_Program(%26amp%3BflashSSDConfig%2C%20address%2C%20size%2C%20sourceBuffer)%3B%20DEV_ASSERT(STATUS_SUCCESS%20%3D%3D%20ret)%3B%20%2F*%20%E5%9C%A8%E8%A3%95%E5%BA%A6%E7%BA%A7%E5%88%AB%E5%80%BC%201%EF%BC%88%E7%94%A8%E6%88%B7%E8%A3%95%E5%BA%A6%EF%BC%89%E4%B8%8B%E9%AA%8C%E8%AF%81%E7%A8%8B%E5%BA%8F%E6%93%8D%E4%BD%9C%20*%2F%20ret%20%3D%20FLASH_DRV_ProgramCheck(%26amp%3BflashSSDConfig%2C%20address%2C%20size%2C%20sourceBuffer%2C%20%26amp%3BfailAddr%2C%201u)%3B%20DEV_ASSERT(STATUS_SUCCESS%20%3D%3D%20ret)%3B%20%2F*%20%E5%88%A0%E9%99%A4%E6%9C%AA%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F%E7%9A%84%E8%AD%A6%E5%91%8A%20*%2F%20(void)ret%3B%20for(%3B%3B)%20%7B%20if(exit_code%20!%3D%200)%20%7B%20break%3B%20%7D%20%7D%20return%20exit_code%3B%20%7D%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CP%3E%E5%85%B6%E5%91%BD%E4%B8%AD%E8%AE%BE%E5%A4%87%E6%96%AD%E8%A8%80%E3%80%82%3C%2FP%3E%3CP%3E%E5%9C%A8%E6%AD%A4%E6%88%91%E6%83%B3%E6%8E%A2%E7%B4%A2%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20dflash%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2017240%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9As32k116%E7%9A%84Flash%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2017240%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F242862%22%20target%3D%22_blank%22%3E%40AbhiMR%3C%2FA%3E%20%EF%BC%8C%3C%2FP%3E%0A%3CP%3E%E4%BD%A0%E4%BB%8E%E5%93%AA%E9%87%8C%E5%BE%97%E5%88%B0%20Flash_InitConfig%20%E5%92%8C%20flashdriver.c%E5%92%8C.h%E6%96%87%E4%BB%B6%EF%BC%9F%E5%AE%83%E4%B8%8E%20S32K116%20%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%EF%BC%88%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%E4%B8%AD%E9%99%84%E5%B8%A6%E7%9A%84%20S32K1xx_Memory_Map.xlsx%EF%BC%89%E4%B8%8D%E5%8C%B9%E9%85%8D%E3%80%82%3C%2FP%3E%0A%3CP%3E%E8%AF%B7%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20SDK%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%20S32DS%203.4%20IDE%EF%BC%8C%E6%88%96%E8%80%85%E6%9C%80%E5%A5%BD%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20RTD%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%20S32DS3.5%20IDE%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%9C%89%E4%B8%80%E4%B8%AA%20GUI%20%E5%85%81%E8%AE%B8%E6%82%A8%E9%85%8D%E7%BD%AE%E7%BB%93%E6%9E%84%EF%BC%8C%E4%BE%8B%E5%A6%82%20Flash_InitConfig%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3C%2FP%3E%0A%3CP%3EDaniel%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2017228%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9As32k116%E7%9A%84Flash%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2017228%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%A4%96%E9%83%A8%20const%20flash_user_config_t%20Flash_InitConfig0%3B%3CBR%20%2F%3E%20%2F*%20Flash%20%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%200%20*%2F%3CBR%20%2F%3E%20const%20flash_user_config_t%20Flash_InitConfig%20%3D%3CBR%20%2F%3E%20%7B%3CBR%20%2F%3E%20%2F*.PFlashBase%20%3D%200x0001FBF0U%EF%BC%8C%3CBR%20%2F%3E%20.PFlash%E5%A4%A7%E5%B0%8F%20%3D%200x0001FBF0U%EF%BC%8C%3CBR%20%2F%3E%20.DFlashBase%20%3D%200x1FFFFC00U%EF%BC%8C%3CBR%20%2F%3E%20.EERAMBase%20%3D%200x20000000U%EF%BC%8C%3CBR%20%2F%3E%20.%E5%9B%9E%E8%B0%83%20%3D%20NULL_CALLBACK%3CBR%20%2F%3E%20*%2F%3CBR%20%2F%3E%20.PFlashBase%20%3D%200%EF%BC%8C%3CBR%20%2F%3E%20.PFlash%E5%A4%A7%E5%B0%8F%20%3D%200x20000U%EF%BC%8C%3CBR%20%2F%3E%20.DFlashBase%20%3D%200x0001FFF0U%EF%BC%8C%3CBR%20%2F%3E%20.EERAMBase%20%3D%200x20000000U%EF%BC%8C%3CBR%20%2F%3E%20.%E5%9B%9E%E8%B0%83%20%3D%20NULL_CALLBACK%3CBR%20%2F%3E%20%7D%3B%3CBR%20%2F%3E%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%EF%BC%9F%E5%A6%82%E6%9E%9C%E6%88%91%E6%94%B9%E5%8F%98%EF%BC%8C%E6%93%A6%E9%99%A4%E5%B0%B1%E4%BC%9A%E5%A4%B1%E8%B4%A5%E3%80%82%E6%82%A8%E8%83%BD%E5%90%A6%E4%B8%BA%E6%88%91%E6%8F%90%E4%BE%9B%E4%B8%80%E4%B8%AA%E6%88%91%E5%8F%AF%E4%BB%A5%E8%AF%BB%E5%86%99%E4%B8%8A%E8%BF%B0%E8%AE%BE%E8%AE%A1%E5%B8%83%E5%B1%80%E7%9A%84%E7%A4%BA%E4%BE%8B%E3%80%82%E6%88%96%E8%80%85%E6%88%91%E5%A6%82%E4%BD%95%E5%9C%A8%20s32k116%20%E4%B8%AD%E5%AE%9A%E5%88%B6%E5%92%8C%E4%BD%BF%E7%94%A8%EF%BC%8C%E8%AF%B7%E5%91%8A%E8%AF%89%E6%88%91%EF%BC%9F%3CBR%20%2F%3E%3CBR%20%2F%3E%E5%9F%BA%E6%9C%AC%E4%B8%8A%E6%88%91%E9%9C%80%E8%A6%81%E5%AF%B9%E6%AD%A4%E8%BF%9B%E8%A1%8C%E8%AF%BB%E3%80%81%E5%86%99%E5%92%8C%E5%90%AC%E6%93%8D%E4%BD%9C%3CBR%20%2F%3Em_layout1%20(RX)%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x0001FBF0%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x00000400%3CBR%20%2F%3E%20m_layout2%20(RX)%EF%BC%9A%E8%B5%B7%E6%BA%90%20%3D%200x0001FFF0%EF%BC%8C%E9%95%BF%E5%BA%A6%20%3D%200x00000000%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2015388%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9As32k116%E7%9A%84Flash%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2015388%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F242862%22%20target%3D%22_blank%22%3E%40AbhiMR%3C%2FA%3E%20%EF%BC%8C%3C%2FP%3E%0A%3CP%3E%E6%88%91%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%88%91%E6%98%AF%E5%90%A6%E7%90%86%E8%A7%A3%E4%BA%86%E8%BF%99%E9%87%8C%E7%9A%84%E9%97%AE%E9%A2%98%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%8F%82%E8%80%83S32K1xx%20RTD%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E3%80%82%3C%2FP%3E%0A%3CP%3EFtfc_Mem_InFls_Ip.c%20%E4%B8%AD%E6%9C%89%3CSTRONG%3EFtfc_Mem_InFls_Ip_Read%3C%2FSTRONG%3E%20%3CSTRONG%3E()%3C%2FSTRONG%3E%3C%2FP%3E%0A%3CP%3E%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%8C%87%E9%92%88%E8%AF%BB%E5%8F%96%E9%97%AA%E5%AD%98%EF%BC%8C%E7%AE%80%E5%8D%95%E5%A6%82%E4%B8%8B%EF%BC%9A%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3E%20%20for(uint32_t%20i%20%3D%200%3B%20i%20%26lt%3B%20size%3B%20i%2B%2B)%7B%0A%20%20%20%20read_buffer%5Bi%5D%20%3D%20*((volatile%20uint8_t%20*)(address%20%2B%20i))%3B%0A%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%E6%AF%8F%E6%AC%A1%E5%86%99%E5%85%A5%E5%90%8E%E4%BD%BF%E7%94%A8%E8%B0%83%E8%AF%95%E5%99%A8%E6%A3%80%E6%9F%A5%E5%86%85%E5%AD%98%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3C%2FP%3E%0A%3CP%3EDaniel%3C%2FP%3E%3C%2FLINGO-BODY%3E