-
https://community.nxp.com/t5/S32K/S32K344-C40-IP-Hardware-Fault-Problem/td-p/1697432This is the CODE TO WRITE buffer variable into the FLASH MEM:
uint8_t functionToWriteOnFlash(void * buffer){
// Unlock sector if needed
if (STATUS_C40_IP_SECTOR_PROTECTED == C40_Ip_GetLock(FLS_SECTOR_ADDR)) {
C40_Ip_ClearLock(FLS_SECTOR_ADDR, FLS_MASTER_ID);
}
// NOTE: Is this Necessary to rewrite the same previous sector ?
eraseSector();
size_t writeAddress = HEADER_ADDRESS;
size_t remainingSize = totalSize;
size_t chunkSize = 16;
size_t currentSize = 0;
uint8_t *bufferPtr = buffer;
uint8_t resp;
// Move through buffer 16 Bytes every iteration until end
while (remainingSize > 0) {
if (remainingSize < chunkSize && remainingSize % 16 != 0) {
currentSize = (remainingSize > 16) ? (remainingSize - (remainingSize % 16)) : remainingSize;
} else {
currentSize = (remainingSize > chunkSize) ? chunkSize : remainingSize;
}
resp = writeNvs(writeAddress, currentSize, bufferPtr);
writeAddress += currentSize;
bufferPtr += currentSize;
remainingSize -= currentSize;
if (0 != resp) {
return resp;
}
}
if (remainingSize > 0) {
resp = writeNvs(writeAddress, remainingSize, bufferPtr);
if (0 != resp) {
return resp;
}
}
C40Status = C40_Ip_SetLock(FLS_SECTOR_ADDR,FLS_MASTER_ID);
return 0;
}
static uint8_t writeNvs(size_t ulAddress, size_t ulSize, void *pvSource) {
// WRITE DATA ONLY WORKS WHEN I DEBUG STEP BY STEP
C40_Ip_MainInterfaceWrite(ulAddress, ulSize, pvSource, FLS_MASTER_ID);
do {
C40Status = C40_Ip_MainInterfaceWriteStatus();
} while (STATUS_C40_IP_BUSY == C40Status);
Nvs_Assert(STATUS_C40_IP_SUCCESS == C40Status);
// Compare the data in memory with source
// I ONLY GET failCounter = 0 IF I USE THE DEBUG STEP BY STEP
C40Status = C40_Ip_Compare(ulAddress, ulSize, pvSource);
if(STATUS_C40_IP_SUCCESS != C40Status){
failCounter++;
}
return Nvs_Assert(STATUS_C40_IP_SUCCESS == C40Status);
}