AnsweredAssumed Answered

Hi all, i am using lpc4367 controller and trying to write flash programming. But i am getting Hard Fault error at iap_entry API call. I am using the same location as mentioned in user manual for entry i.e.  IAP_LOCATION  0x10400100. Kindly help me.

Question asked by saurav sinha on Feb 8, 2018
Latest reply on Feb 10, 2018 by Kerry Zhou

This is the code

 



#define IAP_LOCATION 0x10400100

typedef void (*IAP)(unsigned int[5], unsigned int[4]);


unsigned int command_param[5];
unsigned int status_result[4];

IAP iap_myentry=(IAP)0x10400100;


/* Initializes the IAP command interface */
uint8_t Chip_IAP_Init(void)
{
uint32_t command[5], result[4];

command[0] = 49; /* IAP_INIT */
result[0] = IAP_CMD_SUCCESS;
delaymS(10);
iap_myentry(command, result);
return result[0];
}

/* Prepare sector for write operation */
uint8_t Chip_IAP_PreSectorForReadWrite(uint32_t strSector, uint32_t endSector, uint8_t flashBank)
{
uint32_t command[5], result[4];

command[0] = IAP_PREWRRITE_CMD;
command[1] = strSector;
command[2] = endSector;
command[3] = flashBank;
iap_myentry(command, result);

return result[0];
}

/* Copy RAM to flash */
uint8_t Chip_IAP_CopyRamToFlash(uint32_t dstAdd, uint32_t *srcAdd, uint32_t byteswrt)
{
uint32_t command[5], result[4];

command[0] = IAP_WRISECTOR_CMD;
command[1] = dstAdd;
command[2] = (uint32_t) srcAdd;
command[3] = byteswrt;
command[4] = SystemCoreClock / 1000;
iap_myentry(command, result);

return result[0];
}

/* Erase sector */
uint8_t Chip_IAP_EraseSector(uint32_t strSector, uint32_t endSector, uint8_t flashBank)
{
uint32_t command[5], result[4];

command[0] = IAP_ERSSECTOR_CMD;
command[1] = strSector;
command[2] = endSector;
command[3] = SystemCoreClock / 1000;
command[4] = flashBank;
iap_myentry(command, result);

return result[0];
}

/* Blank check sector */
uint8_t Chip_IAP_BlankCheckSector(uint32_t strSector, uint32_t endSector, uint8_t flashBank)
{
uint32_t command[5], result[4];

command[0] = IAP_BLANK_CHECK_SECTOR_CMD;
command[1] = strSector;
command[2] = endSector;
command[3] = flashBank;
iap_myentry(command, result);

return result[0];
}

/* Read part identification number */
uint32_t Chip_IAP_ReadPID()
{
uint32_t command[5], result[4];

command[0] = IAP_REPID_CMD;
iap_myentry(command, result);

return result[1];
}

/* Read boot code version number */
uint8_t Chip_IAP_ReadBootCode()
{
uint32_t command[5], result[4];

command[0] = IAP_READ_BOOT_CODE_CMD;
iap_myentry(command, result);

return result[0];
}

/* IAP compare */
uint8_t Chip_IAP_Compare(uint32_t dstAdd, uint32_t srcAdd, uint32_t bytescmp)
{
uint32_t command[5], result[4];

command[0] = IAP_COMPARE_CMD;
command[1] = dstAdd;
command[2] = srcAdd;
command[3] = bytescmp;
iap_myentry(command, result);

return result[0];
}

/* Reinvoke ISP */
uint8_t Chip_IAP_ReinvokeISP()
{
uint32_t command[5], result[4];

command[0] = IAP_REINVOKE_ISP_CMD;
iap_myentry(command, result);

return result[0];
}

/* Read the unique ID */
uint32_t Chip_IAP_ReadUID(uint32_t uid[])
{
uint32_t command[5], result[5], i;

command[0] = IAP_READ_UID_CMD;
iap_myentry(command, result);
for(i = 0; i < 4; i++) {
uid[i] = result[i + 1];
}

return result[0];
}

/* Erase page */
uint8_t Chip_IAP_ErasePage(uint32_t strPage, uint32_t endPage)
{
uint32_t command[5], result[4];

command[0] = IAP_ERASE_PAGE_CMD;
command[1] = strPage;
command[2] = endPage;
command[3] = SystemCoreClock / 1000;
iap_myentry(command, result);

return result[0];
}

/* Set active boot flash bank */
uint8_t Chip_IAP_SetBootFlashBank(uint8_t bankNum)
{
uint32_t command[5], result[4];

command[0] = IAP_SET_BOOT_FLASH;
command[1] = bankNum;
command[2] = SystemCoreClock / 1000;
iap_myentry(command, result);

return result[0];
}

 

When ever i call API(lets say -  Chip_IAP_Init())  from main, it gives error at iap_myentry(command, result) as hard fault error. 

How to get rid from this.

Attachments

Outcomes