diff --git a/cpu/sam0_common/periph/flashpage.c b/cpu/sam0_common/periph/flashpage.c index 3481229870..ba49aa3d1d 100644 --- a/cpu/sam0_common/periph/flashpage.c +++ b/cpu/sam0_common/periph/flashpage.c @@ -73,7 +73,12 @@ static unsigned _unlock(void) PAC1->WPCLR.reg = PAC1_WPROT_DEFAULT_VAL; #endif + /* NVM reads could be corrupted when mixing NVM reads with Page Buffer writes. */ return irq_disable(); +#ifdef NVMCTRL_CTRLA_CACHEDIS1 + _NVMCTRL->CTRLA.reg |= NVMCTRL_CTRLA_CACHEDIS0 + | NVMCTRL_CTRLA_CACHEDIS1; +#endif } static void _lock(unsigned state) @@ -87,6 +92,11 @@ static void _lock(unsigned state) PAC1->WPSET.reg = PAC1_WPROT_DEFAULT_VAL; #endif +#ifdef NVMCTRL_CTRLA_CACHEDIS1 + _NVMCTRL->CTRLA.reg &= ~NVMCTRL_CTRLA_CACHEDIS0 + & ~NVMCTRL_CTRLA_CACHEDIS1; +#endif + /* cached flash contents may have changed - invalidate cache */ #ifdef CMCC CMCC->MAINT0.reg |= CMCC_MAINT0_INVALL;