Некоторое время назад по необходимости проекта у меня появилась возможность поиграться с отладочной платой Teensy 4.1. Что это за зверь - можно посмотреть на сайте разработчика.
В общем, это замечательная вещь.
Имеется контроллер MIMXRT1062DVJ6A от NXP. Ядро – Кортекс М7. Тактовая частота – до 600 МГц! Впечатляющий? Но самое главное — есть два контроллера EHCI, реализующие порты USB 2.0 HS. На этой плате один контроллер подключен к разъему Micro USB, а второй к разъему USB Host. Еще есть порт Ethernet, но я с ним пока не возился.
Ну и много других замечательных вещей.
К сожалению, рекомендуемая среда разработки Arduino очень спартанская, а библиотека в целом напоминает авгиевы конюшни.
Само по себе оно работает. Программист приложений будет рад его использовать.
Но его завершение — это все еще процесс.
Плюс ко всему, его по сути делает один разработчик, а не огромное сообщество (как, например, ESP8266 или ESP32).
Поэтому функционал небогат, и самостоятельная модификация затруднена.
Но мой неугомонный начальник задал простой и естественный вопрос: «Что вам мешает использовать стандартную среду разработки от NXP — MCUXpressoЭ» Дело в том, что существует огромный набор готовых библиотек для нужного нам контроллера.
Лично я уже работал с этой средой для нашего сервиса All-Hardware. Впечатления остались самые приятные, поделился ими здесь.
Эта статья .
Попробовав, я понял, что он, как всегда, прав.
И возникла идея написать небольшую статью, в четыре-пять штук, чтобы зафиксировать результаты экспериментов.
Итак, давайте начнем.
Сегодня мы просто возьмем готовый пример от MCUXpresso, запустим его в Teensy и убедимся, что все работает.
Важная заметка
Не хотел перегружать анонсом статьи, но пожалуй напишу это в самом начале.Обычно, поигравшись с тем или иным контроллером или ПЛИС, я покупаю себе хотя бы одну вещь для домашнего использования.
В случае с Teensy за последние полгода я предпочитаю удовлетворять свои проценты за счет работодателя.
Цена макетки для таких характеристик очень и очень вкусная, но порт отладки на этой макетке отсутствует напрочь.
Здесь нет ни JTAG, ни SWD, ни чего-то подобного.
Народ извращается как может, а автор схемы доказывает, что отладочный порт - зло, и через него этот конкретный кристалл можно легко убить.
В следующей статье мы рассмотрим полумеры.
Поработаем с отладчиком GDB через порт UART. Но все это особые разновидности извращений.
И из моих статей видно, что я большой поклонник JTAG (а еще лучше SWD) отладки.
И я не могу заставить себя заплатить сумму, приближающуюся к четырем тысячам рублей, за замечательную, потрясающую, гениальную плату, но не имеющую порта отладки.
Какое программное обеспечение мне следует установить?
Сегодня я буду ссылаться на установленную среду разработки Teensyduino. Его можно скачать здесь: Teensyduino: загрузите и установите поддержку Teensy в Arduino IDE (pjrc.com) .Но вместо этого вы можете просто использовать проект Teensy Loader. В тексте он упоминаться не будет, но прочитать о нем и скачать можно здесь: Приложение Teensy Loader — доступно для систем Windows, Linux и Macintosh (pjrc.com) .
Что ж, тогда вам нужно скачать и установить среду разработки MCUXpresso от NXP, а в ней установить SDK и примеры для семейства MIMXRT1060.
Давайте начнем
Так.
Сегодня мы возьмем готовый пример виртуального COM-порта, соответствующего стандарту CDC, и попробуем запустить его на плате Teensy. Запустите среду разработки MCUXpresso, выберите там «Импортировать примеры из SDK»:
Откройте в дереве ветку MXMXRT1060, выберите контроллер MXMXRT1062xxxxA (других там все равно нет), а затем выберите плату.
Доска, но не ее название.
Если нажать на название, мы попадем на сайт. На самом деле ни одна из представленных плат и так не наша, так что вы можете выбрать первую попавшуюся.
Что ж, теперь вы можете нажать кнопку «Далее»:
Открылось огромное дерево возможных примеров.
Мои глаза широко открыты! Ведь этот бизнес поддерживает огромная корпорация! Для сегодняшнего опыта откройте ветку USB и выберите там dev_cdc_vcom_bm. Да, я не люблю использовать никакую ОС на Кортексе-М.
Поэтому наши эксперименты мы будем проводить с BareMetal. И тогда вы сможете выбрать то, что хотите.
Ну а дальше, как всегда.
Теперь перед нами открывается окно, где мы выберем, с каким портом будут работать функции printf/scanf. Нет, мы можем сделать это и без ничего, но лучше, если у нас будет хоть какой-то отладочный вывод. На самом деле, у нас нет особого выбора.
Плата Teensy 4.1 не имеет разъемов для аппаратного отладчика.
Поэтому только UART. О возможных библиотеках вы можете прочитать в разделе 16 описания MCUXpresso. Руководство пользователя MCUXpresso IDE (nxp.com) .
Скажу лишь, что Redlib не поддерживает язык C++, поэтому мы к нему даже не привыкаем.
Из Newlib и Newlib-Nano вообще второй лучше, так как более компактный.
Суффикс должен быть NoHost. Что это такое, вы можете узнать в описании среды разработки.
После этого специальные функции уже будут работать.
Но по какой-то причине мне также понравилось проверять флажки «Перенаправить SDK «PRINTF» в библиотеку C printf» и «Перенаправить printf/scanf на UART».
Мы не будем использовать это сегодня, но потом я потанцую с сегодняшним проектом.
Общий:
Внизу того же окна находится карта памяти, не похожая на ту, что мы можем найти в настройках Teensy:
Почему не соответствует и как это можно исправить я опишу в одной из следующих статей.
Пока оставляем по умолчанию.
Нажмите «Готово».
Вот как выглядит дерево проекта:
Корпус контроллера не наш.
Давайте сразу поменяем.
На ветке MCU нажимаем правую кнопку мыши и в меню выбираем наш контроллер:
Большой! Проект готов.
Давайте соберем его.
Получен файл \NXPworkspace\evkmimxrt1060_dev_cdc_vcom_bm\Debug\evkmimxrt1060_dev_cdc_vcom_bm.axf Теперь его нужно подготовить к заливке в Тинси.
Для этого вам придется позаимствовать пару утилит из пакета TeensyDuino. Откройте среду разработки Arduino и выберите пункт меню Файл-> Настройки:
Там ставим галочки: Показать подробный вывод: Компиляция и загрузка.
Откройте любой пример и соберите его.
Нас будет интересовать окончание процесса:
Вот крупный план выделенной строки: "C:\\Program Files (x86)\\Arduino\\hardware\\teensy/.
/tools/teensy_post_compile" - file=CardInfo.ino "-path=C:\\Users\\User\\AppData\\Local\\Temp\\arduino_build_253223" "-tools=C:\\Program Files (x86)\\Arduino\\hardware\ \teensy/.
/tools/" -board=TEENSY41 Это значит, что интересующие нас утилиты находятся здесь:
Более того, нас не интересуют достаточно увесистые вложенные каталоги.
В общем, отсюда нас интересуют только два файла, но я предлагаю скопировать их все.
Я специально показал способ поиска, а не точное местоположение, так как подозреваю, что и в Linux всё можно найти именно так.
Я скопирую это в корень диска c:\.
Так мне будет легче не запутаться в каталогах.
Далее мне очень хотелось записать все необходимые мне шаги на этапе после сборки.
Но, к сожалению, мне не удалось договориться с загрузчиком Teensy при запуске его из «клипа» (а по сути MCUXpresso — это модифицированный «клип»).
Поэтому мы проделаем два этапа.
Мы создадим файл HEX в среде разработки.
Давайте перейдем сюда (чтобы отредактировать шаги после сборки):
И вот мы видим вот это безобразие:
Вторая и третья строки закомментированы.
Причем второй явно конвертирует axf-файл в двоичный.
На основе этого теперь сделаем генератор файлов в формате Intel Hex:
- Удалите знак комментария (решетку и пробел позади него);
- Замените тип выходного файла с двоичного на ihex;
- Измените расширение выходного файла с bin на hex.
hex" Или на экране:
А на втором этапе будут полумеры.
Возможно, тогда вопрос решится с помощью пакетного загрузчика TeensyLoader CLI, но для простоты, а пока для остального буду помещать в каталог, где собрано приложение , bat-файл следующего содержания: C:\Tensy_Tools\teensy_post_compile.exe -file=%~n1 -path=.
/ -tools=C:\Teensy_Tools C:\Teensy_Tools\teensy_reboot.exe Получается вот так:
Я запускаю его, передавая в качестве аргумента шестнадцатеричный файл: makeTeensy.bat evkmimxrt1060_dev_cdc_vcom_bm.axf.hex И тут те, кто работал с Teensyduino, уже узнают автоматически запускающийся стандартный загрузчик.
Нажимаю кнопку на плате, файл загружается, получается виртуальный COM-порт, у меня это COM8:
Давайте откроем терминал (скорость не важна, просто у нас протокол CDC без физического UART) и что-нибудь введем.
Скажем «Привет UART»:
Эхо есть.
Но всё как-то скучно.
Давайте добавим немного интересного функционала.
Генерация эха происходит здесь:
Давайте немного повеселимся и скопируем из входного буфера в выходной буфер следующим образом:
То же самое и с текстом.
Собираем, загружаем, входим в терминал, вводим заветную фразу./* Copy Buffer to Send Buff */ for (i = 0; i < s_recvSize; i++) { s_currSendBuf[s_sendSize++] = s_currRecvBuf[i]+1; }
Видим такое эхо:
Работает! К коду каждого символа добавляется один.
Получившаяся «прошивка» имеет один небольшой недостаток.
Чтобы предотвратить переполнение буфера, разработчики NXP применили хитрость.
Пока данные не будут собраны, передать новые в такой UART не получится.
Нет приема эха – новые символы не получены.
Просто я эту «прошивку» использовал для измерения производительности USB этого устройства, а там просто отправляю данные, не получая их обратно.
Подробнее о методике измерения я писал в предыдущая статья .
Но в следующий раз я расскажу, как устранить эту особенность и как проводились измерения для NXP. Кроме того, мы научимся работать с GPIO и UART.
Заключение
Мы освоили методику разработки прошивки для платы Teensy не с помощью Teensyduino, а с использованием инструментов разработки от NXP. Автор считает, что библиотеки от NXP гораздо удобнее своих аналогов Arduino. Ну или хотя бы более полно.В любом случае владение различными техниками дает возможность выбора, а выбор всегда велик.
Теги: #Программирование микроконтроллеров #Компьютерное оборудование #Системное программирование #teensy 4.1 #NXP MCUXpresso
-
Советы По Выбору Агрегатора Новостей Rss
19 Oct, 24 -
Советы По Выбору Автоответчика
19 Oct, 24 -
Lg Nexus 4 - Личный Опыт И Без Переводов
19 Oct, 24 -
Как Искать Нефть В России
19 Oct, 24 -
Кислота Для Мобильных Браузеров
19 Oct, 24 -
Таблица Дроидов. Выпуск 15
19 Oct, 24 -
32-Битный Excel И 64-Битный Sql-Сервер.
19 Oct, 24