habrahabr

Teensy 4: Arduino на скорости 600 МГц (почувствуй себя властелином вселенной)

  • вторник, 25 февраля 2025 г. в 00:00:12
https://habr.com/ru/companies/timeweb/articles/878550/


Последнее время мне стали часто попадаться упоминания контроллеров Teensy, причём в самых интересных и мощных проектах. Какое-то время я не обращал на это внимание, но потом заинтересовался этой темой и чем дальше я в неё погружался, тем больше впечатлялся.

Оказывается, последняя версия Teensy 4 сделана на основе Cortex M7 и работает на частоте 600 МГц, причём ядро там довольно продвинутое и позволяет исполнять две инструкции за такт, использует предсказание ветвлений и аппаратную обработку 64-битных чисел с плавающей точкой, а также много чего ещё, в том числе имеет на борту много RAM, Flash и PSRAM памяти и т. д.

В общем, контроллер очень продвинутый и позволяет создавать проекты в области обработки звука, управления массивами светодиодов, вывода видео на LED экраны, создания музыкальных синтезаторов и т. д. и т. п.

В результате я пришёл к выводу, что с этим стоит познакомиться поближе и на Али был заказан комплект Teensy 4.1 с Audio и Ethernet расширениями, а затем я с большим удовольствием поэкспериментировал с этим железом. Ну а далее я предлагаю свой отчёт о проведённых экспериментах, а также поделюсь своими впечатлениями о Teensy 4.1.

Teensy 4


Серия Teensy 4 состоит из двух моделей: Teensy 4.0 (урезанная версия) и Teensy 4.1 (полная версия). Teensy 4.0 «урезана» не в смысле функционала (ядро там такое же), а в смысле форм-фактора — младшая модель имеет плату меньшего размера с меньшим числом пинов, поэтому на ней просто физически нет места для картридера и Ethernet чипа.



Также, в экосистему Teensy входят и некоторые дополнительные компоненты, например, Audio плата, выносной Ethernet разъём, USB хост разъём и пр. Это сделано для того, чтобы пользователь мог выбрать нужную для его проекта конфигурацию и не переплачивать за ненужные ему части.

Ядро Cortex M7


В основе Teensy 4 лежит микроконтроллер i.MX RT1060 на ядре Cortex M7 производства NXP Semiconductors. Штатно ядро работает на частоте 600 МГц и потребляет при этом около 100 мА. Ядро позволяет как снижать тактовую частоту для экономии энергии, так и наоборот, разгонять её до 1 ГГц, если этого требует решаемая задача.

Как я уже отметил выше, ядро позволяет исполнять две инструкции за такт, использует предсказание ветвлений и аппаратную обработку 64-битных чисел с плавающей точкой. Кроме того, ядро поддерживает DSP инструкции, которые ускоряют обработку сигналов, имеет на борту генератор случайных чисел, крипто-акселератор и множество других возможностей.

Результат бенчмарка CoreMark, который лучше всяких слов говорит о том с чем мы мы имеем дело.



Teensy 4 в 330 раз быстрее (мощнее) чем ATmega2560, в 24 раза быстрее Arduino Due и в 6,5 раз быстрее в вычислениях, чем ESP32. Плюс нужно помнить, что Teensy 4, в отличие от ESP32, снабжена полноценным набором пинов и множеством других функций.

Память


Штатно на Teensy 4.1 присутствует 8 МБ Flash памяти и 1 МБ оперативной памяти. Для контроллера это очень много и я даже затрудняюсь придумать задачу, которой потребовалось бы такое количество памяти. Единственное, что приходит в голову — это хранение данных и вычислений в аудио, видео, научных приложениях и приложениях управления матрицами светодиодов.

Но и этого создателю Teensy 4 (Paul Stoffregen) показалось мало и он предусмотрел возможность добавления ещё 8/16 МБ PSRAM и/или Flash памяти на плату.

Итого, Teensy 4.1 может иметь следующие конфигурации памяти:

8 МБ Flash + 1 МБ ОЗУ + 8 МБ PSRAM + ещё 8 МБ Flash

или

8 МБ Flash + 1 МБ ОЗУ + 16 МБ PSRAM

Внутренняя память 1 МБ разбита на два пула по 512 КБ, причём первый пул (RAM1) имеет быстрые 64/32-битные шины связи с процессором, а второй пул (RAM2) оптимизирован для DMA доступа (32 канала).



Имеется также два кэша по 32 КБ для ускорения работы с не TCM памятью.

В качестве EEPROM имеется 4284 байта памяти, эмулируемых во Flash.

GPIO


Teensy 4.1 имеет 55 GPIO, 35 из которых поддерживают функцию PWM и 18 аналоговых входов (10/12-бит).

Все GPIO поддерживают работу с прерываниями и могут конфигурироваться на вход и выход с использованием подтягивающих резисторов INPUT_PULLUP, INPUT_PULLDOWN, OUTPUT_OPENDRAIN и т. д. GPIO на Teensy 4.1 поддерживают также различные продвинутые функции, наподобие настраиваемой нагрузочной способности и регулируемой полосы пропускания.

Лучше всего о количестве и назначении GPIO Teensy 4.1 скажет распиновка платы контроллера.



Кроме этого, Teensy 4.1 содержит ещё огромное количество функций и возможностей, перечислять которые здесь не входит в мою задачу — всю эту информацию можно найти в официальной документации производителя.

Приведу здесь только краткий список основных характеристик контроллера:
  • ARM Cortex M7 600 МГц
  • Блок вычислений с плавающей точкой, 32 и 64 бита
  • 32 DMA канала
  • 7936 КБ Flash, 1024 КБ RAM (2x512K), 4 КБ EEPROM (эмуляция)
  • Опционально QSPI расширение памяти, два чипа PSRAM/Flash
  • 55 GPIO (35 PWM)
  • 18 аналоговых входов
  • 8 Serial, 3 SPI, 3 I2C портов
  • 2 I2S/TDM и S/PDIF цифровой аудио порт
  • 3 CAN интерфейса (один с CAN FD)
  • SDIO (4 bit) встроенный порт SD карты
  • 10/100 Ethernet (DP83825 PHY)
  • USB устройство 480 Мб/с и USB хост 480 Мб/с
  • Ускорение криптографических функций и генератор случайных чисел
  • Часы реального времени (RTC)
  • Конвейер обработки графики
  • Управление питанием (Low-Power и Power On/Off)
  • Прочие функции

Внешний вид


Поставляется Teensy 4.1 в более чем скромной упаковке. Вообще-то должна быть ещё листовка с распиновкой и упаковочный пакт должен быть другим. Судя по всему, это не оригинальный контроллер, а его китайская копия (причём, что интересно, дороже оригинала).



Весь комплект выглядит следующим образом: контроллер Teensy 4.1, Audio плата, Ethernet разъём с кабелем и кабель с USB входом.



Пинов и разъёмов в комплекте нет, поэтому всё это изобретать и колхозить придётся самостоятельно. И тут, в самом неожиданном месте, нас ожидает засада: геометрия плат, мягко говоря, странная, особенно это касается Audio платы (но об этом подробнее ниже).

Паяем контроллер


С длиной платы разработчик явно переборщил. Работа с такой узкой и длинной платой не очень комфортна: при любом механическом усилии, например, при извлечении из жёсткой макетки, плата грозит переломиться пополам или повредить тонкие дорожки из-за механического изгиба.



Если посмотреть на распиновку выше, то становится понятно, что плата Teensy 4.1 является удлинённой и совместимой по пинам копией Teensy 4.0. В чём-то это даже неплохо — эта совместимость позволяет использовать аксессуары (например Audio плату) с обоими типами контроллеров.



С распайкой пинов тоже не всё так просто: нельзя просто так взять и распаять Teensy 4.1 (смайл). Если сначала распаять боковые пины, то потом будет крайне сложно запаивать многочисленные разъёмы, которые присутствуют на плате. Поэтому сначала нужно паять пины разъёмов, а затем уже боковые пины.

Кроме этого, тут присутствует ещё один нюанс — если сразу запаять все линейки боковых пинов, то потом, если они вам понадобятся, будет проблематично припаять микросхемы дополнительной памяти.



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

Audio плата


Чем руководствовался разработчик, когда делал эту плату мне не очень понятно. Она какая-то несуразная, с какой стороны на неё ни взгляни. Ряды пинов для установки Teensy проходят прямо посередине платы, сбоку, без всякой системы, налеплены дополнительные элементы.



Когда это собирается в общий бутерброд, то получается какая-то странная конструкция, ни на что не похожая и весьма корявая на вид. Особенно это касается связки с длинной Teensy 4.1.

Я долго думал как всё это грамотно и максимально функционально запаять и остановился на варианте с проходными разъёмами с длинными пинами, чтобы Audio плату можно было вставить в макетку (или другую плату) и одновременно сверху прикрепить Teensy 4.1.



А вот к собственно функционалу Audio платы у меня претензий нет. Она сделана на чипе SGTL5000, имеет два I2S/TDM и один S/PDIF порт, микрофонный вход, картридер для microSD карт памяти и аудио выход.

Народ на этой плате и этом комплекте с Teensy творит чудеса (чуть подробнее о программировании обработке звука будет сказано ниже).

Ethernet


Как вы уже заметили, у Teensy (в отличие от ESP32) «из коробки» отсутствует поддержка сетевых интерфейсов. А это, безусловно, важнейшая часть любой микроконтроллерной системы — одно дело одиночный контроллер и совсем другое — контроллер с сетевым управлением.

На плате Teensy 4.1 присутствует чип Ethernet физики DP83825 и для подключения к локальной сети нужно ещё добавить разъём RJ45 со специальным шлейфом.



И снова возникает вопрос к разработчику: на микро-плате разъёма нет свободного места и отсутствуют отверстия или какие-либо элементы его крепления. И каким образом предполагается крепить всю эту конструкцию? Особенно учитывая то, что она испытывает довольно значительные механические нагрузки при коммутации патч-кордов.



Софт


Теперь нужно сказать несколько слов о программном обеспечении для всей этой экосистемы. Как бы ни был хорош контроллер, без программного обеспечения это просто кусок текстолита с детальками. А вот с софтом у Teensy всё просто отлично. Поддерживаются:
  • Arduino IDE + Teensyduino
  • Visual Micro (Microsoft Visual Studio)
  • PlatformIO
  • CircuitPython
  • Command Line with Makefile

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

Главное, чтобы сами идеи были (смайл).

Arduino


Далее я в двух словах расскажу об инсталляции системы и принципах работы с ней в среде Arduino. Тут тоже есть несколько нестандартных и неочевидных моментов.

Прежде всего, на вашем компьютере уже должна быть установлена Arduino IDE. Причём не имеет значения в каком варианте она установлена — одинаково хорошо поддерживается интеграция и с обычной и «portable» версиями Arduino. В моём случае использовалась portable версия Arduino 1.8.5.

Со страницы скачивается Teensyduino и в несколько кликов устанавливается поверх вашей Arduino IDE.



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

Тут мне хотелось бы отдельно отметить эту очень приятную особенность программной поддержки Teensy. На удивление всё работает без каких-либо глюков и проблем. Это совершенно нехарактерно для Arduino — я уже привык, что постоянно возникают какие-то проблемы, но с Teensy этого не происходит — всё работает как часы.



В базовой поставке Teensyduino я насчитал 92 (!) совместимые библиотеки. Причём все библиотеки, что я успел опробовать, тоже работали отлично — ни глюков, ни ошибок компиляции, вообще ничего такого — всё просто работает так, как и должно работать (что, как я уже отметил, даже непривычно).

Компиляция и загрузка


Поскольку в Teensy 4, кроме основного M7, используется еще вспомогательный микроконтроллер NXP MKL02Z32 (M0), при помощи которого происходит загрузка программы в память основного контроллера, то процедура загрузки скетча тоже несколько отличается от стандартной.

После инсталляции Teensyduino, во время первой компиляции, нужно нажать кнопку на контроллере.



Далее система опознаёт вашу плату Teensy и затем уже работа с Arduino IDE происходит как обычно. Все действия по согласованию с контроллером система проводит самостоятельно и прозрачно для пользователя.

Audio


Teensy 4.1 в одной из своих частей «заточена» для работы со звуковыми потоками и обработки и генерации звуков. Это отдельная огромная тема, здесь я только отмечу основные моменты.



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

В среде Teensyduino для программирования аудио существуют специальные функции, которые можно использовать как и любые другие функции в среде Arduino. Плюс к этому существует ещё и специальный визуальный редактор.



Он позволяет конструировать нужную обработку аудио сигналов из стандартных блоков, просто соединяя их входы и выходы. После нажатия кнопки «Export», визуальная конструкция преобразовывается в обычный код Arduino.

Тестирование


Это всё отлично, но хотелось бы проверить Teensy 4 на чём-нибудь более сложном, чем простые примеры из библиотек. В качестве более серьёзного теста попробуем портировать систему AMS на новую платформу Teensy 4.1 (Cortex M7).

Это уже более серьёзный тест, который задействует работу вычислительного ядра микроконтроллера, взаимодействие его с чипом Ethernet физики DP83825, реальную сетевую работу, параллельное взаимодействие с microSD картой памяти и прочие ресурсы системы. И нормально работать эта связка будет только в том случае, если всё задействованное железо работает нормально и весь управляющий софт адекватно взаимодействует с этим железом.

Примечание. Проверка производилось на внутренней тестовой сборке AMS для Teensy 4.1. Распространение этой версии не планируется, возможно это будет сделано позже, после соответствующих доработок.

Что лично меня приятно удивило, то это такая же беспроблемная работа Teensy с сетевым чипом, как и общая адекватная работа самого контроллера — сетевое соединение просто работает. Отсутствуют какие-либо глюки или проблемы.



Система загрузилась, стартовали все сервисы, всё железо адекватно определилось, по сети без проблем получено время по NTP. Сервер работает в тестовой конфигурации.



Ещё небольшой коммент, это уже наверное в качестве курьёза. Ниже представлено наглядное сравнение объёмов оперативной памяти Arduino Mega и Teensy 4.1. Здесь мы имеем в 125 раз больше оперативной памяти (смайл).



Как говорится, почувствуйте разницу. Тут уже, при наличии соответствующей квалификации, можно запилить свой собственный мини-Linux и вообще ни в чём себе не отказывать.

Примеры проектов


На Teensy 4 сделано огромное количество проектов — роботы, квадрокоптеры, синтезаторы, системы иллюминации на светодиодах, вывод видео на LED матрицы и прочие виды дисплеев, анализаторы и визуализаторы сигналов и т. д. и т. п.

В качестве наглядного примера одного из таких (потрясающих) проектов можно посмотреть ролик о работе светодиодного куба 16х16х16 на светодиодах WS2812 с индивидуальной адресацией. Всей этой феерией из 4096 светодиодов управляет… да, именно Teensy 4.



Также для Teensy различными компаниями и отдельными энтузиастами выпускаются «материнские» платы для различных сфер применения — от тех же плат синтезаторов до целых комплексов для разработки на Teensy.



О чём не удалось рассказать


Очень и очень о многом. Teensy 4.1 — это невероятно обширная тема, все аспекты которой невозможно охватить в одной статье. За бортом осталось описание криптографических возможностей Teensy, работа в качестве периферийного устройства или USB хоста, работа часов реального времени (RTC), управление питанием и режимами работы контроллера, работа с DMA каналами доступа к памяти, работа с таймерами и т. д. и т. п.

Проблемы


Проблем я не заметил, из того, что мне не очень понравилось, могу отметить только большое время компиляции проекта. Ни для одной другой платформы код так долго не компилируется. На i5 работать не очень комфортно, желательно использовать какое-то более мощное железо.

Из приколов могу отметить только отсутствие кнопки «Reset» на плате контроллера. Как автор такой великолепный разработки до этого додуматься — совершенно непонятно. В руководстве предлагается перезагружать контроллер программно. Тут я даже не знаю что сказать.

Заключение


Мощная платформа с великолепными возможностями и качественной программной поддержкой — у меня за всё время тестирования не было ни одного инцидента — всё работает как часы.

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



Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале



Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.