Hello!
I have an issue with S32K312 and C40 Ip when trying to erase parts of the data flash after reading data flash memory. I attached a zip with pictures of the issue. Similar to https://community.nxp.com/t5/S32K/S32K3-Read-Write-Flash-with-C40-Driver/m-p/1380459#M13058
If we start off by doing a erase, write, and read of data flash everything works ok, we can also see in Memory Viewer that the memory updates correctly. (See pictures 1_erase_ok.png, 2_write_ok.png & 3_read_ok.png).
However, if we do a new erase and write after the read operation nothing happens, Memory Viewer doesnt update and if we try to read the memory again we get same results as before. (See picture 4_erase_not_ok.png, 5_write_not_ok.png).
And after a reset of the MCU, data flash is updated to the correct value (See picture 6_memory_update_after_reset.png)
I found a similar issue where they said it was the old version of the SDK that caused it. I'm using S32K312, SDK RTM 3.0.0 together with a PEMicro multilink FX debugger.
Solved! Go to Solution.
Hello @rakketi,
This is because of the cache.
The cache can be either invalidated.
Call this API Cache_Ip_InvalidateByAddr(CACHE_IP_DATA, TargetAddress, 32) after programming or before reading the data back.
Or disable the cache in MPU setting.
In the "system.c" function "SystemInit", change rasr[2]=0x060B002BUL to rasr[2]=0x0608002BUL.
This sets the whole Flash as non-cacheable.
Regards,
Daniel
I also had to change rasr[3] for DFLASH
I can confirm that it works. Thanks for the help Daniel.
Hello @rakketi,
This is because of the cache.
The cache can be either invalidated.
Call this API Cache_Ip_InvalidateByAddr(CACHE_IP_DATA, TargetAddress, 32) after programming or before reading the data back.
Or disable the cache in MPU setting.
In the "system.c" function "SystemInit", change rasr[2]=0x060B002BUL to rasr[2]=0x0608002BUL.
This sets the whole Flash as non-cacheable.
Regards,
Daniel