SAM D21 в Arduino Zero имеет аппаратную битовую защиту, которая предназначена для предотвращения записи/стирания байтов памяти флеш во время нормальной работы микроконтроллера. Это необходимо для обеспечения безопасности кода.
Для активации бита защиты вам потребуется внести изменения в файл установки "variant.cpp" в директории "variants/arduino_zero" в папке установки Arduino IDE.
Откройте файл "variant.cpp" и найдите функцию "pinPeripheral()". В этой функции вам нужно найти код, который настраивает Flash Controller (NVMCTRL) и задает бит защиты (RWP).
Сначала вам понадобится найти строку, где получается указатель на структуру NVMCTRL, примерно так:
NvmCtrl* const nvm = NVMCTRL;
Затем нужно найти строку, где используется метод "ctrla":
nvm->CTRLA.bit.WMODE = NVMCTRL_CTRLA_WMODE_MAN;
После этого вам потребуется найти строку, которая устанавливает бит защиты (RWP). Обычно это строка с комментарием, содержащим слово "bitplane".
// ...bitplane_write_clear(&NVMCTRL->CTRLB, NVMCTRL_CTRLB_RWS(2));
Вы можете удалить комментарий и раскомментировать эту строку, чтобы установить бит защиты:
bitplane_write_clear(&NVMCTRL->CTRLB, NVMCTRL_CTRLB_RWS(2));
Сохраните изменения в файле "variant.cpp" и перезагрузите Arduino IDE. Теперь бит защиты будет активирован и предотвратит запись/стирание байтов памяти флеш.
Обратите внимание, что активация бита защиты может ограничить доступ к некоторым функциям записи и стирания памяти флеш. Поэтому, убедитесь, что вы понимаете, какие именно ограничения будут применены, прежде чем активировать бит защиты.