<?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>LPC MicrocontrollersのトピックLPC4357 SPIFI peripheral hardfault</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-SPIFI-peripheral-hardfault/m-p/712677#M28792</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm using lpc open SPIFI library (Latest version 1.01) on LPC4357 and S25Fl164K external flash.&lt;/P&gt;&lt;P&gt;I'm using spi flash as an external flash with simple command (Not memory mapped or for running firmware from it)&lt;/P&gt;&lt;P&gt;my problem is that in some cases (specially when erasing a sector by spifiDevEraseSubBlock function) the system throw hard fault&lt;/P&gt;&lt;P&gt;the hard fault rise at the following function:&lt;/P&gt;&lt;P&gt;function "spifi_HW_GetData8" in this code&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;static uint32_t spifiDeviceDataGetStatusS25FL164K(const SPIFI_HANDLE_T *pHandle)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;static const uint8_t spifiCmdOp[3] = {CMD_05_RDSR1, CMD_35_RDSR2, CMD_33_RDSR3};&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t statusRegs = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;LPC_SPIFI_CHIPHW_T *pSpifiCtrlAddr = (LPC_SPIFI_CHIPHW_T *) pHandle-&amp;gt;pInfoData-&amp;gt;spifiCtrlAddr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t idx;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (idx = 0; idx &amp;lt; sizeof(spifiCmdOp) / sizeof(spifiCmdOp[0]); ++idx) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifi_HW_SetCmd(pSpifiCtrlAddr,&lt;BR /&gt;&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; &amp;nbsp;(SPIFI_CMD_OPCODE(spifiCmdOp[idx]) |&lt;BR /&gt;&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; &amp;nbsp; SPIFI_CMD_DATALEN(1) |&lt;BR /&gt;&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; &amp;nbsp; SPIFI_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_SERIAL) |&lt;BR /&gt;&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; &amp;nbsp; SPIFI_CMD_FRAMEFORM(SPIFI_FRAMEFORM_OP)));&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;statusRegs |= (spifi_HW_GetData8(pSpifiCtrlAddr) &amp;lt;&amp;lt; (8 * idx));&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Wait for command to complete */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifi_HW_WaitCMD(pSpifiCtrlAddr);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return statusRegs;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Call stack:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="Capture1.PNG"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/31606i5BB12300210DD4F0/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture1.PNG" alt="Capture1.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;what is wrong with my system or spifi configuration?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Configs:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;void SPIFI_Init(void) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t spifiBaseClockRate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t maxSpifiClock;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Setup SPIFI FLASH pin muxing (QUAD) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_SCU_SetPinMuxing(spifipinmuxing, sizeof(spifipinmuxing) / sizeof(PINMUX_GRP_T));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* SPIFI base clock will be based on the main PLL rate and a divider */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifiBaseClockRate = 160000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Setup SPIFI clock to run around 16Mhz. Use divider C for this */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_Clock_SetDivider(CLK_IDIV_C, CLKIN_IDIVA, CalculateDivider(spifiBaseClockRate, 40000000));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_Clock_SetBaseClock(CLK_BASE_SPIFI, CLKIN_IDIVC, true, false);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* initialize and get a handle to the library */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pSpifi = initializeSpifi();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Get some info needed for the application */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSpifiClock = spifiDevGetInfo(pSpifi, SPIFI_INFO_MAXCLOCK);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Lower the clock to the max rate the test environment can support */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (maxSpifiClock &amp;gt; MAX_SPIFI_CLOCK) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSpifiClock = MAX_SPIFI_CLOCK;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Setup SPIFI clock to at the maximum interface rate the detected device&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; can use. This should be done after device init. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_Clock_SetDivider(CLK_IDIV_C, CLKIN_MAINPLL, CalculateDivider(spifiBaseClockRate, maxSpifiClock));&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static SPIFI_HANDLE_T *initializeSpifi(void) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t memSize;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPIFI_HANDLE_T *pReturnVal;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Initialize LPCSPIFILIB library, reset the interface */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifiInit(CHIP_LPC_SPIFI_BASE, true);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* register support for the family(s) we may want to work with&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (only 1 is required) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifiRegisterFamily(spifi_REG_FAMILY_CommonCommandSet);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enumerate the list of supported devices */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIFI_DEV_ENUMERATOR_T ctx;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char * devName = spifiDevEnumerateName(&amp;amp;ctx, 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (devName) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; devName = spifiDevEnumerateName(&amp;amp;ctx, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Get required memory for detected device, this may vary per device family */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memSize = spifiGetHandleMemSize(CHIP_LPC_SPIFI_BASE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (memSize == 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Initialize and detect a device and get device context */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pReturnVal = spifiInitDevice(&amp;amp;lmem, sizeof(lmem), CHIP_LPC_SPIFI_BASE, SPIFLASH_BASE_ADDRESS);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (pReturnVal == NULL) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// ("spifiInitDevice", SPIFI_ERR_GEN);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return pReturnVal;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;static uint32_t CalculateDivider(uint32_t baseClock, uint32_t target) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t divider = (baseClock / target);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* If there is a remainder then increment the divider so that the resultant&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; clock is not over the target */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(baseClock % target) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;++divider;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return divider;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 25 Sep 2017 08:19:29 GMT</pubDate>
    <dc:creator>dolphinapadana</dc:creator>
    <dc:date>2017-09-25T08:19:29Z</dc:date>
    <item>
      <title>LPC4357 SPIFI peripheral hardfault</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-SPIFI-peripheral-hardfault/m-p/712677#M28792</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm using lpc open SPIFI library (Latest version 1.01) on LPC4357 and S25Fl164K external flash.&lt;/P&gt;&lt;P&gt;I'm using spi flash as an external flash with simple command (Not memory mapped or for running firmware from it)&lt;/P&gt;&lt;P&gt;my problem is that in some cases (specially when erasing a sector by spifiDevEraseSubBlock function) the system throw hard fault&lt;/P&gt;&lt;P&gt;the hard fault rise at the following function:&lt;/P&gt;&lt;P&gt;function "spifi_HW_GetData8" in this code&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;static uint32_t spifiDeviceDataGetStatusS25FL164K(const SPIFI_HANDLE_T *pHandle)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;static const uint8_t spifiCmdOp[3] = {CMD_05_RDSR1, CMD_35_RDSR2, CMD_33_RDSR3};&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t statusRegs = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;LPC_SPIFI_CHIPHW_T *pSpifiCtrlAddr = (LPC_SPIFI_CHIPHW_T *) pHandle-&amp;gt;pInfoData-&amp;gt;spifiCtrlAddr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t idx;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (idx = 0; idx &amp;lt; sizeof(spifiCmdOp) / sizeof(spifiCmdOp[0]); ++idx) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifi_HW_SetCmd(pSpifiCtrlAddr,&lt;BR /&gt;&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; &amp;nbsp;(SPIFI_CMD_OPCODE(spifiCmdOp[idx]) |&lt;BR /&gt;&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; &amp;nbsp; SPIFI_CMD_DATALEN(1) |&lt;BR /&gt;&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; &amp;nbsp; SPIFI_CMD_FIELDFORM(SPIFI_FIELDFORM_ALL_SERIAL) |&lt;BR /&gt;&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; &amp;nbsp; SPIFI_CMD_FRAMEFORM(SPIFI_FRAMEFORM_OP)));&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;statusRegs |= (spifi_HW_GetData8(pSpifiCtrlAddr) &amp;lt;&amp;lt; (8 * idx));&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Wait for command to complete */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifi_HW_WaitCMD(pSpifiCtrlAddr);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return statusRegs;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Call stack:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="Capture1.PNG"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/31606i5BB12300210DD4F0/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture1.PNG" alt="Capture1.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;what is wrong with my system or spifi configuration?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Configs:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;void SPIFI_Init(void) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t spifiBaseClockRate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t maxSpifiClock;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Setup SPIFI FLASH pin muxing (QUAD) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_SCU_SetPinMuxing(spifipinmuxing, sizeof(spifipinmuxing) / sizeof(PINMUX_GRP_T));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* SPIFI base clock will be based on the main PLL rate and a divider */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifiBaseClockRate = 160000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Setup SPIFI clock to run around 16Mhz. Use divider C for this */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_Clock_SetDivider(CLK_IDIV_C, CLKIN_IDIVA, CalculateDivider(spifiBaseClockRate, 40000000));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_Clock_SetBaseClock(CLK_BASE_SPIFI, CLKIN_IDIVC, true, false);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* initialize and get a handle to the library */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pSpifi = initializeSpifi();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Get some info needed for the application */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSpifiClock = spifiDevGetInfo(pSpifi, SPIFI_INFO_MAXCLOCK);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Lower the clock to the max rate the test environment can support */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (maxSpifiClock &amp;gt; MAX_SPIFI_CLOCK) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSpifiClock = MAX_SPIFI_CLOCK;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Setup SPIFI clock to at the maximum interface rate the detected device&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; can use. This should be done after device init. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Chip_Clock_SetDivider(CLK_IDIV_C, CLKIN_MAINPLL, CalculateDivider(spifiBaseClockRate, maxSpifiClock));&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static SPIFI_HANDLE_T *initializeSpifi(void) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t memSize;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPIFI_HANDLE_T *pReturnVal;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Initialize LPCSPIFILIB library, reset the interface */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifiInit(CHIP_LPC_SPIFI_BASE, true);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* register support for the family(s) we may want to work with&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (only 1 is required) */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;spifiRegisterFamily(spifi_REG_FAMILY_CommonCommandSet);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enumerate the list of supported devices */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIFI_DEV_ENUMERATOR_T ctx;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char * devName = spifiDevEnumerateName(&amp;amp;ctx, 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (devName) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; devName = spifiDevEnumerateName(&amp;amp;ctx, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Get required memory for detected device, this may vary per device family */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memSize = spifiGetHandleMemSize(CHIP_LPC_SPIFI_BASE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (memSize == 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Initialize and detect a device and get device context */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pReturnVal = spifiInitDevice(&amp;amp;lmem, sizeof(lmem), CHIP_LPC_SPIFI_BASE, SPIFLASH_BASE_ADDRESS);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (pReturnVal == NULL) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// ("spifiInitDevice", SPIFI_ERR_GEN);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return pReturnVal;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;static uint32_t CalculateDivider(uint32_t baseClock, uint32_t target) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t divider = (baseClock / target);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* If there is a remainder then increment the divider so that the resultant&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; clock is not over the target */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(baseClock % target) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;++divider;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return divider;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Sep 2017 08:19:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-SPIFI-peripheral-hardfault/m-p/712677#M28792</guid>
      <dc:creator>dolphinapadana</dc:creator>
      <dc:date>2017-09-25T08:19:29Z</dc:date>
    </item>
    <item>
      <title>Re: LPC4357 SPIFI peripheral hardfault</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-SPIFI-peripheral-hardfault/m-p/712678#M28793</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Dolphin,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would recommend you to test and compare the lpcspifilib example that comes with LPCOpen with your project:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/developer-resources-/lpcopen-libraries-and-examples/lpcopen-software-development-platform-lpc43xx:LPCOPEN-SOFTWARE-FOR-LPC43XX" title="https://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/developer-resources-/lpcopen-libraries-and-examples/lpcopen-software-development-platform-lpc43xx:LPCOPEN-SOFTWARE-FOR-LPC43XX"&gt;LPCOpen Software for LPC43XX|NXP&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope it helps!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;BR /&gt;Carlos Mendoza&lt;BR /&gt;Technical Support Engineer&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Oct 2017 20:18:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC4357-SPIFI-peripheral-hardfault/m-p/712678#M28793</guid>
      <dc:creator>Carlos_Mendoza</dc:creator>
      <dc:date>2017-10-02T20:18:04Z</dc:date>
    </item>
  </channel>
</rss>

