<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic How to R/W internal flash of K66FN2M0VLQ18 when using FreeRTOS and DRam in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-R-W-internal-flash-of-K66FN2M0VLQ18-when-using-FreeRTOS/m-p/1815166#M66095</link>
    <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;My board using MCU K66FN2M0VLQ18&lt;SPAN&gt;, DRam&amp;nbsp;&lt;SPAN class=""&gt;IS42S16400J-7TL&lt;/SPAN&gt;I, IDE IAR Embedded Workbench.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I have init DRam in&amp;nbsp;SystemInit(void):&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thanhnambka_0-1708920390022.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/264922iBB65F7021301D67B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="thanhnambka_0-1708920390022.png" alt="thanhnambka_0-1708920390022.png" /&gt;&lt;/span&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How to erase internal flash if i using FreeRTOS and Dram?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Mon, 26 Feb 2024 04:09:35 GMT</pubDate>
    <dc:creator>namht</dc:creator>
    <dc:date>2024-02-26T04:09:35Z</dc:date>
    <item>
      <title>How to R/W internal flash of K66FN2M0VLQ18 when using FreeRTOS and DRam</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-R-W-internal-flash-of-K66FN2M0VLQ18-when-using-FreeRTOS/m-p/1815166#M66095</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;My board using MCU K66FN2M0VLQ18&lt;SPAN&gt;, DRam&amp;nbsp;&lt;SPAN class=""&gt;IS42S16400J-7TL&lt;/SPAN&gt;I, IDE IAR Embedded Workbench.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I have init DRam in&amp;nbsp;SystemInit(void):&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="thanhnambka_0-1708920390022.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/264922iBB65F7021301D67B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="thanhnambka_0-1708920390022.png" alt="thanhnambka_0-1708920390022.png" /&gt;&lt;/span&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How to erase internal flash if i using FreeRTOS and Dram?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Mon, 26 Feb 2024 04:09:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-R-W-internal-flash-of-K66FN2M0VLQ18-when-using-FreeRTOS/m-p/1815166#M66095</guid>
      <dc:creator>namht</dc:creator>
      <dc:date>2024-02-26T04:09:35Z</dc:date>
    </item>
    <item>
      <title>Re: How to R/W internal flash of K66FN2M0VLQ18 when using FreeRTOS and DRam</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-R-W-internal-flash-of-K66FN2M0VLQ18-when-using-FreeRTOS/m-p/1816131#M66098</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I suppose that you can download SDK package, in the package, there is flash example.&lt;/P&gt;
&lt;P&gt;If you want to erase/program flash in FreeRtos environment, you have to do the following:&lt;/P&gt;
&lt;P&gt;1)stop the FreeRtos scheduling with&lt;/P&gt;
&lt;DIV style="background-color: #ffffff; padding: 0px 0px 0px 2px;"&gt;
&lt;DIV style="color: #000000; background-color: #ffffff; font-family: 'Consolas'; font-size: 10pt; white-space: pre;"&gt;
&lt;P style="background-color: #e8f2fe; margin: 0;"&gt;&lt;SPAN&gt;void&lt;/SPAN&gt; &lt;SPAN&gt;vTaskEndScheduler&lt;/SPAN&gt;&lt;SPAN&gt;( &lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; )&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e8f2fe; margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="background-color: #e8f2fe; margin: 0;"&gt;&lt;SPAN&gt;2)disable all interrupt with code:&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV style="background-color: #ffffff; padding: 0px 0px 0px 2px;"&gt;
&lt;DIV style="color: #000000; background-color: #ffffff; font-family: 'Consolas'; font-size: 10pt; white-space: pre;"&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;__STATIC_FORCEINLINE &lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt; &lt;SPAN&gt;__disable_irq&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; __ASM &lt;/SPAN&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;SPAN&gt;cpsid&lt;/SPAN&gt;&lt;SPAN&gt; i&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;SPAN&gt; : : : &lt;/SPAN&gt;&lt;SPAN&gt;"memory"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;3)erase/program flash with SDK example&lt;/P&gt;
&lt;P style="margin: 0;"&gt;4)recover the interrupt and FreeRtos scheduling.&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;Hope it can help you&lt;/P&gt;
&lt;P style="margin: 0;"&gt;BR&lt;/P&gt;
&lt;P style="margin: 0;"&gt;XiangJun Rong&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;This is the flash operation example in SDK:&lt;/P&gt;
&lt;DIV style="background-color: #ffffff; padding: 0px 0px 0px 2px;"&gt;
&lt;DIV style="color: #000000; background-color: #ffffff; font-family: 'Consolas'; font-size: 10pt; white-space: pre;"&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;int&lt;/SPAN&gt; &lt;SPAN&gt;main&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;void&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;flash_security_state_t&lt;/SPAN&gt;&lt;SPAN&gt; securityStatus = &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_SecurityStateNotSecure&lt;/SPAN&gt;&lt;SPAN&gt;; &lt;/SPAN&gt;&lt;SPAN&gt;/* Return protection status */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;status_t&lt;/SPAN&gt;&lt;SPAN&gt; result; &lt;/SPAN&gt;&lt;SPAN&gt;/* Return code from each flash driver function */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; destAdrss; &lt;/SPAN&gt;&lt;SPAN&gt;/* Address of the target location */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; i, failAddr, failDat;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; pflashBlockBase = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; pflashTotalSize = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; pflashSectorSize = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* &lt;/SPAN&gt;&lt;SPAN&gt;Init&lt;/SPAN&gt;&lt;SPAN&gt; hardware */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; BOARD_InitPins();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; BOARD_BootClockRUN();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; BOARD_InitDebugConsole();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Clean up Flash driver Structure*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; memset(&amp;amp;s_flashDriver, 0, &lt;/SPAN&gt;&lt;SPAN&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;flash_config_t&lt;/SPAN&gt;&lt;SPAN&gt;));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Setup flash driver structure for device and initialize variables. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; result = FLASH_Init(&amp;amp;s_flashDriver);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kStatus_FLASH_Success&lt;/SPAN&gt;&lt;SPAN&gt; != result)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Get flash properties*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; FLASH_GetProperty(&amp;amp;s_flashDriver, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_PropertyPflashBlockBaseAddr&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;pflashBlockBase);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; FLASH_GetProperty(&amp;amp;s_flashDriver, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_PropertyPflashTotalSize&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;pflashTotalSize);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; FLASH_GetProperty(&amp;amp;s_flashDriver, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_PropertyPflashSectorSize&lt;/SPAN&gt;&lt;SPAN&gt;, &amp;amp;pflashSectorSize);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* print welcome message */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n PFlash Example Start \r\n"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Print flash information - PFlash. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n PFlash Information: "&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Total Program Flash Size:\t%d KB, Hex: (0x%x)"&lt;/SPAN&gt;&lt;SPAN&gt;, (pflashTotalSize / 1024), pflashTotalSize);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Program Flash Sector Size:\t%d KB, Hex: (0x%x) "&lt;/SPAN&gt;&lt;SPAN&gt;, (pflashSectorSize / 1024), pflashSectorSize);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Check security status. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; result = FLASH_GetSecurityState(&amp;amp;s_flashDriver, &amp;amp;securityStatus);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kStatus_FLASH_Success&lt;/SPAN&gt;&lt;SPAN&gt; != result)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Print security status. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;switch&lt;/SPAN&gt;&lt;SPAN&gt; (securityStatus)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;case&lt;/SPAN&gt; &lt;SPAN&gt;kFLASH_SecurityStateNotSecure&lt;/SPAN&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Flash is UNSECURE!"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;case&lt;/SPAN&gt; &lt;SPAN&gt;kFLASH_SecurityStateBackdoorEnabled&lt;/SPAN&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Flash is SECURE, BACKDOOR is ENABLED!"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;case&lt;/SPAN&gt; &lt;SPAN&gt;kFLASH_SecurityStateBackdoorDisabled&lt;/SPAN&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Flash is SECURE, BACKDOOR is DISABLED!"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;default&lt;/SPAN&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Test &lt;/SPAN&gt;&lt;SPAN&gt;pflash&lt;/SPAN&gt;&lt;SPAN&gt; basic &lt;/SPAN&gt;&lt;SPAN&gt;opeation&lt;/SPAN&gt;&lt;SPAN&gt; only if flash is &lt;/SPAN&gt;&lt;SPAN&gt;unsecure&lt;/SPAN&gt;&lt;SPAN&gt;. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_SecurityStateNotSecure&lt;/SPAN&gt;&lt;SPAN&gt; == securityStatus)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Debug message for user. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Erase several sectors on upper &lt;/SPAN&gt;&lt;SPAN&gt;pflash&lt;/SPAN&gt;&lt;SPAN&gt; block where there is no code */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Erase a sector of flash"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Erase a sector from destAdrss. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;#if&lt;/SPAN&gt;&lt;SPAN&gt; defined(FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP) &amp;amp;&amp;amp; FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Note: we should make sure that the sector shouldn't be swap indicator sector*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; destAdrss = pflashBlockBase + (pflashTotalSize - (pflashSectorSize * 2));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt;#else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt; destAdrss = pflashBlockBase + (pflashTotalSize - pflashSectorSize);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; result = FLASH_Erase(&amp;amp;s_flashDriver, destAdrss, pflashSectorSize, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_ApiEraseKey&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kStatus_FLASH_Success&lt;/SPAN&gt;&lt;SPAN&gt; != result)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Verify sector if it's been erased. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; result = FLASH_VerifyErase(&amp;amp;s_flashDriver, destAdrss, pflashSectorSize, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_MarginValueUser&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kStatus_FLASH_Success&lt;/SPAN&gt;&lt;SPAN&gt; != result)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Print message for user. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Successfully Erased Sector 0x%x -&amp;gt; 0x%x\r\n"&lt;/SPAN&gt;&lt;SPAN&gt;, destAdrss, (destAdrss + pflashSectorSize));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Print message for user. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Program a buffer to a sector of flash "&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Prepare user buffer. */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;for&lt;/SPAN&gt;&lt;SPAN&gt; (i = 0; i &amp;lt; BUFFER_LEN; i++)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; s_buffer[i] = i;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Program user buffer into flash*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; result = FLASH_Program(&amp;amp;s_flashDriver, destAdrss, s_buffer, &lt;/SPAN&gt;&lt;SPAN&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(s_buffer));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kStatus_FLASH_Success&lt;/SPAN&gt;&lt;SPAN&gt; != result)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Verify programming by Program Check command with user margin levels */&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; result = FLASH_VerifyProgram(&amp;amp;s_flashDriver, destAdrss, &lt;/SPAN&gt;&lt;SPAN&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(s_buffer), s_buffer, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_MarginValueUser&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; &amp;amp;failAddr, &amp;amp;failDat);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;kStatus_FLASH_Success&lt;/SPAN&gt;&lt;SPAN&gt; != result)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt;#if&lt;/SPAN&gt;&lt;SPAN&gt; defined(__DCACHE_PRESENT) &amp;amp;&amp;amp; __DCACHE_PRESENT&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt;/* Clean the D-Cache before reading the flash data*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt; SCB_CleanInvalidateDCache();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="background-color: #e0e0e0; margin: 0;"&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Verify programming by reading back from flash directly*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;for&lt;/SPAN&gt;&lt;SPAN&gt; (&lt;/SPAN&gt;&lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; i = 0; i &amp;lt; BUFFER_LEN; i++)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; s_buffer_rbc[i] = *(&lt;/SPAN&gt;&lt;SPAN&gt;volatile&lt;/SPAN&gt; &lt;SPAN&gt;uint32_t&lt;/SPAN&gt;&lt;SPAN&gt; *)(destAdrss + i * 4);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (s_buffer_rbc[i] != s_buffer[i])&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; error_trap();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Successfully Programmed and Verified Location 0x%x -&amp;gt; 0x%x \r\n"&lt;/SPAN&gt;&lt;SPAN&gt;, destAdrss,&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; (destAdrss + &lt;/SPAN&gt;&lt;SPAN&gt;sizeof&lt;/SPAN&gt;&lt;SPAN&gt;(s_buffer)));&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Erase the context we have &lt;/SPAN&gt;&lt;SPAN&gt;progeammed&lt;/SPAN&gt;&lt;SPAN&gt; before*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;/* Note: we should make sure that the sector which will be set as swap indicator should be blank*/&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; FLASH_Erase(&amp;amp;s_flashDriver, destAdrss, pflashSectorSize, &lt;/SPAN&gt;&lt;SPAN&gt;kFLASH_ApiEraseKey&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; PRINTF(&lt;/SPAN&gt;&lt;SPAN&gt;"\r\n Erase/Program &lt;/SPAN&gt;&lt;SPAN&gt;opeation&lt;/SPAN&gt;&lt;SPAN&gt; will not be executed, as Flash is SECURE!"&lt;/SPAN&gt;&lt;SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt; app_finalize();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="margin: 0;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 27 Feb 2024 03:46:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-R-W-internal-flash-of-K66FN2M0VLQ18-when-using-FreeRTOS/m-p/1816131#M66098</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2024-02-27T03:46:44Z</dc:date>
    </item>
  </channel>
</rss>

