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;
}

Есть ли способ обойти это, или есть лучший конфиг? Спасибо!

0 ответов

Другие вопросы по тегам