Проблемы загрузки нулевого загрузчика 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 в качестве программатора. Вот шаги, которым я следовал в первые два раза:
- Создайте новый исполняемый проект GCC C в Atmel Studio и выберите ATSAMD21G18A в качестве устройства
- Перейдите в раздел Инструменты->Программирование устройств, выберите Atmel-ICE в качестве инструмента и SWD в качестве интерфейса>
- Перейдите в раздел Предохранители, установите значение USER_WORD_0.NVMCTRL_BOOTPROT равным 0 байтам и нажмите кнопку Program
- Перейдите в раздел Memories, выберите файл ArduinoCore-samd-master\bootloaders\zero\samd21_sam_ba.bin в разделе Flash option и нажмите Program
- Вернитесь к предохранителям, установите 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, чтобы мигнуть светодиодом, и он работал нормально.
Если у кого-то есть какое-то представление о том, что может быть не так, я бы очень это оценил!
@Michaela, 👍2
Обсуждение0
- Высокочастотный PWM на Adafruit Feather M0
- Несколько записей variant.cpp для одного и того же физического контакта
- Сигнализация Arduino Zero RTC не работает в цикле
- Связывание загрузчика Arduino В Atmel Studio
- Достижение низкой мощности с Seeeduino Cortex-M0+ работает от батареи 12V
- Принудительный запуск загрузчика через программу
- Проблемы с подключением к точке доступа WiFi101
- Перевод платы на базе samd в спящий режим
находится ли светодиод на правильном выводе?, @Juraj
Я верю в это. Он находится на выводе 29 samd, который соответствует контакту 6 в arduino., @Michaela