<?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>Kinetis Microcontrollers中的主题 Re: SPI Flash problem with frequencies greater than 1MHz</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376734#M19818</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am testing this on actual PCB where flash and controller are interfaced&lt;/P&gt;&lt;P&gt;I am using the following code for reading and writing into flash. I have followed the instructions according to the spansions data sheet.&lt;/P&gt;&lt;P&gt;The code is working with lower frequencies(below 1MHz) but not working for higher frequencies&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//////////////////////////////////////&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include "../SLLD/slld.h"&lt;/P&gt;&lt;P&gt;#include "HAL.h"&lt;/P&gt;&lt;P&gt;#include "SM0.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint8_t wrBuffer[MAX_BUFFER_SIZE];&lt;/P&gt;&lt;P&gt;uint8_t Dummy_buffer[MAX_BUFFER_SIZE];&lt;/P&gt;&lt;P&gt;// ***************************************************************************&lt;/P&gt;&lt;P&gt;//&amp;nbsp; FLASH_READ - HAL read function&lt;/P&gt;&lt;P&gt;//&lt;/P&gt;&lt;P&gt;//&amp;nbsp; input : device_num&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; device number to which operation will be done&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write a single command byte to flash&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys_addr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system address to be used&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data_buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pointer to the data buffer where to store the read data&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Of_Read_Bytes&amp;nbsp; number of bytes to be read&lt;/P&gt;&lt;P&gt;//&lt;/P&gt;&lt;P&gt;//&amp;nbsp; return value : status of the operation - FAIL or SUCCESS&lt;/P&gt;&lt;P&gt;// ***************************************************************************&lt;/P&gt;&lt;P&gt;SLLD_STATUS FLASH_READ(BYTE command,ADDRESS sys_addr,BYTE *data_buffer,int Number_Of_Read_Bytes )&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t Addr1,Addr2,Addr3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t Cmd_Size;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t AddBufferPtr[ADD_BUFFER_SIZE]; //! buffer to store address of the flash&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t Dummy_buffer[DUMMY_BUFFER_SIZE];&amp;nbsp;&amp;nbsp;&amp;nbsp; //! spi dummy buffer&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SLLD_STATUS status = SLLD_OK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cmd_Size=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=command;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(sys_addr != ADDRESS_NOT_USED)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr1=sys_addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr2=sys_addr&amp;gt;&amp;gt;8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr3=sys_addr&amp;gt;&amp;gt;16;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=Addr3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=Addr2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=Addr1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The AddBufferPtr contains the read command along with address of flash to be read&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //make the chip select pin low&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CS_SPI_ClrVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send the AddBufferPtr to flash &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SM0_SendBlock(masterDevData,(LDD_TData*)AddBufferPtr,Cmd_Size)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SM0_ReceiveBlock(masterDevData, (LDD_TData*)Dummy_buffer,Cmd_Size)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait till transmission and reception completes&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Tx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Rx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // receive the data from flash&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(SM0_SendBlock(masterDevData, (LDD_TData*)msgDummy,Number_Of_Read_Bytes)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(SM0_ReceiveBlock(masterDevData, (LDD_TData*)data_buffer,Number_Of_Read_Bytes)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //wait till actual data received&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Tx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Rx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disassert the chipselect&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; CS_SPI_SetVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(status);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/***************************************************************************&lt;/P&gt;&lt;P&gt;&amp;nbsp; FLASH_WRITE - HAL write function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input : device_num&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; device number to which operation will be done&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write a single command byte to flash&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys_addr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system address to be used&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data_buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pointer to the data buffer where to store the written data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Of_Written_Bytes&amp;nbsp; number of bytes to be written&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return value : status of the operation - FAIL or SUCCESS&lt;/P&gt;&lt;P&gt; ***************************************************************************/&lt;/P&gt;&lt;P&gt;SLLD_STATUS FLASH_WRITE(BYTE command,ADDRESS sys_addr,BYTE *data_buffer,int Number_Of_Written_Bytes)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SLLD_STATUS status = SLLD_OK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t Cmd_Size;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t Addr1,Addr2,Addr3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cmd_Size=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++] = command;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(sys_addr != ADDRESS_NOT_USED)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr1=sys_addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr2=sys_addr&amp;gt;&amp;gt;8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr3=sys_addr&amp;gt;&amp;gt;16;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cmd_Size = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=command;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=Addr3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=Addr2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=Addr1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(data_buffer != BUFFER_NOT_USED)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(count=0;count&amp;lt;Number_Of_Written_Bytes;count++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++] = (uint8_t)*data_buffer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data_buffer++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CS_SPI_ClrVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SM0_SendBlock(masterDevData,(LDD_TData*)wrBuffer,Cmd_Size);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SM0_ReceiveBlock(masterDevData, (LDD_TData*)Dummy_buffer,Cmd_Size);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Tx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Rx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; CS_SPI_SetVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(status);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 10 Jan 2015 15:00:13 GMT</pubDate>
    <dc:creator>durgeshtanuku</dc:creator>
    <dc:date>2015-01-10T15:00:13Z</dc:date>
    <item>
      <title>SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376729#M19813</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I am using KL25Z64 controller in my project. I have interfaced spansion's S25FL128S external flash. My flash code is working fine when I set 1MHz clock rate in component settings. But when I change the frequency to above 1MHz flash is not responding for Read/Sector erase commands.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I have gathered the information from reference manual that, spi can work with frequencies upto half of the bus clock frequency when used as master. My core clock and bus clock frequencies are 48MHz and 24MHz. So it should work upto 12MHz.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I have read the information in reference manual of flash IC that, it works till 113MHz of frequency.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When I set the frequencies above 1MHz, I could see the spi clock getting generated with the help of logic analyser. But Coding blocking for receive interrupt.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Suggest me how to resolve this issue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Durgesh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Dec 2014 05:05:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376729#M19813</guid>
      <dc:creator>durgeshtanuku</dc:creator>
      <dc:date>2014-12-26T05:05:10Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376730#M19814</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Durgesh Tanuku,&lt;/P&gt;&lt;P&gt;&lt;SPAN class="j-post-author"&gt;&lt;/SPAN&gt;At first, I'd like to suggest that we should figure out the root reason of the issue.&lt;/P&gt;&lt;P&gt;Did you have the demo that use another MCU work with the external flash on &amp;gt;1 MHz frequency?&lt;/P&gt;&lt;P&gt;If yes, I strongly recommend that you can use logic analyzer to capture the operation signal of the previous MCU and the KL25 communicate with external flash, then compare the signals and find out the differences.&lt;/P&gt;&lt;P&gt;After the comparison of the signals, it will make the reason more conspicuously.&lt;/P&gt;&lt;P&gt;I'm looking forward to your reply.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Dec 2014 09:50:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376730#M19814</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2014-12-26T09:50:42Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376731#M19815</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;!&lt;/P&gt;&lt;P&gt;Hello jeremyzhou,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorry, I don't have any other controller to test what you told. But my colleague is working on K60DN120 cortex M4.&lt;/P&gt;&lt;P&gt;He is also facing same issue. I am attaching the screen shot of my logic analyser for 1MHz(working frequency) and other non working frequency. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Code is getting blocked for Rx_Complete_Flag which I am setting in SM0_OnBlockReceive if i am using frequencies greater that 1MHz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;capture for reading an array with 1MHz clock frequency&lt;/P&gt;&lt;P&gt;&lt;A class="loading" href="http://postimg.org/image/paml16otd/" title="http://postimg.org/image/paml16otd/"&gt;http://postimg.org/image/paml16otd/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 13.3333330154419px;"&gt;capture for reading an array with 4MHz(&amp;gt;1MHz) clock frequency&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 13.3333330154419px;"&gt;&lt;A class="loading" href="http://postimg.org/image/mwf62q8af/" title="http://postimg.org/image/mwf62q8af/"&gt;http://postimg.org/image/mwf62q8af/&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 13.3333330154419px;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 13.3333330154419px;"&gt;capture of code block instance&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 13.3333330154419px;"&gt;&lt;A class="jive-link-external-small" href="http://postimg.org/image/jxewkpqg1/"&gt;http://postimg.org/image/jxewkpqg1/&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Dec 2014 10:47:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376731#M19815</guid>
      <dc:creator>durgeshtanuku</dc:creator>
      <dc:date>2014-12-26T10:47:48Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376732#M19816</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;Hello jeremyzhou,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;Sorry, I don't have any other controller to test what you told. But my colleague is working on K60DN120 cortex M4.&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;He is also facing same issue. I am attaching the screen shot of my logic analyser for 1MHz(working frequency) and other non working frequency.&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Code is getting blocked for Rx_Complete_Flag which I am setting in SM0_OnBlockReceive if i am using frequencies greater that 1MHz.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;capture for reading an array with 1MHz clock frequency&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;A class="jive-link-external-small" data-content-finding="Community" href="http://postimg.org/image/paml16otd/" style="font-weight: inherit; font-style: inherit; font-family: inherit; color: #6a737b;"&gt;http://postimg.org/image/paml16otd/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;SPAN style="font-weight: inherit; font-style: inherit; font-size: 13.3333330154419px; font-family: inherit;"&gt;capture for reading an array with 4MHz(&amp;gt;1MHz) clock frequency&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;SPAN style="font-weight: inherit; font-style: inherit; font-size: 13.3333330154419px; font-family: inherit;"&gt;&lt;A class="jive-link-external-small" data-content-finding="Community" href="http://postimg.org/image/mwf62q8af/" style="font-weight: inherit; font-style: inherit; font-size: 13.3333320617676px; font-family: inherit; color: #6a737b;"&gt;http://postimg.org/image/mwf62q8af/&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;SPAN style="font-weight: inherit; font-style: inherit; font-size: 13.3333330154419px; font-family: inherit;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;SPAN style="font-weight: inherit; font-style: inherit; font-size: 13.3333330154419px; font-family: inherit;"&gt;capture of code block instance&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;SPAN style="font-weight: inherit; font-style: inherit; font-size: 13.3333330154419px; font-family: inherit;"&gt;&lt;A class="jive-link-external-small" data-content-finding="Community" href="http://postimg.org/image/jxewkpqg1/" style="font-weight: inherit; font-style: inherit; font-size: 13.3333320617676px; font-family: inherit; color: #6a737b;"&gt;http://postimg.org/image/jxewkpqg1/&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Dec 2014 04:56:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376732#M19816</guid>
      <dc:creator>durgeshtanuku</dc:creator>
      <dc:date>2014-12-30T04:56:27Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376733#M19817</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Durgesh Tanuku,&lt;/P&gt;&lt;P&gt;I‘ve contacted with my colleagues about this issue and one of them said that he encountered the similar issue before.&lt;/P&gt;&lt;P&gt;He interfaced the MCU with the external flash device by using the normal wire and the external flash device could worked fine at low rate, however the operation broke down when the rate beyond the specific frequency.&lt;/P&gt;&lt;P&gt;The issue disappeared when he used theP PCB board instead of the normal wire.&lt;/P&gt;&lt;P&gt;So I'd like to confirm that what way you use to test。&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 31 Dec 2014 09:14:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376733#M19817</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2014-12-31T09:14:22Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376734#M19818</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am testing this on actual PCB where flash and controller are interfaced&lt;/P&gt;&lt;P&gt;I am using the following code for reading and writing into flash. I have followed the instructions according to the spansions data sheet.&lt;/P&gt;&lt;P&gt;The code is working with lower frequencies(below 1MHz) but not working for higher frequencies&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//////////////////////////////////////&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include "../SLLD/slld.h"&lt;/P&gt;&lt;P&gt;#include "HAL.h"&lt;/P&gt;&lt;P&gt;#include "SM0.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint8_t wrBuffer[MAX_BUFFER_SIZE];&lt;/P&gt;&lt;P&gt;uint8_t Dummy_buffer[MAX_BUFFER_SIZE];&lt;/P&gt;&lt;P&gt;// ***************************************************************************&lt;/P&gt;&lt;P&gt;//&amp;nbsp; FLASH_READ - HAL read function&lt;/P&gt;&lt;P&gt;//&lt;/P&gt;&lt;P&gt;//&amp;nbsp; input : device_num&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; device number to which operation will be done&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write a single command byte to flash&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys_addr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system address to be used&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data_buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pointer to the data buffer where to store the read data&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Of_Read_Bytes&amp;nbsp; number of bytes to be read&lt;/P&gt;&lt;P&gt;//&lt;/P&gt;&lt;P&gt;//&amp;nbsp; return value : status of the operation - FAIL or SUCCESS&lt;/P&gt;&lt;P&gt;// ***************************************************************************&lt;/P&gt;&lt;P&gt;SLLD_STATUS FLASH_READ(BYTE command,ADDRESS sys_addr,BYTE *data_buffer,int Number_Of_Read_Bytes )&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t Addr1,Addr2,Addr3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t Cmd_Size;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t AddBufferPtr[ADD_BUFFER_SIZE]; //! buffer to store address of the flash&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t Dummy_buffer[DUMMY_BUFFER_SIZE];&amp;nbsp;&amp;nbsp;&amp;nbsp; //! spi dummy buffer&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SLLD_STATUS status = SLLD_OK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cmd_Size=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=command;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(sys_addr != ADDRESS_NOT_USED)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr1=sys_addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr2=sys_addr&amp;gt;&amp;gt;8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr3=sys_addr&amp;gt;&amp;gt;16;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=Addr3;&lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=Addr2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; AddBufferPtr[Cmd_Size++]=Addr1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The AddBufferPtr contains the read command along with address of flash to be read&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //make the chip select pin low&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CS_SPI_ClrVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // send the AddBufferPtr to flash &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SM0_SendBlock(masterDevData,(LDD_TData*)AddBufferPtr,Cmd_Size)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SM0_ReceiveBlock(masterDevData, (LDD_TData*)Dummy_buffer,Cmd_Size)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait till transmission and reception completes&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Tx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Rx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // receive the data from flash&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(SM0_SendBlock(masterDevData, (LDD_TData*)msgDummy,Number_Of_Read_Bytes)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(SM0_ReceiveBlock(masterDevData, (LDD_TData*)data_buffer,Number_Of_Read_Bytes)!=ERR_OK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //wait till actual data received&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Tx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Rx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // disassert the chipselect&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; CS_SPI_SetVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(status);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/***************************************************************************&lt;/P&gt;&lt;P&gt;&amp;nbsp; FLASH_WRITE - HAL write function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input : device_num&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; device number to which operation will be done&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write a single command byte to flash&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys_addr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system address to be used&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data_buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pointer to the data buffer where to store the written data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Number_Of_Written_Bytes&amp;nbsp; number of bytes to be written&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return value : status of the operation - FAIL or SUCCESS&lt;/P&gt;&lt;P&gt; ***************************************************************************/&lt;/P&gt;&lt;P&gt;SLLD_STATUS FLASH_WRITE(BYTE command,ADDRESS sys_addr,BYTE *data_buffer,int Number_Of_Written_Bytes)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SLLD_STATUS status = SLLD_OK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t Cmd_Size;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t Addr1,Addr2,Addr3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cmd_Size=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++] = command;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(sys_addr != ADDRESS_NOT_USED)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr1=sys_addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr2=sys_addr&amp;gt;&amp;gt;8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Addr3=sys_addr&amp;gt;&amp;gt;16;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cmd_Size = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=command;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=Addr3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=Addr2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++]=Addr1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(data_buffer != BUFFER_NOT_USED)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t count;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(count=0;count&amp;lt;Number_Of_Written_Bytes;count++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wrBuffer[Cmd_Size++] = (uint8_t)*data_buffer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data_buffer++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CS_SPI_ClrVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SM0_SendBlock(masterDevData,(LDD_TData*)wrBuffer,Cmd_Size);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SM0_ReceiveBlock(masterDevData, (LDD_TData*)Dummy_buffer,Cmd_Size);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Tx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(Rx_CompleteFlag==0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rx_CompleteFlag=0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; CS_SPI_SetVal(CS_SPI_DeviceData);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(status);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 10 Jan 2015 15:00:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376734#M19818</guid>
      <dc:creator>durgeshtanuku</dc:creator>
      <dc:date>2015-01-10T15:00:13Z</dc:date>
    </item>
    <item>
      <title>Re: Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376735#M19819</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Durgesh Tanuku,&lt;/P&gt;&lt;P&gt;I've also been confused with this issue until now, and I attach a SPI demo of K60 without using PE, please refer to it and build a new project for the communication between the MCU and spansions.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 12 Jan 2015 02:59:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376735#M19819</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2015-01-12T02:59:21Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376736#M19820</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I tested a similar SPI flash chip with Teensy 3.1 (Kinetis K20) today, using 12 MHz SPI clock.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It worked fine, even using normal wires on a solderless breadboard.&amp;nbsp; Details here:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jive-link-external-small" href="https://forum.pjrc.com/threads/27507-SPIFIO-issues?p=61918#post61918" target="_blank"&gt;https://forum.pjrc.com/threads/27507-SPIFIO-issues?p=61918#post61918&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="flash.jpg"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/39986iC448892F84578DFC/image-size/large?v=v2&amp;amp;px=999" role="button" title="flash.jpg" alt="flash.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 12 Jan 2015 14:08:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376736#M19820</guid>
      <dc:creator>paulstoffregen</dc:creator>
      <dc:date>2015-01-12T14:08:16Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376737#M19821</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a feeling that the problem here is that the code performing writing/erase and then reading is not checking the SPI Flash chip's busy state.&lt;/P&gt;&lt;P&gt;This means that, as long as the communication speed is low, the flash has completed internal operations when the read starts and so things look OK.&lt;/P&gt;&lt;P&gt;When there is a higher speed the Flash no longer has time to complete the operation and so the read fails because the Flash is still busy.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The solution is to always first check the busy state of the device after a write/erase operation has previously been performed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.utasker.com/kinetis.html" title="http://www.utasker.com/kinetis.html"&gt;µTasker Kinetis support&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 14 Jan 2015 16:25:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376737#M19821</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2015-01-14T16:25:24Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376738#M19822</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am polling the device status after each write/erase operation in other function.&lt;/P&gt;&lt;P&gt;Today I have found that problem is with OnBlockReceive interrupt. While debugging the code, I have found that.&lt;/P&gt;&lt;P&gt;When the frequency is greater that 1MHz, InpRcvDataNum is 1 less than the number of bytes I have mentioned in ReceiveBlock function. So the control is blocking for dummy buffer to be willed with the number of bytes mentioned in ReceiveBlock.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kindly verify the below screen shots&lt;/P&gt;&lt;P&gt;1) 1MHz ----- &lt;A class="loading" href="http://s1.postimg.org/nrhjrl8un/1_MHz.png" title="http://s1.postimg.org/nrhjrl8un/1_MHz.png"&gt;http://s1.postimg.org/nrhjrl8un/1_MHz.png&lt;/A&gt;&lt;/P&gt;&lt;P&gt;2) 4MHz ----- &lt;A class="loading" href="http://s16.postimg.org/x6gd846f9/4_MHz.png" title="http://s16.postimg.org/x6gd846f9/4_MHz.png"&gt;http://s16.postimg.org/x6gd846f9/4_MHz.png&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Durgesh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 11:53:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376738#M19822</guid>
      <dc:creator>durgeshtanuku</dc:creator>
      <dc:date>2015-01-15T11:53:56Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376739#M19823</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mark,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After working for 4hrs I found the bug in my code(sequence read, write operations I am operating of flash).&lt;/P&gt;&lt;P&gt;Now It is working with the frequencies above 1MHz also.&lt;/P&gt;&lt;P&gt;But I found It's not working with two particular frequencies i.e., 4MHz and 6MHz. With these two frequencies, I am facing the problem in above reply to you(reply with links).&lt;/P&gt;&lt;P&gt;Kindly inform me if you know what might be the problem&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Durgesh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 15:00:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376739#M19823</guid>
      <dc:creator>durgeshtanuku</dc:creator>
      <dc:date>2015-01-15T15:00:23Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Flash problem with frequencies greater than 1MHz</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376740#M19824</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since many people work with the chips at many speeds without any problems, any difficultis are due to coding problems that are susceptible to timing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would suggest not to use the PE generated code since your code has no need to be based on its interrupt operation, which is simply complicated things in this situation and causing random behaviour (sometimes OK sometimes not).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Simply send each byte from your buffer by polling the SPI status register after each byte transmission until all have been sent. Then you won't need to depend on the Tx_CompleteFlag. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is probably also a polling option in PE that could be used instead, which would probably make the behavior more predictable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 15 Jan 2015 17:33:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Flash-problem-with-frequencies-greater-than-1MHz/m-p/376740#M19824</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2015-01-15T17:33:14Z</dc:date>
    </item>
  </channel>
</rss>

