Проблемы загрузки нулевого загрузчика arduino в atsamd21g18a

Я пытаюсь загрузить загрузчик arduino zero bootloader (https://github.com/arduino/ArduinoCore-samd/tree/master/bootloaders/zero) к плате прорыва atsamd21g18, которую я сделал. Прорыв имеет генератор 32 кГц, подключенный к контактам 1 и 2 (с колпачками 22 Пф). Я уже дважды успешно делал это с двумя другими atsamd21g18, Atmel Studio и Atmel ICE в качестве программатора. Вот шаги, которым я следовал в первые два раза:

  1. Создайте новый исполняемый проект GCC C в Atmel Studio и выберите ATSAMD21G18A в качестве устройства
  2. Перейдите в раздел Инструменты->Программирование устройств, выберите Atmel-ICE в качестве инструмента и SWD в качестве интерфейса>
  3. Перейдите в раздел Предохранители, установите значение USER_WORD_0.NVMCTRL_BOOTPROT равным 0 байтам и нажмите кнопку Program
  4. Перейдите в раздел Memories, выберите файл ArduinoCore-samd-master\bootloaders\zero\samd21_sam_ba.bin в разделе Flash option и нажмите Program
  5. Вернитесь к предохранителям, установите USER_WORD_0.NVMCTRL_BOOTPRT на 8192 байта и нажмите Program

Затем я перешел в Arduino IDE и смог загрузить любые скетчи с Arduino Zero (programming port), выбранным в качестве платы, и Atmel SAM-ICE в качестве программатора.

Я проделал те же самые шаги с третьим чипом samd21. В конце концов, все команды пройдут. Примерно в 30% случаев, когда я нажимаю кнопку "Программа" (на шагах 2-5) Я получу одну из двух ошибок:

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

или

Устройство стирания вышло из строя.

Однако, если я просто повторю попытку нажатия кнопки Program, она не выдаст никаких ошибок.

После выполнения этих шагов без каких-либо ошибок в Atmel Studio я перехожу в Arduino IDE и пытаюсь загрузить базовый скетч blink (с тем же выбором платы и программатора, что и раньше), и загрузка проходит (там написано Done Uploading). Однако код не выполняется. Вот код, который я пытаюсь загрузить:

const int ledPin =  6;

void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

Это вывод, который я получаю после загрузки кода:

Sketch uses 11444 bytes (4%) of program storage space. Maximum is 262144 bytes.
Global variables use 2188 bytes (6%) of dynamic memory, leaving 30580 bytes for local variables. Maximum is 32768 bytes.
Open On-Chip Debugger 0.10.0+dev-gf0767a31 (2018-06-11-13:36)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
debug_level: 0
none separate
adapter speed: 400 kHz
cortex_m reset_config sysresetreq
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x0000060c msp: 0x20007ffc
** Programming Started **
auto erase enabled
wrote 11520 bytes from file C:\Users\Michaela\AppData\Local\Temp\arduino_build_379254/blinky_samd21.ino.bin in 1.021138s (11.017 KiB/s)
** Programming Finished **
** Verify Started **
target halted due to debug-request, current mode: Thread 
xPSR: 0x21000000 pc: 0x00000694 msp: 0x20007fdc
Error: error executing cortex_m crc algorithm
verified 11444 bytes in 0.999887s (11.177 KiB/s)
** Verified OK **
** Resetting Target **
shutdown command invoked

Я попытался переключить генератор и светодиод, загрузить загрузчик и скетч arduino с генератором и без него, просто нажав команду Burn Bootloader из Arduino IDE и даже попытался использовать openocd непосредственно в командной строке.

Я не считаю, что это ошибка с конкретным чипом samd21, который я использую, потому что перед тем, как я начал возиться с загрузчиком, я загрузил скетч C из Atmel Studio, чтобы мигнуть светодиодом, и он работал нормально.

Если у кого-то есть какое-то представление о том, что может быть не так, я бы очень это оценил!

, 👍2

Обсуждение

находится ли светодиод на правильном выводе?, @Juraj

Я верю в это. Он находится на выводе 29 samd, который соответствует контакту 6 в arduino., @Michaela