Классическая ситуация. Записали через интерфейс SWD прошивку и... ничего не происходит. HeartBeat LED не мигает. Логи в UART(е) не появляются. CLI не отвечает. Вероятно прошивка где-то свалилась в HardFault_Handler(). Что же делать? Как понять где ошибка? Можно конечно включать и исключать перед сборкой куски программы и прошивать пока не выясним ту проблемную функцию. Но это может занять очень много времени. Целый день.
Тут выручит пошаговая GDB отладка. А для этого надо настроить GDB клиент и GDB сервер.
Про пошаговую отладку в консоли у меня есть отдельный пост. https://habr.com/ru/post/694708/
Однако пошаговая отладка в консоли может показаться утомительной. Куда проще пошагово отлаживаться прямо в текстовом редакторе, например в Eclipse.
Что надо из оборудования?
оборудование | Назначение |
кабель USB-A USB micro | Для подключения программатора к NetTop PC |
отладочная плата (например nrf5340-DK) | для пошаговой отладки прошивки в микроконтроллере |
программатор J-Link | для пошаговой отладки микроконтроллера |
LapTop | для запуска утилит |
Что надо из софтвера?
Утилита | Назначение |
JVM | Виртуальная машина для прокрутки текстового редактора eclipse |
JLinkGDBServer.exe | GDB сервер |
nrfjprog.exe | утилита, чтобы прошить микроконтроллер семейства nrf |
arm-none-eabi-gdb.exe | GDB клиент |
eclipse.exe | Текстовый редактор |
Фаза 1 Установить GNU ToolChain для Arm Embedded
Подробнее про это тут https://habr.com/ru/post/673522/
Надо прописать в переменную Path путь к ARM ToolChain(у): препроцессору, компилятору, асcембреру, компоновщику, binutils(ам), отладчику.
C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin
Фаза 1 Запустить GDB Сервер Отладки
В качестве сервера отладки можно использовать утилиту JLinkGDBServer.exe.
C:\Program Files (x86)\SEGGER\JLink\JLinkGDBServer.exe
Можно даже накропать простенький скрипт, чтобы не настраивать каждый раз мышкой настройки JLink GDB Server(а)
echo off
cls
set GDBServerOpt = -select USB -device nRF5340_xxAA_APP -endian little -if SWD -speed 400 -ir -LocalhostOnly -logtofile -log "C:\projects\code_base_workspace\code_base_firmware\tool\GdbServerLog.txt"
set GDBServerDir="C:\Program Files (x86)\SEGGER\JLink\"
set GDBServerPath=%GDBServerDir%JLinkGDBServer.exe"
cd %GDBServerDir%
call %GDBServerPath% %GDBServerOpt%
В настройках JLink GDB Server(а) надо проверить интерфейс соединения с платой. В данной плате это USB. Проверить интерфейс соединения программатора и целевого микроконтроллера. В данной схемотехнике это SWD. Проверить, что выбрано нужное процессорное ядро. В данном случае это nRF5340_xxAA_APP. Если всё верно, то нажимаем ок.
JLink GDB Server переходит в режим ожидания подключения к GDB клиенту.
Вот примерный лог успешного подключения после запуска GDB клиента.
Фаза 3. Настройка GDB Клиента
Надо открыть меню Debug Configuration, создать конфигурацию и указывает путь к *.elf файлу
На вкладке Debugger указать путь к GDB клиенту arm-none-eabi-gdb.exe.
Можно прописать полный путь к GDB клиенту
C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin\arm-none-eabi-gdb.exe
Настроить вкладку Startup.
ставим, что надо остановится на функции main
Настроить вкладку Common, как показано на скриншоте
Теперь достаточно нажать кнопку Debug и можно производить пошаговую отладку
получилась такая схема взаимодействия утилит
Вывод
Пошаговая отладка поможет вам отладить UART. Далее вы запускаете CLI поверх UART и можно будет свободно отлаживаться только через CLI.
Акроним | Расшифровка |
CLI | Command-line interface |
UART | universal asynchronous receiver-transmitter |
LED | light-emitting diode |
RISC | reduced instruction set computer |
JVM | Java virtual machine |
PC | personal computer |
UNIX | UNiplexed Information Computing System |
ARM | Advanced RISC Machine |
SWD | Serial Wire Debug |
USB | Universal Serial Bus |
GNU | GNU's Not UNIX |
GDB | GNU Debugger |
Ссылки
https://eclipse-embed-cdt.github.io/debug/jlink/
https://mcuoneclipse.com/2019/09/22/eclipse-jtag-debugging-the-esp32-with-a-segger-j-link/
https://bitknitting.wordpress.com/2015/07/11/using-eclipse-to-program-the-nrf51822/
https://karibe.co.ke/2014/03/debugging-arm-freescale-microcontrollers-with-j-link-gdb-server-and-gnu-arm-toolchain-gdb-with-semihosting-in-linux/
https://habr.com/ru/post/673522/
https://habr.com/ru/post/694708/
https://habr.com/ru/post/694408/
https://habr.com/ru/post/681280/