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 сорцов, однако порядок строк инклудов изменён и получается странный конфликт.
Следующий шаг:
И казалось бы всё, готово, можно пользоваться. Да, но почти ) OpenOCD запускается и прекрасно себя чувствует, однако при попытке отладки любого st-link устройства каждый раз получаю ошибку:
Заменяем корявую 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, ставим зависимости и инструменты, необходимые для сборки. Точный список уже не помню, но как минимум это я ставил:
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
Клонируем репозиторий:
git clone git://git.code.sf.net/p/openocd/code openocd-code cd openocd-code
Теперь необходимо применить патч, добавляющий поддержку NRF52. Однако я бы порекомендовал файл src/flash/nor/Makefile.am предварительно забэкапить )
git pull http://openocd.zylin.com/openocd refs/changes/15/3215/2
Патч приводит к конфликтам в двух файлах, конфликты можно просто поправить вручную. Суть конфликта - в каждом из файлов добавляется инклуд NRF52 сорцов, однако порядок строк инклудов изменён и получается странный конфликт.
gedit src/flash/nor/drivers.c gedit src/flash/nor/Makefile.amВо втором файле ещё и формат путей инклудов поменялся, потому там вообще ад, и как раз для этого я выше рекомендовал src/flash/nor/Makefile.am забэкапить, после чего его восстановить и вручную прописать инклуд NRF52. То есть к NOR_DRIVERS добавить файл %D%/nrf52.c \ и это всё, что там надо поменять.
Следующий шаг:
./bootstrapПосле чего настраиваем сборку:
./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И собираем проект:
make make installГотово, OpenOCD собран. Теперь, для запуска его без предварительного добавления mingw директорий в PATH, необходимо рядом с OpenOCD.exe положить dll, от которых он зависит:
libftdi1.dll libhidapi-0.dll libusb-0-1-4.dll libusb-1.0.dllНайти их все можно в папке msys64\mingw64\bin
И казалось бы всё, готово, можно пользоваться. Да, но почти ) OpenOCD запускается и прекрасно себя чувствует, однако при попытке отладки любого st-link устройства каждый раз получаю ошибку:
stlink_usb_open(): stlink_usb_open stlink_usb_open(): transport: 1 vid: 0x0483 pid: 0x374b serial: stlink_usb_open(): open failedДолго я думал что не так! И сорцы 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
source [find interface/stlink-v2.cfg] transport select "hla_swd" source [find target/nrf52.cfg]
Комментариев нет:
Отправить комментарий