SAMD21 Arduino Zero — как активировать бит защиты?

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. Теперь бит защиты будет активирован и предотвратит запись/стирание байтов памяти флеш.

Обратите внимание, что активация бита защиты может ограничить доступ к некоторым функциям записи и стирания памяти флеш. Поэтому, убедитесь, что вы понимаете, какие именно ограничения будут применены, прежде чем активировать бит защиты.