cortex-m0+ ATSAMC21 nvm плохо читается после инициализации или стирания
После стирания, когда я читаю один и тот же адрес, например значение 0x100 (строка), 4-е первые значения - 0x00000000 или иногда 0x1fffffff вместо 0xffffffff. Я должен прочитать эти 4-е слово еще раз, чтобы иметь хорошее значение.
Зачем?
Вот моя прошивка nvm init
struct nvm_config nvm_cfg;
nvm_get_config_defaults(&nvm_cfg);
nvm_cfg.sleep_power_mode = NVMCTRL_CTRLB_SLEEPPRM_WAKEUPINSTANT_Val;
nvm_cfg.manual_page_write=false;
nvm_cfg.wait_states=0x8;
nvm_cfg.cache_readmode = NVM_CACHE_READMODE_DETERMINISTIC;
nvm_set_config(&nvm_cfg);
struct nvm_fusebits nvm_fuse;
nvm_get_fuses(&nvm_fuse);
if(nvm_fuse.wdt_always_on==true)
{
nvm_fuse.wdt_always_on=false;
nvm_fuse.wdt_enable=false;
nvm_set_fuses(&nvm_fuse);
}
Я попытался установить значение по умолчанию init:
static inline void nvm_get_config_defaults(
struct nvm_config *const config)
{
/* Sanity check the parameters */
Assert(config);
/* Write the default configuration for the NVM configuration */
config->sleep_power_mode = NVM_SLEEP_POWER_MODE_WAKEONACCESS;
config->manual_page_write = true;
config->wait_states = NVMCTRL->CTRLB.bit.RWS;
config->disable_cache = false;
#if (SAMC20) || (SAMC21)
config->disable_rww_cache = false; //false=> disable_cache=2 et a 2 ou 3 bug errata
#endif
config->cache_readmode = NVM_CACHE_READMODE_NO_MISS_PENALTY;
}
Есть ли способ обойти это, или есть лучший конфиг? Спасибо!