Archives August 2017

Программирование и отладка NRF52 под ST-LinkV2

  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, ставим зависимости и инструменты, необходимые для сборки. Точный список уже не помню, но как минимум это я ставил:

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

  Найти их все можно в папке msys64mingw64bin

  И казалось бы всё, готово, можно пользоваться. Да, но почти ) 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, на нормальную из архива MinGW64dlllibusb-1.0.dll и всё, программатор открывается.

  Пример *.cfg файла для OpenOCD

source [find interface/stlink-v2.cfg] 
transport select "hla_swd"
source [find target/nrf52.cfg]
0
0

Новая железка

  Прикупил вот в Китае для всяческих экспериментов поворотную платформу с 2 степенями свободы. https://ru.aliexpress.com/item/Official-smarian-2-DOF-All-Metal-Rotation-Base-Platform-for-Robot-Arm-with-2pcs-High-Torque/32793398433.html Интересная и относительно недорогая штука.

Основной подшипник не люфтит (по ощущениям, замерить нечем), редукторы сервоприводов сделаны из металлических шестерёнок (выбрал по ссылке самые простые движки), вся конструкция металлическая (кроме нижней здоровой площадки, к счастью).

Занятно, что ни у одного продавца на aliexpress, а также на сайте производителя http://makerobotix.com  я так и не нашёл мануала по сборке и в итоге потратил час на скручивание всех деталей вместе.

Болтов и гаек продавец не пожалел, видимо в курсе канона, что после сборки просто обязаны остаться “лишние детали” )

Два диска хватаются за внутреннее кольцо подшипника с двух сторон и два металлических кольца за внешнюю оболочку.

При сборке важно не забывать, что у подобных сервоприводов угол поворота всего 180 градусов! Потому надо прикручивать кронштейн так, чтоб он мог повернуться в любую ему доступную позицию. Для этого можно сначала аккуратно провернуть вал движка (не слишком насилуя редуктор) и нащупать где у него граница поворота.

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

Ну и “лишние детали” после сборки:

0
0