В первой части публикации “Быстрый старт с MIMXRT1010-EVK от NXP” мы установили инструментарий от NXP, научились собирать примеры и загружать прошивку в микроконтроллер.

Прежде чем продолжить разбираться с утилитой MCUXpresso Config Tools я бы хотел вернуться к прошлой части, где я написал следующее:

В скриптах openocd я не обнаружил необходимых для внутрисхемной отладки MIMXRT1010-EVK файлов. Так что единственным бесплатным способом внутрисхемной отладки с помощью встроенного Free-Link адаптера для меня остается MCUXPresso IDE.

За время между написанием первой и второй части статьи я научился отлаживать плату MIMXRT1010-EVK с помощью Free-Link и OpenOCD.

В скриптах openocd действительно нет конфигурационного файла для отладки платы MIMXRT1010-EVK, но благодаря вот этому посту на форуме сообщества NXP такой скрипт у меня появился.

Хотя у автора скрипта отладка не заработала и он в своем сообщении нарекал на возможные ошибки в его скрипте, скрипт оказался полностью рабочим, о чем я отписался в посте.


Отладка с помощью DAP-Link + openocd

Прежде всего необходимо установить самую свежую версию openocd. Процесс сборки девелоперской версии openocd я описал в статье Программирование STM32H747I-DISCO из командной строки Linux/MacOS в разделе “Внутрисхемный отладчик”.

Нам необходимо будет заново сконфигурировать и собрать openocd, чтобы добавить поддержку CMSIS-DAP отладчика.

Прежде чем это сделать необходимо также установить HIDAPI:


$ git clone git://github.com/Dashlane/hidapi.git
$ cd hidapi
$ ./bootstrap
$ ./configure --enable-static --disable-shared
$ make && sudo make install

Возвращаемся к репозиторию openocd, если вы уже его клонировали , то просто войдите в каталог openocd и выполните команду


$ git pull

Иначе:


$ git clone git://git.code.sf.net/p/openocd/code openocd

Далее все почти так-же как описано в моей статье за исключением еще одной дополнительной опции —enable-cmsis-dap:


$ cd openocd
$ ./bootstrap
$ ./configure --enable-stlink --enable-cmsis-dap
$ make && sudo make install

Проверяем версию openocd :


$ openocd --version
Open On-Chip Debugger 0.10.0+dev-01423-g3ffa14b04-dirty (2020-10-13-12:45)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html

Настало время добавить openocd скрипт для платы MIMXRT1010-EVK


$ sudo gedit /usr/local/share/openocd/scripts/board/nxp_mimxrt1010_evk.cfg

Теперь мы можем подключить отладочную плату к USB порту компьютера и запустить openocd :


$ openocd -f interface/cmsis-dap.cfg -f board/nxp_mimxrt1010_evk.cfg
Open On-Chip Debugger 0.10.0+dev-01423-g3ffa14b04-dirty (2020-10-13-12:45)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "swd". To override use 'transport select '.
Warn : Transport "swd" was already selected
adapter speed: 1000 kHz


Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: FW Version = 1.10
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bd11477
Info : mimxrt1011.cpu: hardware has 8 breakpoints, 4 watchpoints
Info : starting gdb server for mimxrt1011.cpu on 3333
Info : Listening on port 3333 for gdb connections

Сначала я пробовал загрузить образ в QSPI Flash и выполнить отладку оттуда, но когда увидел сообщения об ошибках записи в память, то вспомнил о том, что прошивка храниться во внешней QSPI Flash в зашифрованном виде.

Для отладки программ мы можем использовать встроенное ОЗУ (128 кБайт RAM).

Открывает новое окно терминала и запускаем в нем arm-none-eabi-gdb :


$ cd ~/SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010/demo_apps/led_blinky/armgcc/debug

Если путь не найден — необходимо сначала собрать пример demo_apps/led_blinky.


$ arm-none-eabi-gdb iled_blinky.elf

GNU gdb (GNU Arm Embedded Toolchain 9-2020-q2-update) 8.3.1.20191211-git
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from iled_blinky.elf...
(gdb) target extended-remote localhost:3333
main () at /home/petro/MCUXpressoSDK/SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010/demo_apps/led_blinky/led_blinky.c:78
78 GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
(gdb) monitor reset halt
SWD DPIDR 0x0bd11477
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x002002c0 msp: 0x20201000
(gdb) load
Loading section .interrupts, size 0x400 lma 0x0
Loading section .text, size 0x3b90 lma 0x400
Loading section .ARM, size 0x8 lma 0x3f90
Loading section .init_array, size 0x4 lma 0x3f98
Loading section .fini_array, size 0x4 lma 0x3f9c
Loading section .data, size 0x64 lma 0x3fa0
Start address 0x4bc, load size 16388
Transfer rate: 23 KB/sec, 2731 bytes/write.
(gdb) b led_blinky.c:73
Breakpoint 1 at 0xa98: file /home/petro/MCUXpressoSDK/SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010/demo_apps/led_blinky/led_blinky.c, line 73.
(gdb) b led_blinky.c:78
Breakpoint 2 at 0xaaa: file /home/petro/MCUXpressoSDK/SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010/demo_apps/led_blinky/led_blinky.c, line 78.
(gdb) c
Continuing.


Breakpoint 2, main ()
at /home/petro/MCUXpressoSDK/SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010/demo_apps/led_blinky/led_blinky.c:78
78 GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
(gdb)

Подведем итоги. Итак, мы можем использовать openocd для внутрисхемной отладки исходного кода, написанного для MIMXRT1010-EVK. Код загружается в RAM , таким образом не уменьшается ресурс памяти QSPI Flash, однако размер отлаживаемого кода ограничен размером RAM в 128 кБайт.

Если ограничение в 128 кБайт для вас является проблемой, то я подскажу как избежать ее в больших проектах. Исходный код рабочего пространства необходимо разбить на библиотеки, собираемые как статические архивы (libname.a), каждая библиотека должна иметь свой набор API функций или классов(С++). Для тестирования API необходимо написать свои тесты (или Unit тесты) в виде прошивки, содержащей только вызовы API библиотеки и слинкованную библиотеку. Объем такой тестовой прошивки вряд ли сможет превысить 128 кБайт.


MCUXpresso Config tools

Для генерации кода инициализации периферии используется утилита с графическим интерфейсом MCUXpresso Config Tools

Если вы работаете с MCUXpresso IDE, но ничего дополнительно устанавливать не придется, поскольку инструменты конфигурации встроены в эту среду разработки. Иначе придется установить утилиту, загрузив ее по ссылке, указанной выше.

В отличии от STM32CubeMX конфигуратор от NXP не смешивает автоматически сгенерированный код с пользовательским. Для генерации кода конфигуратор создает подкаталоги внутри проекта. Такой подход лично мне нравиться больше, поскольку во время повторной генерации меньше шансов затереть пользовательский код, забыв поместить его в соответствующую секцию, как это может запросто случиться при работе с STM32CubeMX.

Все настройки конфигуратора хранятся в XML файле с расширением .mex внутри проекта.

Я решил создать собственные шаблоны проектов, один под названием standalone_template без использования RTOS и второй шаблон под названием freertos_template, использующий операционную систему реального времени FreeRTOS.

Мною немного был переработан файл CMakeLists.txt с целью его упрощения, поскольку существующие файлы CMakeLists.txt из MCUXpresso SDK для GNU ARM Toolchain очень громоздки и неудобны для редактирования.

Поскольку опции компилятора и ассемблера практически неизменны в различных проектах, то я их попросту вынес в отдельные файлы, которые включаются в основной файл CMakeLists.txt с помощью include. Также я создал подкаталог build внутри каталога armgcc , чтобы не захламлять временными файлами основную директорию.

Загрузить созданные мною шаблоны вы можете с моего git репозитория.

Первый раз необходимо клонировать репозиторий:


$ git clone https://github.com/PetroShevchenko/cxemotexnika.git

Или обновить содержимое, если репозиторий был клонирован ранее:


$ cd ~/cxemotexnika
$ git pull

Дальше переходим к шаблонам:


$ cd cxemotexnika/Examples/MIMXRT1010_EVK

Для сборки проекта необходимо переместиться в каталог build и запустить скрипт build_all.sh:


$ cd standalone_template/armgcc/build
$ ./clean.sh
$ ./build_all.sh

Если проект не собрался, то необходимо убедится в правильности указания пути к установленному SDK_2.8.2_EVK-MIMXRT1010 в файле armgcc/CMakeLists.txt.
В нем указано расположение SDK в домашнем каталоге пользователя (set(MCU_XPRESSO_SDK_PATH $ENV{HOME}/SDK_2.8.2_EVK-MIMXRT1010)).

Загружаем полученный бинарный файл в плату:


$ cp flexspi_nor_debug/standalone_template.bin /media/$USER/RT1010-EVK/

Теперь откроем один из шаблонов , например standalone_template, и посмотрим на его содержимое. Собственноручно было создано всего два каталога armgcc и user, все остальные каталоги сгенерированы автоматически утилитой MCUXpresso Config Tools.

Можете удалить все каталоги , кроме созданных вручную, а также необходимо удалить файл standalone_template.mex.

Сейчас мы научимся генерировать необходимые файлы с помощью утилиты MCUXpresso Config Tools.

Запускаем MCUXpresso Config Tools и в открывшемся окне “Start development” выбираем переключатель “Create a new standalone configuration for processor, board or kit”.

Далее в окне “Create new configuration” выбираем отладочную плату, для которой планируется генерировать конфигурацию (MIMXRT1010-EVK) и жмем на кнопку “Finish”.

Следующее окно “Config Tools Overview” необходимо просто закрыть.

Далее необходимо выбрать драйвера периферии и утилиты так, как показано на следующих картинках, после чего сохранить проект (.mex файл)в каталог standalone_template.

Для обновления сгенерированного кода жмем «Update code» на верхней панели под основным меню программы

Внимательно наблюдайте за сообщениями конфигуратора в окне “Problems” в правом нижнем углу экрана. Там не должно быть сообщений об ошибках, иначе созданная конфигурация точно будет нерабочей.

Поэкспериментируйте с созданием новой конфигурации GPIO , для этого откройте меню Tools->Pins. В закладке “Pins” выберите интересующий вас номер контакта микроконтроллера и сделайте двойной клик на поле GPIO. Появится окно для выбора функции контакта, то есть какой порт необходимо задействовать на этом контакте микроконтроллера из списка доступных для контакта портов.

После добавления новый порт появится в окне “Routed pins”, в котором вы сможете настроить его как порт ввода или вывода, установить подтягивающий резистор к земле или питанию и т.д

Поэкспериментировать с настройкой портов GPIO и периферийных интерфейсов удобно с помощью установленного в разъем Arduino шилда. В ходе более детального изучение платы я выяснил, что не все контакты микроконтроллера подключены к выводам разъема расширения Arduino. Кроме того на плате не установлен анонсированный электронный компас FXOS8700CQ. Отладочная плата также содержит пустое посадочное место для дополнительной микросхемы Flash памяти MX25L4006EM2R.
Недостающие выводы на разъеме Arduino можно подключить перепайкой перемычек, но их миниатюрный размер требует высокопрофессиональных навыков при монтаже.

Кроме готовых плат расширения существуют также макетные платы для прототипирования и создания собственных шилдов Arduino, например вот такая плата от Keyestudio.

Если говорить о возможности использования MIMXRT1010-EVK в качестве контроллера Arduino, то такая возможность не анонсирована производителем.
Однако существует контроллер Teensy 4.0 от Sparkfun, построенный на базе микроконтроллера MIMXRT1062. Исходные коды его реализации можно адаптировать для использования совместно с MIMXRT1010-EVK , они доступны по ссылке на Github.

Viewed 41719 times by 6293 viewers

Last modified: 23/10/2020

Author

Comments

Write a Reply or Comment