The user manual states (UM10912 rev 2.4, page 126):
8 system clocks flash access time (for system clock rates up to 168 MHz and for system clock rates 180 MHz < CCLK <= 220 MHz).
9 system clocks flash access time (for system clock rates up to 180 MHz).
At 220 MHz the system clock/access time can be lower when compared to 180 MHz because the power library optimizes the on-chip voltage regulator.
Running with 9 cycles at 220 MHz works without issues, but when decreasing to 8 cycles I have problems with occasional garbage data when reading from flash resulting in hard-to-debug crashes. I've tried both using a 25 MHz external oscillator and the FRO 12 Mhz and the issue remains. I'm using the MCUxpresso config tool to generate the clock setup code.
That is strange since in the BOARD_BootClockPLL220M this is set automatically depending on the frequency used, I did some test with this and could reproduce this behavior. Can you let me know which SDK versión are you using and how are you modifying this register?
I was using 2.7.0 before and it was working. When I upgraded to 2.8.0 I started getting weird crashes. After some debugging, I noticed that CLOCK_SetFLASHAccessCyclesForFreq() had been updated.
In 2.7.0 it calls CLOCK_SetFLASHAccessCycles(kCLOCK_Flash9Cycle) at 220 MHz, while in 2.8.0 it calls CLOCK_SetFLASHAccessCycles(kCLOCK_Flash8Cycle).
By modifying BOARD_BootClockPLL220M() to call CLOCK_SetFLASHAccessCycles() instead of CLOCK_SetFLASHAccessCyclesForFreq() I force it to use kCLOCK_Flash9Cycle which solves the problem on 2.8.0.