Оценочный комплект MIMXRT1010-EVK представляет собой недорогую отладочную плату с питанием от USB порта компьютера, построенную на основе высокопроизводительного микроконтроллера с архитектурой ядра Cortex-M7 от компании NXP.

Основные характеристики MIMXRT1010-EVK следующие:

  • микроконтроллер MIMXRT1011DAE5A с тактовой частотой до 500МГц в корпусе LQFP-80
  • 64 кБайт Boot ROM
  • 128 кБайт RAM
  • 16 Мбайт внешней QSPI Flash памяти программ
  • Аудиокодек
  • Разъем линейного аудиовыхода
  • Микрофон
  • Разъем для подключения внешнего динамика
  • SPDIF интерфейс
  • USB порт для внутрисхемной отладки и программирования платы
  • JTAG разъем
  • USB 2.0 OTG порт
  • Разъем для подключения Arduino шилдов и плат управления двигателями
  • Электронный компас FXOS8700CQ
  • Пользовательская кнопка и светодиод

Как и у большинства недорогих отладочных плат на этой плате есть разъем расширения Arduino, предназначенный для подключения плат расширения (шилдов) для Arduino-UNO.

При выборе шилда для подключения необходимо учитывать, что питание данной платы осуществляется напряжениям 3.3 В, тогда как Arduino-UNO работает с 5В логическими уровнями, поэтому подключаемый шилд может также быть рассчитан на напряжение питание 5В.

Просматривая основные характеристики MIMXRT1010-EVK возникает вопрос “зачем такой большой объем Boot ROM?”. Обычно заводской загрузчик занимает несколько килобайт программируемой на заводе памяти. Все потому, что данный микроконтроллер Cortex-M7 имеет свои специфические особенности, добавленные производителем. Прошивка микроконтроллера храниться во внешней QSPI памяти в зашифрованном с помощью алгоритма AES-128 виде и при выполнение кода расшифровывается “на лету”. За реализацию этих функций отвечает заводской загрузчик. Также он может проверять подлинность обновляемой прошивки проверкой цифровой подписи и реализует другие фичи, о которых вы узнаете после детального ознакомления с документацией на микроконтроллер MIMXRT1011DAE5A.

Программа для MIMXRT1010-EVK может выполняться из внешней QSPI Flash памяти или из внутреннего ОЗУ (128 кБ RAM), что позволяет экономить ресурс QSPI Flash памяти (ограниченное количество циклов записи/стирания) во время отладки кода.
По соотношению цены и производительности отладочная плата MIMXRT1010-EVK может составить конкуренцию аналогичным платам серии Nucleo и Discovery от STMicroelectronics.

Я практически не имел дело с микроконтроллерами NXP(бывшая Philips) последние 10 лет и мне стало интересно как обстоят дела в лагере NXP, поскольку сам я активно использовал в своих разработках микроконтроллеры STM32 по причине низкой цены и высокой производительности.

Так что мне, как и вам, представилась возможность оценить насколько низкий или высокий порог вхождения в программирование микроконтроллеров Cortex-M7 от компании NXP.
Я буду сравнивать инструменты от NXP с аналогичными инструментами от STMicroelectronics.

Прозводитель MIMXRT1010-EVK не оставил нас на едине с архитектурой своего микроконтроллера. Как и многие другие производители микроконтроллеров NXP предоставляет своим пользователям программный фреймворк MCUXpresso SDK.
Как и аналогичный фреймворк от STM STM32CubeH7 этот SDK содержит помимо драйверов и библиотек множество примеров кода и свободное программное обеспечение от сторонних производителей, которое можно выбрать во время загрузки SDK.

Для получения доступа к инструментарию и документации вам необходимо зарегистрироваться на сайте NXP, после чего у вас появиться ваш личный электронный кабинет, в котором можно сформировать SDK для загрузки.
Дело в том, что для различных вариантов компиляторов и интегрированных сред разработки MCUXpresso SDK имеет различную структуру.
Я загрузил два варианта SDK для неограниченного и свободного использования без нарушения каких-либо лицензий, которые используют в своей работе инструменты GCC ARM Embedded и MCUXPresso IDE.

Оба инструмента используют компилятор arm-none-eabi-gcc , но GCC ARM Embedded предполагает работу из командной строки, сборка проекта осуществляется с помощью систем сборки cmake + GNU make.
Вам не обязательно разбираться в мейк файлах, поскольку формат файлов рецептов cmake значительно проще, образцы CMakeLists.txt находятся в примерах из MCUXpresso SDK.

Второй вариант инструментария MCUXPresso IDE основан на одноименной интегрированной среде разработки, построенной на базе Eclipse IDE, но в отличии от использования последней вам вообще ничего не придется настраивать вручную. Компиляция проекта и внутрисхемная отладка работают сразу “из коробки”.
Но имейте ввиду, что MCUXPresso IDE не будет работать с SDK , скомпилированным для другого инструментария (GCC ARM Embedded в том числе), а SDK для MCUXPresso IDE не сможет использоваться для сборки с помощью cmake, IAR EWB или Keil MDK.

В состав отладочной платы MIMXRT1010-EVK также входит внутрисхемный программатор-отладчик Free-Link (или другое название DAP-Link). Точно такой-же по своим функциональным возможностям, как ST-Link на отладочных платах от STMicroelectronics. Но не подумайте, что NXP похитило идею у STM. Дело в том, что если вы загрузите последнюю версию стандарта CMSIS (Cortex Microcontroller Software Interface Standard) и заглянете в подкаталог CMSIS-DAP , то обнаружите там исходные коды и примеры CMSIS-DAP внутрисхемного отладчика. Кроме того в примерах есть исходный код отладчика на основе NXP микроконтроллера LPC4322JET100. Такой-же используется на плате MIMXRT1010-EVK, видимо отсюда и происходит название Free-Link, поскольку принципиальная схема и исходный код находятся в свободном доступе.

Отладочный USB порт Free-Link адаптера реализует несколько USB профилей. Вы можете одновременно использовать этот порт как преобразователь USB-UART (/dev/ttyACM0 в Linux) , выводить сообщения или вводить команды из терминальных программ (Putty, minicom и т.д.), а также использовать как устройство Mass Storage (U-Disk), с помощью которого загрузка прошивки в основной микроконтроллер отладочной платы сводиться к копированию бинарного файла на подключенный к USB порту внешний диск. В Ubuntu Linux этот диск будет автоматически примонтирован к файловой системе как /media/$(USER)/RT1010-EVK.

И наконец третий вариант использования отладочного USB порта — это собственно сам DAP-Link внутрисхемный отладчик, подключенный к JTAG/SWD интерфейсу основного микроконтроллера.

Прошивку Free-Link микроконтроллера также можно обновлять, существует несколько версий таких прошивок для использования различными GDB — серверами (mbed-OS, J-Link). К сожалению на сайте Segger J-Link нет DAP (OpenSDA) прошивки для платы MIMXRT1010-EVK, но зато есть возможность воспользоваться разъемом JTAG и внешним J-Link адаптером.

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

Вернемся к MCUXpresso SDK. Для его установки и использования есть соответствующая документация, которая сосредоточена на варианте установки под Windows. Поэтому я счел необходимым описать особенности установки MCUXpresso SDK для GCC ARM Embedded под Linux и OSX. Установка MCUXpresso SDK для MCUXPresso IDE производиться импортированием его из запущенной IDE, причем импортирование производиться непосредственно из загруженного упакованного в архив файла.

Итак, после загрузки варианта MCUXpresso SDK для GCC ARM Embedded, необходимо также установить инструментарий arm-none-eabi , GNU make, а также утилиту cmake.
Для начала ознакомтесь с документом Getting Started with i.MX RT1010 Evaluation Kit, который можно загрузить отдельно или обнаружить уже в загруженном SDK в подкаталоге docs.

В этом документе предлагается загрузить GNU ARM Toolchain из этого ресурса.

Я уже описывал процесс установки GNU ARM Toolchain под Linux и OSX в своей предыдущей публикации в разделе “Комплятор”. В дополнение к написанному хочу добавить, что для использования GNU ARM Toolchain в составе MCUXpresso SDK вам также необходимо прописать системную переменную ARMGCC_DIR, в которой необходимо указать путь к каталогу bin инструментария GNU ARM Toolchain, само название каталога bin не нужно указывать.


$ vim ~/.bashrc


$ vim ~/.bash_profile

export ARMGCC_DIR = $HOME/gcc-arm-none-eabi-9-2019-q4-major

Перезапускаем скрипт инициализации Bash shell, чтобы не открывать новое окно терминала


$ source ~/.bashrc


$ source ~/.bash_profile

GNU make скорее всего уже установлен в вашей системе, об этом станет известно во время повторной попытки установки.
Необходимо также установить cmake, установку можно выполнить из репозитория вашей операционной системы.


$ sudo apt install make cmake


$ brew install make cmake

Проверяем наличие всех необходимых для работы программ:


$ make --version
$ cmake --version
$ arm-none-eabi-gcc --version

Настало время собрать и загрузить в микроконтроллер один из доступных в SDK примеров.


$ cd ~/SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010/demo_apps/hello_world/armgcc
$ ./build_all.sh

После сборки примера hello_world посмотрим на выходные бинарные файлы:


$ ls flexspi_nor_release
hello_world.elf

Как видите по-умолчанию мы получили только elf файл, для загрузки прошивки копированием на диск необходим bin или hex файл.
Это легко исправить , добавив в конец файла CMakeLists.txt следующую строку

Выполняем сборку повторно и смотрим на результат сборки


$ ./build_all.sh
$ ls flexspi_nor_release
hello_world.bin hello_world.elf

Прошивка микроконтроллера выполняется одной командой копирования файла, не забудьте предварительно подключить плату к USB порту компьютера.


$ cp flexspi_nor_release/hello_world.bin /media/$USER/RT1010-EVK

Чтобы проверить работу загруженного в микроконтроллер примера необходимо запустить какую-либо терминальную программу. Если у вас нет особых предпочтений, то сделаем это с помощью minicom, предварительно установив утилиту


$ sudo apt install minicom


$ brew install minicom


$ minicom -D /dev/ttyACM0 -b 115200

Welcome to minicom 2.7.1

OPTIONS: I18n
Compiled on Aug 13 2017, 15:25:34.
Port /dev/ttyACM0, 13:17:46


Press CTRL-A Z for help on special keys

Нажимаем на плате кнопку “Reset” и наблюдаем следующее сообщение в консоли


hello world.

Далее нажимая на клавиши клавиатуры вы будете видеть эхо-сообщение в консоли.
Для выхода из minicom необходимо нажать Ctrl+A , затем Q и Enter.

Теперь мы умеет собирать примеры и загружать их в микроконтроллер.
Кроме недоработки с отсутствием инструкции для формирования bin файла я также обнаружил отсутствие очень важной опции при сборке C++ программы, собственно , вы не сможете скомпилировать программу, написанную на С++, если не исправите этот недочет.

Необходимо добавить в CMakeLists.txt следующие строки

Работая с микроконтроллерами STM32 можно создавать код инициализации периферии микроконтроллера по примерам от производителя или сгенерировать этот код в утилите STM32CubeMX.
Точно такие-же возможности вам предоставлены для программирования NXP микроконтроллеров.
Примеры кода от производителя вы можете наблюдать в каталоге SDK_2.8.2_EVK-MIMXRT1010/boards/evkmimxrt1010.

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

Продолжение следует…

Viewed 203147 times by 36602 viewers

Last modified: 27/10/2020

Author

Comments

Write a Reply or Comment