NRF52 - ARM v7 микроконтроллеры от Nordic Semiconductor со встроенным радио (bluetooth, кастомные протоколы, 2.4 GHz).
Официально программирование/отладка поддерживается хорошо лишь с J-Link, но он стоит в районе 500$, а прям ощутимого профита от его использования я особо не заметил ) Так зачем платить больше? По крайней мере для домашних проектов...
На текущий момент в OpenOCD 0.10 нет драйвера флеш-памяти для NRF52, потому "из коробки" будет доступна только отладка, а стирание/прошивание чипа - нет.
К счастью имеется уже готовый патч для OpenOCD, а так же инструкция как что собирать, которую я нашёл вот в этом обсуждении.
На всякий пожарный повторю здесь инструкции + дополню своими:
Для начала при сборке в Windows придётся поставить кросс компилер, например, из msys или cygwin. Я предпочитаю mingw-w64 для x64 системы из msys, скачать можно тут.
Запускаем mingw64.exe, ставим зависимости и инструменты, необходимые для сборки. Точный список уже не помню, но как минимум это я ставил:
Клонируем репозиторий:
Теперь необходимо применить патч, добавляющий поддержку NRF52. Однако я бы порекомендовал файл src/flash/nor/Makefile.am предварительно забэкапить )
Патч приводит к конфликтам в двух файлах, конфликты можно просто поправить вручную. Суть конфликта - в каждом из файлов добавляется инклуд NRF52 сорцов, однако порядок строк инклудов изменён и получается странный конфликт.
Во втором файле ещё и формат путей инклудов поменялся, потому там вообще ад, и как раз для этого я выше рекомендовал src/flash/nor/Makefile.am забэкапить, после чего его восстановить и вручную прописать инклуд NRF52. То есть к NOR_DRIVERS добавить файл %D%/nrf52.c \ и это всё, что там надо поменять.
Следующий шаг:
После чего настраиваем сборку:
И собираем проект:
Готово, OpenOCD собран. Теперь, для запуска его без предварительного добавления mingw директорий в PATH, необходимо рядом с OpenOCD.exe положить dll, от которых он зависит:
Найти их все можно в папке msys64\mingw64\bin
И казалось бы всё, готово, можно пользоваться. Да, но почти ) OpenOCD запускается и прекрасно себя чувствует, однако при попытке отладки любого st-link устройства каждый раз получаю ошибку:
Долго я думал что не так! И сорцы OpenOCD пытался править и очередные баги в исходниках libusb искать, но решил в итоге проблему намного проще )) Качаем бинарники libusb https://sourceforge.net/projects/libusb/files/libusb-1.0/
Заменяем корявую libusb-1.0.dll, взятую из mingw64, на нормальную из архива MinGW64\dll\libusb-1.0.dll и всё, программатор открывается.
Пример *.cfg файла для OpenOCD
Официально программирование/отладка поддерживается хорошо лишь с J-Link, но он стоит в районе 500$, а прям ощутимого профита от его использования я особо не заметил ) Так зачем платить больше? По крайней мере для домашних проектов...
На текущий момент в OpenOCD 0.10 нет драйвера флеш-памяти для NRF52, потому "из коробки" будет доступна только отладка, а стирание/прошивание чипа - нет.
К счастью имеется уже готовый патч для OpenOCD, а так же инструкция как что собирать, которую я нашёл вот в этом обсуждении.
На всякий пожарный повторю здесь инструкции + дополню своими:
Для начала при сборке в Windows придётся поставить кросс компилер, например, из msys или cygwin. Я предпочитаю mingw-w64 для x64 системы из msys, скачать можно тут.
Запускаем mingw64.exe, ставим зависимости и инструменты, необходимые для сборки. Точный список уже не помню, но как минимум это я ставил:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | pacman -S git pacman -S curl pacman -S make pacman -S automake pacman -S autoconf pacman -S libtool pacman -S pkg-config pacman -S texinfo pacman -S mingw-w64-x86_64-toolchain pacman -S mingw64/mingw-w64-x86_64-dlfcn pacman -S mingw64/mingw-w64-x86_64-libusb pacman -S mingw64/mingw-w64-x86_64-libusb-usbdk pacman -S mingw64/mingw-w64-x86_64-hidapi pacman -S mingw64/mingw-w64-x86_64-libftdi |
Клонируем репозиторий:
1 2 | git clone git: //git.code.sf.net/p/openocd/code openocd-code cd openocd-code |
Теперь необходимо применить патч, добавляющий поддержку NRF52. Однако я бы порекомендовал файл src/flash/nor/Makefile.am предварительно забэкапить )
1 | git pull http: //openocd.zylin.com/openocd refs/changes/15/3215/2 |
Патч приводит к конфликтам в двух файлах, конфликты можно просто поправить вручную. Суть конфликта - в каждом из файлов добавляется инклуд NRF52 сорцов, однако порядок строк инклудов изменён и получается странный конфликт.
1 2 | gedit src/flash/nor/drivers.c gedit src/flash/nor/Makefile.am |
Следующий шаг:
1 | ./bootstrap |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ./configure \ --prefix=/Your-path/openocd-git_install \ //Заменить на свой путь утановки --enable-aice \ --enable-amtjtagaccel \ --enable-armjtagew \ --enable-cmsis-dap \ --enable-dummy \ --enable-ftdi \ --enable-gw16012 \ --enable-jlink \ --enable-jtag_vpi \ --enable-opendous \ --enable-openjtag_ftdi \ --enable-osbdm \ --enable-legacy-ft2232_libftdi \ --enable-parport \ --disable-parport-ppdev \ --enable-parport-giveio \ --enable-presto_libftdi \ --enable-remote-bitbang \ --enable-rlink \ --enable-stlink \ --enable-ti-icdi \ --enable-ulink \ --enable-usb-blaster-2 \ --enable-usb_blaster_libftdi \ --enable-usbprog \ --enable-vsllink |
1 2 | make make install |
1 2 3 4 | libftdi1.dll libhidapi-0.dll libusb-0-1-4.dll libusb-1.0.dll |
И казалось бы всё, готово, можно пользоваться. Да, но почти ) OpenOCD запускается и прекрасно себя чувствует, однако при попытке отладки любого st-link устройства каждый раз получаю ошибку:
1 2 3 | stlink_usb_open(): stlink_usb_open stlink_usb_open(): transport: 1 vid: 0x0483 pid: 0x374b serial: stlink_usb_open(): open failed |
1 |
Заменяем корявую libusb-1.0.dll, взятую из mingw64, на нормальную из архива MinGW64\dll\libusb-1.0.dll и всё, программатор открывается.
Пример *.cfg файла для OpenOCD
1 2 3 | source [find interface/stlink-v2.cfg] transport select "hla_swd" source [find target/nrf52.cfg] |