Программирование ARM Плата разработчика Teensy 4.0 Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Плата разработчика Teensy 4.0 Печать
Добавил(а) microsin   

Платка Teensy® 4.0 [1] основана на довольно мощном процессоре MIMXRT1062DVL6A [2] (ARM Cortex-M7 600 МГц) в корпусе LFBGA196, и её можно программировать в среде Arduino (на момент перевода документации это Arduino 1.8.16 при установленном патче Teensyduino, Version 1.55).

Teensy40 front view fig01

Рис. 1. Общий вид на верхнюю сторону платы Teensy 4.0.

Основные параметры и возможности Teensy 4.0:

• ARM Cortex-M7, частота тактов 600 МГц.
• Блок арифметики с плавающей запятой 64 и 32 бита.
• 1984K Flash, 1024K RAM (512K с повышенным быстродействием), 1K EEPROM (эмулируется с помощью FLASH).
• Устройство USB High Speed 480 мегабит/сек и поддержка хоста USB 480 мегабит/сек.
• 40 цифровых портов ввода/вывода, 31 выводов портов PWM (ШИМ).
• 14 аналоговых ножек ввода (ADC).
• 7 последовательных портов, 3 порта SPI, 3 порта I2C.
• Цифровые порты звука: 2 порта I2S/TDM и 1 S/PDIF.
• 3 порта шины CAN (1 с поддержкой CAN FD).
• 32 канала DMA общего назначения.
• Аппаратный блок криптографии (Cryptographic Acceleration) и аппаратный генератор случайных чисел (Random Number Generator).
• Часы (RTC) с отсчетом даты и времени.
• Программируемая система ввода/вывода (FlexIO).
• Конвейер обработки графики (Pixel Processing Pipeline).
• Peripheral cross triggering.
• Управление питанием (Power On/Off management).

Функция Teensy 4.1 Teensy 4.0
Ethernet 10/100 Mbit DP83825 PHY (6 ножек) нет
USB Host 5 ножек с функцией управления питанием/горячего подключения устройств USB 2 ножки с контактами SMT(1)
SDIO (4-разрядная шина данных) Micro SD Socket 8 ножек SMT(1)
Ножки PWM 35 31
Аналоговые входы 18 14
Последовательные порты 8 7
Память FLASH 8 мегабайт 2 мегабайта
Память QSPI 2 чипа + память программ память программ
Штыревые контакты для подключения к плате макетирования (breadboard I/O) 42 24
Выводы SMT(1) 7 16
Сигналы карты SD 6 0
Всего ножек ввода/вывода 55 40

Примечание (1): контактные площадки меди на обратной стороне платы.

[Программное обеспечение для разработки]

Arduino IDE + Teensyduino. Популярная среда разработки Arduino вместе с установленным плагином Teensyduino это основной инструмент программирования для Teensy. На Windows, Linux и старых Mac сначала устанавливается Arduino, затем запускается инсталлятор Teensyduino, который добавляет поддержку Teensy для Arduino IDE. On newer Macs, an all-in-one download is provided. Teensyduino includes a large collection of libraries which are tested and optimized for Teensy. Other libraries may be installed manually or by Arduino's library manager.

Примечание: на момент написания статьи должна устанавливаться версия Arduino 1.8.16 и Teensyduino версии 1.55 [3]. Внимание: инсталлятор Teensyduino 1.55 не поддерживает установку на более новые версии Arduino. Для подробной информации о совместимости версий обращайтесь на страничку загрузки Teensyduino [3].

Visual Micro. Это программная надстройка, которая дает возможность использовать Microsoft Visual Studio для программирования Arduino-совместимых плат, включая Teensy. Поддерживается только на операционная система Windows. Visual Micro коммерческий, платный продукт.

PlatformIO. Это кроссплатформенная IDE с многими продвинутыми функциями. Поддерживаются Windows, Linux и Macintosh.

CircuitPython. Эта система предоставляет HEX-файл, который Вы программируете в Teensy 4.0 с помощью загрузчика Teensy Loader (см. описание далее). Затем Teensy представляется на компьютере как флешка (USB-диск), куда копируется или сохраняется Ваш код на языке Python. CircuitPython не полностью поддерживает всю доступную аппаратуру Teensy 4.0.

Командная строка + Makefile. Это не графическая среда программирования, предоставляемая инсталлятором Teensyduino.

Teensy 4.x: {каталог установки Arduino}/hardware/teensy/avr/cores/teensy4/Makefile
Teensy LC & 3.x: {каталог установки Arduino}/hardware/teensy/avr/cores/teensy3/Makefile

[Процессор Teensy 4.0]

Плата Teensy 4.0 построена на основе процессора MIMXRT1062DVL6A компании NXP [2].

Производительность. ARM Cortex-M7 предоставляет очень мощное ядро CPU микроконтроллера для встраиваемых систем реального времени. Производительность CPU в несколько раз больше, чем у обычных 32-битных микроконтроллеров.

Teensy40 coremark barchart fig02

Рис. 2. Сравнение производительности процессоров плат Arduino на тесте CoreMark Benchmark.

Двойная суперскалярная архитектура. Cortex-M7 представляет собой двойной суперскалярный процессор. Это означает, что M7 может выполнить 2 инструкции за один период тактовой частоты 600 МГц! Конечно, одновременное выполнение 2 инструкций зависит от обработки инструкций и регистров компилятором. Простые бенчмарки показывают, что код C++, скомпилированный Arduino показывает тенденцию выполнения 2 инструкций за такт с вероятностью от 40% до 50% при выполнении интенсивных вычислений с использованием целых чисел и указателей.

Floating Point Unit. Блок поддержки чисел с плавающей запятой (Floating Point Unit, FPU) аппаратно выполняет арифметические операции над 32-битными числами float и 64-битными числами double. Скорость математической обработки 32-разрядных чисел float приблизительно такая же, как скорость обработки целых чисел. Обработка 64-битных чисел double происходит в 2 раза медленнее, чем обработка 32-битных чисел float.

Tightly Coupled Memory. Это специальная аппаратная возможность, позволяющая Cortex-M7 ускорить доступ к памяти до 1 такта на обращение с помощью пары 64-разрядных шин. Шина ITCM предоставляет 64-разрядный маршрут для выборки инструкций. Шина DTCM в реальности это пара 32-битных маршрутов, позволяющая M7 выполнить 2 раздельных доступа к памяти за 1 период тактов. Эти экстремально скоростные шины отделены от основной шины M7 AXI, через которую происходит доступ к другой (не TCM) памяти и периферийным устройствам.

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

Предсказание ветвлений. Cortex-M7 это первый микроконтроллер ARM, использующий технику предсказания условных переходов в исполнении кода (branch prediction). На платформах Cortex-M4 и более ранних выполнение циклов и другого кода с условными переходами требовали на выполнение ветвлений 3 такта. На M7 после того, как цикл выполнится несколько раз, предсказание ветвления устраняет дополнительные расходы процессорного времени, в результате чего на ветвление тратится только один такт вместо трех.

Цифровая обработка сигналов. DSP-инструкции ускоряют обработку сигналов, реализацию цифровых фильтров и преобразований Фурье. Библиотека Audio автоматически использует эти DSP-инструкции.

[Внешние выводы портов]

У Teensy 4.0 всего 40 ножек для ввода и вывода сигналов. К 24 из них получить доступ проще всего, потому что они разведены на обычные штыревые выводы. Остальные выводы разведены на контактные площадки меди с обратной стороны платы.

Teensy40 card10 rev2 pinout top fig03

Рис. 3. Вид на контактные площадки с верхней стороны платы.

Teensy40 card10 rev2 pinout bottom fig04

Рис. 4. Вид на контактные площадки с нижней стороны платы.

[Цифровые порты]

Цифровой ввод. Порты могут использоваться для ввода логических уровней 0 или 1. По умолчанию ножки портов Teensy 4.0 работают на ввод (входы INPUT), большинство с keeper-резистором. Выводы Teensy 4.0 могут работать с уровнями напряжений от 0V до 3.3V, они не обладают функцией совместимости с уровнями 5V (not 5V tolerant). Поэтому не подавайте на ножки напряжения свыше 3.3V.

Резисторы Pullup/Pulldown/Keeper. Все цифровые выводы обладают опциональной возможностью подключать внутренние подтягивающие резисторы типа pullup, pulldown или keeper. Они используются для подтяжки логического уровня к лог. 1 (HIGH), или к лог. 0 (LOW), или к одному и тому же уровню, если вход не управляется внешним цифровым сигналом. Обычно эти резисторы используются для подключения внешних кнопок и перемычек. Для настройки встроенных резисторов подтяжки должна использоваться функция pinMode с параметром INPUT_PULLUP или INPUT_PULLDOWN.

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

Цифровой вывод. Все цифровые порты могут также работать как выход. Для этого должна использоваться функция pinMode с параметром OUTPUT (выход с двухтактным буфером) или OUTPUT_OPENDRAIN (выход с открытым стоком). Функции digitalWrite и digitalToggle используются для управления ножкой выхода. Уровень лог. 1 (HIGH) имеет напряжение 3.3V. Рекомендуемый максимальный выходной ток 4 мА.

ШИМ. 31 цифровых порта поддерживают функцию широтно-импульсной модуляции (Pulse Width Modulation, PWM). Это может использоваться для управления скоростью вращения мотора, яркостью лампочек или светодиодов (LED) или других целей, где необходимо управлять средней выходной мощностью с помощью ШИМ (PWM). Также PWM может использоваться для синтеза звуковых сигналов. PWM управляется функцией analogWrite. 19 групп PWM могут работать на разных частотах модуляции, которыми управляет функция analogWriteFrequency.

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

Настраиваемая нагрузочная способность. Выходное сопротивление каждого выхода может управляться выбором одного из 7 значений от 150 Ом (самый маломощный выход) до 21 Ом (самый мощный выход).

Настраиваемая полоса пропускания. Полоса пропускания выхода также программируется, 4 вариантами: 50, 100, 150 и 200 МГц.

Ножка LED. Вывод порта 13 традиционно в системе программирования Arduino подключен к светодиоду (LED). Для зажигания светодиода этот порт должен быть настроен как выход. Если же порт 13 используется как вход, то внешний сигнал должен быть достаточно мощным, чтобы подать на порт 13 уровень лог. 1, поскольку светодиод создает дополнительную нагрузку. Для порта 13 функция pinMode не должна использоваться с параметром INPUT_PULLUP (это вызовет слабое свечение LED и смещение уровня на входе порядка 2V).

[Аналоговые порты]

Аналоговые входы. 14 ножек портов могут использоваться как аналоговые входы (АЦП), используемые для оцифровки сигналов датчиков, измерения уровня напряжения или обработки других аналоговых сигналов. Базовый аналоговый ввод осуществляется функцией analogRead. Разрешающая способность по умолчанию составляет 10 бит (диапазон кодирования сигнала на входе от 0 до 1023), но это можно настроить функцией analogReadResolution. Аппаратура позволяет реализовать разрешающую способность до 12 бит, но на практике из-за шума более удобнее использовать 10 бит. Более продвинутые возможности доступны при использовании библиотеки ADC.

Диапазон для аналогового ввода фиксирован, и составляет от 0V до 3.3V. На плате Teensy 4.0 функция analogReference() не работает. Аналоговые выводы не допускают работу с уровнями 5V (not 5V tolerant). Не подавайте на аналоговые выводы уровни, превышающие по напряжению 3.3V.

Компараторы. Аналоговые компараторы могут преобразовать внешний аналоговый сигнал в цифровой, с точно определенным порогом напряжения, по которому сигнал квалифицируется как 0 или 1 (одноразрядный АЦП).

[Интерфейсы коммуникации]

Устройство USB. Основной метод обмена данными с внешним миром для Teensy - интерфейс USB, который работает в режиме устройства / периферии USB со скоростью 480 мегабит/сек (High Speed USB). Программное обеспечение Teensyduino поддерживает многие типы коммуникаций USB с компьютером PC или Mac, которые выбираются через меню Tools -> USB Type. Некоторые из этих типов устройств могут использоваться одновременно (композитное устройство USB).

Teensy40 Arduino USB Type menu fig05

Рис. 5. Меню Tools -> USB Type конфигурирует тип устройства USB, который будет реализован Teensy.

Serial. Такой тип устройства виден на компьютере как COM-порт (Windows) или последовательное устройство serial (Mac, Linux). Serial используется по умолчанию, и это наиболее часто используемый тип коммуникаций. В частности режим Serial используется утилитой монитора среды Arduino (Arduino Serial Monitor) для вывода отладочных сообщений. Байты передаются в обоих направлениях на максимальной скорости USB (настройка baud rate COM-порта игнорируется).

Библиотека Teensyduino содержит оптимизированный код для поддержки высокой скорости последовательной передачи данных через USB. При обычном использовании с Arduino Serial Monitor режим USB Serial Mode платы Teensy совместим с обычным программным обеспечением, разработанным для последовательных портов, например CoolTerm (будут работать и другие утилиты последовательного терминала, такие как Putty, TerraTerm, SecureCRT и т. п.). В среде Arduino последовательное устройство доступно для Teensy как устройство Serial. В режимах двойного и тройного устройства добавляются SerialUSB1 и SerialUSB2.

Emulated Serial. Настройка типа USB, в котором отсутствует последовательный интерфейс, и для его эмуляции используется класс интерфейса HID. В этих режимах PC или Mac не будут определять устройство как COM-порт или как serial-устройство, но Вы все еще сможете использовать вызовы Serial.print() для передачи текста в Arduino Serial Monitor.

MIDI - Musical Instrument Device. MIDI часто используется для ручек управления интерфейса пользователя, слайдеров и кнопок для музыкального программного обеспечения и устройств акустики и музыкального сопровождения. Сообщения MIDI могут отправляться в обоих направлениях. Teensyduino MIDI обеспечивает совместимость этого класса устройства с Macintosh, Linux и Windows при использовании только их встроенных драйверов. Режимы MIDIx4 & MIDIx16 предоставляют 4 или 16 виртуальных порта / кабеля MIDI. Имя устройства MID, которое видит компьютер, можно настроить.

Audio. Это устройство предназначено для двунаправленной передачи стереофонической звуковой информации. Устройство USB Audio компьютер видит как звуковую карту USB. С помощью свойств звука компьютера можно проигрывать звуковые потоки через Teensy, и программы, которые записывают или обрабатывают звук, могут получать аудиоданные от Teensy как если бы это был USB-микрофон. USB Audio подразумевает совместное использование библиотеки Teensy Audio, что позволяет интегрировать звук Вашего компьютера с любой системой обработки звука, которую Вы разработаете на Teensy.

Keyboard - стандартная USB-клавиатура на 104 клавиши. Можно передавать нажатия клавиш в компьютер, позволяя управлять почти любым программным обеспечением. Также могут использоваться клавиши управления Media-устройством (play, pause, volume, и т. п.). Поддерживаются многие раскладки клавиатур, отличающиеся от раскладки US, что настраивается через меню Tools -> Keyboard Layout.

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

Joystick. Это игровой контроллер с поддержкой 6 осей (X, Y, Z, Zr, Slider1, Slider2), 32 кнопок и 1 верхней hat-кнопкой. Тип Joystick полезен для управления играми или других программных интерфейсов, отвечающих на перемещения джойстика.

Touchscreen - эмулирует тачскрин с возможностью обнаружения до 10 позиций пальцев.

MTP Disk - Media Transfer, на компьютере такое устройство видится как телефон или камера с общими файлами.

Flight Sim - позволяет интеграцию с программным обеспечением X-Plane flight simulator. Переменные и органы управления в симуляторе привязаны к переменным в коде, работающем на Teensy.

Raw HID - позволяет обмениваться 64-байтными сообщениями с пользовательским ПО, работающим на компьютере.

Хост USB. Второй порт USB работает в режиме хоста, позволяя подключать к нему устройства USB. Для этого на Teensy 4.0 используются две маленькие контактные площадки SMT на обратной стороне платы (см. рис. 4).

Этот порт работает полностью независимо от основного порта устройства USB платы Teensy 4.0, так что можно одновременно работать с устройствами USB, подключенными к порту USB хоста, и обмениваться данными с компьютером через порт USB устройства. Порт хоста USB работает на скорости 480 (High Speed USB), 12 (Full Speed USB) или 1.5 (Low Speed USB) мегабит/сек, в зависимости от скорости устройства USB, которое подключено. Для подключения нескольких устройств могут использоваться хабы USB. Для порта хоста USB используется библиотека USBHost_t36. Кабель от порта хоста USB обычно подключается или к хабу, или к устройству USB.

Serial. 7 последовательных портов позволяют подключать UART-устройства наподобие MIDI, приемников GPS, устройства управления освещением DMX, беспроводные модули ESP, и т. д. Все эти 7 последовательных портов полностью независимы друг от друга, и могут передавать и принимать данные одновременно. Эти порты не используются вместе с USB (что имеет место на некоторых платах Arduino). На всех 7 портах есть стеки FIFO для повышения производительности работы на высоких скоростях передачи.

I2C. Есть 3 порта для I2C (сигналы SDA и SCL), позволяющие подключать широкий спектр микросхем с таким интерфейсом. Для I2C используется библиотека Wire. Все порты I2C поддерживают стандартные скорости 100, 400 и 1000 килобит/сек.

SPI. Есть 3 порта для SPI (с сигналами MOSI, MISO, SCK), позволяющие подключить высокоскоростные чипы, SD-карты, дисплеи. Для этого используется библиотека SPI. Первый порт SPI снабжен FIFO для повышения устойчивости высокоскоростных передач. Каждый чип, подключенный к шине SPI, требует сигнала выборки (chip select, CS). Большинство библиотек, использующих SPI, могут использовать для этой цели любой цифровой вывод порта. Также порты SPI предоставляют возможность аппаратной выборки CS, которые используются в специальным образом оптимизированных библиотеках для повышения производительности.

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

FlexIO. Очень гибко конфигурируемое периферийное устройство с собственным набором ножек портов, регистров сдвига, таймеров, логики и машины состояний. На основе FlexIO можно реализовать UART (serial), I2C, SPI, I2S audio, PWM. Также можно строить интерфейсы с уникальными свойствами, такими как реализованные в библиотеке TriantaduoWS2811.

[Дисплеи]

ILI9341 320x240 Color TFT. Эти дисплеи лучше всего поддерживаются Teensy 4.0, для них есть несколько высокопроизводительных библиотек, обеспечивающих высокую скорость обновления изображения. ILI9341 обычно самый лучший выбор дисплея из-за отличной программной поддержки.

Teensy40 ILI9341 Color TFT Display fig06

Рис. 6. Экран ILI9341 320x240 Color TFT.

ST7735 Color TFT. Эти дисплеи немного меньше и у них меньше разрешение картинки, чем у ILI9341. Существуют оптимизированные библиотеки для ST7735 и ST7789, которые работают также очень хорошо.

SSD1306 Monochrome OLED. Эти маленькие дисплеи очень популярны и хорошо поддерживаются.

Pixel Pipeline. Специальная графическая подсистема, которая может выполнять преобразования цветового пространства, делать затемнение (alpha blending) и цветовую коррекцию (chroma keying), билинейное масштабирование (bilinear resize) и другие операции над буферами кадра (frame buffers). Программная поддержка этой функции весьма экспериментальна.

Почти все дисплеи, работающие с библиотеками Arduino, также работают и на Teensy 4.0.

[Audio]

Teensy40 Audio Design Tool fig07

Рис. 7. Программа Audio Design Tool упрощает создание системы обработки звуковых потоков.

I2S/TDM. 2 цифровых звуковых порта, наиболее часто используемые с audio-шилдом. Эти порты могут одновременно передавать и принимать до 8 аудиоканалов при использовании протокола I2S, или до 16 каналов при использовании TDM.

I2SI - 1 ножка stereo-выхода, 1 ножка stereo-входа, 3 stereo-входа или ножки выходов.
I2S2 - 1 ножка stereo-выхода, 1 ножка stereo-входа.

Teensy40 Audio Shield fig08

Рис. 8. Audio Shield преобразует I2S Digital Audio в аналоговые stereo входы и выходы.

Альтернативно может использоваться специальный формат для недорогого DAC-чипа PT8211 DAC.

Teensy40 PT8211 DAC fig09

Рис. 9. PT8211, недорогой DAC с хорошим качеством выходного сигнала stereo.

[Управление освещением, светодиоды]

WS2812B/NeoPixel. Две высокопроизводительные, не блокирующие выполнение основного кода библиотеки используют светодиоды (Light-Emitting Diodes, LED) WS2812B.

Библиотека OctoWS2811 передает любое количество выходов параллельно, позволяя обновлять свечение почти любого количества LED с частотой до 30 Гц, что уже подходит для воспроизведения видеосигнала. На Teensy 4.0 библиотека OctoWS2811 поддерживает любое количество цифровых выводов, не ограничиваясь только 8 выводами, как было на Teensy 3.x.

Teensy40 OctoWS2811 Library controlling 1920 WS2812B RGB LEDs 30Hz fig10

Рис. 10. Библиотека OctoWS2811 управляет 1920 шт. WS2812B RGB LED с частотой кадров 30 Гц.

Библиотека WS2812Serial передает данные на один выход, однако можно использовать до 8 экземпляров класса этой библиотеки. Не блокирующая передача использует DMA для автоматического вывода данных, в то время как основной код продолжает работать. Это позволяет реализовать более сложные анимации или более эффективную коммуникацию и выполнение других задач по сравнению с традиционной реализацией протокола WS2812B с блокированием.

Шилды SmartMatrix и SmartLED для LED-панелей HUB75 RGB. Шилд SmartLED (версии 5) позволяет Teensy 4.0 управлять высококачественной графикой на большом массиве панелей HUB75 RGB LED (от 32x16 до 128x64 точек). Библиотека SmartMatrix упрощает рисование базовых графических изображений, выводит статический текст и делать его скроллинг, рисовать красивые картинки с помощью FastLED и проигрывать анимированные GIF на панели. SmartMatrix использует специальные функции Teensy 4.0, чтобы посылать данные графики с минимальными затратами вычислительного времени CPU, так что можно параллельно загрузить CPU другими задачами, такими как коммуникации через SPI, декодирование файла, или формирование графики сложных изображений.

DMX Lighting Control. Любой из 7 последовательных портов может эффективно использоваться для обмена данными с DMX-контроллерами управления освещением.

RGB LED. Обычные LED могут управляться с применением PWM (ШИМ) для формирования различной яркости свечения. Этот функционал доступен с применением библиотек SoftPWM и ShiftPWM.

Teensy40 ShiftPWM controlling 16 RGB LEDs 74HCT595 fig11

Рис. 11. ShiftPWM управляет 16 шт. RGB LED через 6 микросхем 74HCT595.

[Тактирование, RTC, таймеры]

Кварцы и генерация тактов. Предоставляется 2 кварцевых резонатора для точного формирования тактовых частот и интервалов времени. Кварц на 24 МГц используется для формирования базовой тактовой частоты системы и большинства периферийных устройств. Система синтеза тактов с фазовой подстройкой частоты (phase locked loop, PLL) повышает частоту тактов 24 МГц до нужного значения.

Teensy40 Arduino CPU speed menu fig12

Рис. 12. Меню выбора основной тактовой частоты.

Отдельный кварц на 32.768 кГц используется для часов реального времени (Real Time Clock, RTC). Если подключить к VBAT дисковую батарейку на 3V, то генератор 32.768 кГц продолжит работу, позволяя RTC отсчитывать секунды, минуты, часы, и дату даже когда основной источник питания выключен и программа не работает.

Teensy40 CR2032 Coin Cell VBAT fig13

Рис. 13. Батарейка CR2032, подключенная к VBAT, позволяет Teensy 4.0 продолжать отсчитывать дату/время, когда общее питание выключено.

Формирование интервалов времени. 4 таймера выделены для точного формирования интервалов времени. Они конфигурируются с помощью класса IntervalTimer.

Таймеры ШИМ (PWM). 32 таймера управляют ножками PWM, или могут использоваться для других функций, связанных с интервалами времени и генерацией тактов. Обычно к этим таймерам осуществляется доступ через функцию analogWrite или библиотеки, однако эти таймеры обладают весьма продвинутым функционалом, к которому можно получить доступ путем прямого управления их регистрами.

FlexPWM1 Module0 - управляет ножками PWM 1, 36, 37.
FlexPWM1 Module1 - управляет ножками PWM 0, 34, 35.
FlexPWM1 Module2 - управляет ножками PWM 24, 38, 39.
FlexPWM1 Module3 - управляет ножками PWM 7, 8, 25.
FlexPWM2 Module0 - управляет ножками PWM 4, 33.
FlexPWM2 Module1 - управляет ножкой PWM 5.
FlexPWM2 Module2 - управляет ножками PWM 6, 9.
FlexPWM2 Module3 - нет управления ножами.
FlexPWM3 Module0 - нет управления ножами.
FlexPWM3 Module1 - управляет ножками PWM 28, 29.
FlexPWM3 Module2 - нет управления ножами.
FlexPWM3 Module3 - нет управления ножами.
FlexPWM4 Module0 - управляет ножкой PWM 22.
FlexPWM4 Module1 - управляет ножкой PWM 23.
FlexPWM4 Module2 - управляет ножками PWM 2, 3.
FlexPWM4 Module3 - нет управления ножами.
QuadTimer1 Module0 - управляет ножкой PWM 10.
QuadTimer1 Module1 - управляет ножкой PWM 12.
QuadTimer1 Module2 - управляет ножкой PWM 11.
QuadTimer1 Module3 - нет управления ножами.
QuadTimer2 Module0 - управляет ножкой PWM 13.
QuadTimer2 Module1 - нет управления ножами.
QuadTimer2 Module2 - нет управления ножами.
QuadTimer2 Module3 - нет управления ножами.
QuadTimer3 Module0 - управляет ножкой PWM 19.
QuadTimer3 Module1 - управляет ножкой PWM 18.
QuadTimer3 Module2 - управляет ножкой PWM 14.
QuadTimer3 Module3 - управляет ножкой PWM15.
QuadTimer4 Module0 - нет управления ножами. Используется библиотекой OctoWS2811 и библиотекой ADC.
QuadTimer4 Module1 - нет управления ножами. Используется библиотекой OctoWS2811.
QuadTimer4 Module2 - нет управления ножами. Используется библиотекой OctoWS2811.
QuadTimer4 Module3 - нет управления ножами. Используется библиотекой Audio для тайминга ADC и библиотекой ADC.

Watchdog Timer. 3 отдельных сторожевых таймера (watchdog timer, WDT) могут перезагрузить Teensy, если программное обеспечение потерпело сбой или зависло. Если сторожевой таймер запущен, то он должен периодически сбрасываться программным обеспечением Teensy. Если программа не сбрасывала сторожевой таймер слишком долго, то Teensy автоматически перезагрузится.

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

GPT1, GPT2 - обычные 32-битные таймеры (Generic Periodic Timer).
Quadrature Encoders - 4 специальных таймера предназначены для декодирования квадратурных сигналов.

Cycle Counter. 32-битный счетчик, который инкрементируется с каждым тактом CPU (частота инкрементирования 600 МГц). Программа может прочитать ARM_DWT_CYCCNT, чтобы точно измерить короткие интервалы времени.

SysTick. Этот системный таймер генерирует прерывание каждую миллисекунду. Большинство библиотек используют этот таймер для отсчета интервалов времени. Также его могут использовать операционные системы реального времени (такие как FreeRTOS) для работы своего планировщика.

Software Timing. Программные функции для реализации задержек:

delay(), delayMicroseconds(), delayNanoseconds(). Эти функции формируют задержку в единицах миллисекунд, микросекунд и наносекунд соответственно.

elapsedMillis, elapsedMicros - эти классы C++ работают как переменная, которая автоматически инкрементируется с каждой миллисекундой и микросекундой соответственно. Эти классы могут использоваться как есть, либо модифицированы, что значительно упрощает реализацию повторяющихся действий в программе, измерения прошедших интервалов времени, отслеживания таймаутов, и т. д. Количество таких переменных ограничено только доступной памятью.

millis(), micros() - стандартные функции Arduino для отслеживания системного времени в миллисекундах и микросекундах.

Real Time Clock - Date & Time. RTC может отсчитывать дату и время (date/time). Библиотека Time обычно используется вместе с RTC. Teensy Loader автоматически инициализирует RTC временем хоста разработки PC, когда загружает код firmware (uploading) в память Teensy. Если при этом дисковая батарейка 3V подключена к VBAT, то RTC продолжит отсчет времени, когда основное питание будет отключено (см. рис. 13).

[Питание]

USB. Часто платка Teensy используется вместе с компьютером, и тогда она получает питание через кабель USB (порт устройства USB). Напряжение питания USB поступает на вывод VUSB, который соединен с VIN и подает питание на всю плату.

Вывод VIN. Когда питание от USB не используется, может быть подано питание 5V на вывод VIN. Поскольку VIN и VUSB соединены, нельзя подавать внешнее питание на VIN, когда подключен кабель USB, чтобы не допускать попадания внешнего питания на порт USB компьютера (или надо предпринимать специальные меры, например использование последовательного включения защитного диода Шоттки). Альтернативно можно перерезать перемычку на обратной стороне платы, чтобы разделить цепи VUSB и VIN, что позволит безопасно подключать кабель USB для программирования Teensy 4.0.

3.3V. На плате Teensy 4.0 установлен регулятор напряжения LDO, который уменьшает напряжение 5V от VUSB/VIN до напряжения 3.3V, которое непосредственно запитывает основной процессор и все другие элементы аппаратуры. От вывода 3.3V могут быть запитаны внешние схемы, однако максимальный потребляемый ими ток не должен превышать 250 mA. Teensy 4.0 не предназначена получать питание от вывода 3.3V, но это может быть реализовано путем специальной модификации схемы платы.

USB Host. Плата Teensy 4.0 не снабжена схемой управления питанием для подключенных к хосту USB внешних устройств (эти схемы на Teensy 4.1 реализованы). Порт хоста USB выводит только сигналы данных (D+ и D-). Когда Teensy 4.0 получает питание от кабеля USB, или ограничена источником питания 5V, для подключаемых устройств USB к порту хоста не поддерживается функция горячего подключения.

MIMXRT1062DVL6A. При работе на частоте 600 МГц плата Teensy 4.0 потребляет приблизительно 100 mA. Уменьшение частоты CPU до 528 МГц или ниже снижает потребление тока.

Функции пониженного энергопотребления. Библиотека Snooze [].

Управление напряжением питания CPU. DC-DC buck-преобразователь понижает напряжение питания, которое необходимо для ядра CPU. Программное обеспечение может управлять этим напряжением с шагом уровней 50 mV. На частоте 600 МГц CPU работает от 1.25V. Для частоты 528 МГц и ниже используется 1.15V. На частоте 24 МГц для CPU достаточно уровня 0.95V. При повышении частоты сверх номинала (overclocking) автоматически используются более высокие напряжения.

VBAT. Как уже упоминалось, к выводу VBAT может быть подключено резервное питание для поддержания работы RTC (отсчет даты и времени, когда основное питание отключено). Рекомендуется для этой цели использовать дисковую батарейку CR2032, хотя могут использоваться и другие батарейки на 3V.

Вывод On/Off и управление питанием. Есть специальное состояние пониженного энергопотребления, в котором выключается питание 3.3V. Это может управляться выводом On/Off платы, если подключить кнопку между этим выводом и шиной GND. Во время работы программы удержание этой кнопки на время больше 4 секунд выключает питание. Если питание выключено, то нажатие этой кнопки на 0.5 секунд снова включит питание 3.3V, и процессор перезагрузится. Если к VBAT подключена батарейка 3V, то состояние питания (было оно включено или выключено выводом On/Off) сохранится, когда основное питание отключено. Без VBAT состояние питания 3.3V при отключении внешнего питания всегда будет возвращаться к состоянию включено, даже когда кнопка On/Off использовалась для выключения 3.3V перед тем, как было отключено основное питание VIN/VUSB.

[Память]

Teensy40 memory fig14

Рис. 14. Три региона памяти Teensy 4.0.

Program/Flash. У Teensy 4.0 есть 2 мегабайта памяти flash, предназначенной для хранения программы (код firmware). Также память flash может использоваться для хранения переменных только для чтения и массивов (объектов, определенных через PROGMEM и F()). Часть памяти flash с помощью библиотеки LittleFS может использоваться как файловое хранилище. Верхняя область 64K этой памяти зарезервирована для эмуляции EEPROM (энергонезависимых данных) и программы LED blink restore.

RAM. Оперативная память 1024K доступна для переменных и данных. Половина этой памяти (RAM1) обладает повышенным быстродействием (tightly coupled memory). Другая половина (RAM2) оптимизирована для доступа DMA. Обычно большие массивы и буферы данных размещаются в RAM2 для экономии RAM1, которая выделяется для обычных переменных.

EEPROM. Поддерживается 1080 байт эмулируемой памяти EEPROM. Запись в эту память временно приостанавливает выполнение кода из flash. Для доступа к памяти эмулируемой памяти EEPROM обычно используется библиотека EEPROM, также могут использоваться функции AVR libc.

Ключевые слова для статического распределения памяти. Когда компилятор выполняет сборку кода программы, все глобальные переменные, переменные static и компилируемый код - все эти данные размещаются в выделенных областях памяти. Это называется статическим выделением памяти (static allocation), потому что адреса памяти объектов (переменных, функций) фиксируются в момент компиляции. По умолчанию компилятор пытается выделить память для переменных и данных с использованием сверхбыстрой (ultra-fast) памяти DTCM и ITCM. Следующие ключевые слова позволяют управлять размещением объектов, чтобы компилятор размещал переменные и код в нужных областях памяти.

DMAMEM - переменные, определенные через DMAMEM будут размещаться в начале RAM2. Обычно сюда помещаются буферы и большие массивы. Эти переменные не могут быть инициализированы автоматически, Ваша программа сама должна записать туда начальные значения, если это было необходимо.

PROGMEM и F() - переменные, определенные через PROGMEM, и строки, заключенные в F(), будут размещаться только в памяти flash. К ним можно обращаться как обычно, не требуется использование специальных функций, которые использовались для 8-битных плат Arduino при чтении переменных PROGMEM.

FASTRUN - функции, определенные через FASTRUN, размещаются в начале RAM1. Их копия также находится в flash, откуда кодом запуска (код startup) они копируются в RAM1 и уже оттуда будут работать. К этим функциям при выполнении программы осуществляется доступ через шину Cortex-M7 ITCM, с максимально возможным быстродействием. По умолчанию функции без какого-либо указания типа памяти будут обрабатываться как FASTRUN. Маленькая область памяти обычно остается не использованной, потому что доступ через шину ITCM должен осуществляться через области памяти, размер которых нацело делится на 32K.

FLASHMEM - функции, определенные через FLASHMEM, выполняются непосредственно из flash. Если кэш Cortex-M7 пока не содержит копию этой функции, происходит некоторая задержка в выборках инструкций, пока код не скопируется в кэш M7. Ключевое слово FLASHMEM должно использоваться для кода startup и других функций, скорость работы которых не важна.

Динамическое выделение памяти. Существует возможность выделения (и освобождения) областей памяти во время работы программы - тех областей, которые не были задействованы статическим распределением памяти. Из-за специфичного определения адресов для каждой переменной, вычисляемого во время работы программы, такое выделение памяти называется динамическим (dynamic memory allocation). К динамическому выделению относятся:

Локальные переменные. Это переменные, которые используются в параметрах функции, и которые определены внутри функции, а также для возвращаемого значения из функции. Эти переменные обычно размещаются в стеке программы или в регистрах процессора. Также в стеке сохраняется текущее состояние программы и состояние обработчиков прерываний (Interrupt Service Routine, ISR). Стек начинается со старших адресов RAM1, и при выделении памяти растет вниз, в сторону уменьшения адреса. Область памяти для локальных переменных это область RAM1, не используемая кодом FASTRUN, а также инициализированными или обнуляемыми при старте глобальными переменными.

Heap (куча). Это области памяти, выделяемые библиотечными функциями malloc() языка C, оператором new языка C++, String-переменными Arduino. Куча размещается в RAM2, начинаясь сразу после переменных DMAMEM.

RTC RAM. 16 байт памяти связаны с RTC. Батарейка 3V, подключенная к VBAT, сохраняет содержимое этой памяти, когда основное питание выключено. К этой памяти происходит обращение через 32-битные регистры LPGPR0 .. LPGPR3.

SD Card. Встроенный слот карты SD позволит Вам хранить большие объемы данных. Для доступа к этой карте используется библиотека Arduino SD, для этого сделайте вызов SD.begin(BUILTIN_SDCARD). Слот карты SD использует быстрый 4-разрядный интерфейс SDIO для доступа к данным карты. Карты SD также могут подключаться через ножки SPI, это делается вызовом SD.begin(cspin), при этом используется более медленный доступ через одноразрядный протокол SPI.

SPI Flash. Чипы памяти Flash могут быть подключены через ножки SPI. Это поддерживается библиотеками SerialFlash и LittleFS.

[Программирование]

Teensy Loader. Непосредственное программирование памяти flash производится с помощью загрузчика и утилиты Teensy Loader. Среда разработки Arduino IDE (или другое программное обеспечение для разработки) используется для сборки исходного кода, после чего Arduino IDE автоматически запускает Teensy Loader, когда это необходимо (при выборе в меню Скетч -> Загрузка, или при нажатии горячих клавиш Ctrl+U). Если Ваш скомпилированный код сохранен в HEX-формате файла, то Teensy Loader может также использоваться отдельно, чтобы записать HEX-файл в память flash платки Teensy.

Teensy40 Teensy Loader Application fig15

Рис. 15. Основное окно утилиты Teensy Loader.

Автоматический вход в режим программирования. При разработке для Teensy после компиляции программы обычно происходит автоматическая загрузка. Утилита "teensy_reboot" ищет Teensy на всех портах USB, и отправляет запрос (serial baud rate или HID feature report) для автоматического перехода в режим программирования.

Program Pushbutton. Если код, который ранее был записан в Teensy, не прослушивает коммуникации USB, автоматический вход в режим программирования невозможен. Для этого случая на плате установлена кнопка, нажатие на которую переводит Teensy в режим программирования, что позволяет восстановиться из состояния активности плохого кода. Удержание этой кнопки переводит Teensy в режим программирования. Это не "кнопка сброса", которая перезапустит Вашу программу. Эта кнопка специально выделена для восстановления из плохого кода. Ножка для функции Program Pushbutton также позволяет внешней аппаратуре принудительно перевести плату в режим программирования.

Red LED. Красный светодиод выделен для отображения состояния загрузчика (Bootloader Active). Когда загрузчик активен и ждет обмена данными с компьютером, красный светодиод поддерживает не яркое свечение. Когда происходит запись загрузчиком в память flash, свечение становится ярким.

Teensy40 Red LED bootloader status fig16

Рис. 16. LED, отображающий состояние загрузчика.

Reset. На плате Teensy 4.0 нет аппаратного сигнала сброса. Сброс может быть осуществлен программно, с использованием сторожевых таймеров, или с помощью регистра SCB_AIRCR.

Memory Wipe & LED Blink Restore. Если кнопка программирования удерживается в течение 13 .. 17 секунд, плата Teensy 4.0 полностью сотрет энергонезависимую память и восстановит в памяти flash простейшую программу, мигающую светодиодом (simple LED blink). В начале этого интервала времени удержания кнопки red LED будет недолго мигать. Когда память flash стирается, red LED ярко светится. По завершении Teensy 4.0 автоматически перезагрузится и запустит программу simple LED blink, светодиод LED будет медленно мигать.

Bootloader Chip. Загрузчик Teensy 4.0 хранится в отдельной микросхеме памяти. Вся основная память чипа доступна для Вашей программы. При включении питания Ваша программа запустится немедленно. Загрузчик не запускается автоматически в момент старта (startup), как это происходит в большинстве Arduino-совместимых плат. Выделенный физически чип позволяет защитить загрузчик Teensy от доступа со стороны программы, что не позволяет программированию flash повредить или стереть загрузчик.

Code Security. Teensy 4.0 в настоящее время не поддерживает защиту кода (code security), шифрование и аутентификацию. Поддержка этих функций планируется в реализации для будущих плат.

[Специальные функции]

Nested Interrupt Controller. Возможность вложенности вызовов прерываний в соответствии с настроенными приоритетами позволяет добиться низкой латентности запуска обработчиков прерываний (ISR), скорость и своевременность обработки которых критически важна. Библиотеки Teensyduino используют вложенность вызовов прерываний (interrupt nesting) с уровнями приоритетов по умолчанию, которые позволяют библиотекам многих типов хорошо работать друг с другом.

Direct Memory Access (DMA). У процессора Teensy 4.0 есть 32-канальный контроллер прямого доступа к памяти (DMA) общего назначения. Эти каналы DMA используют оптимизированные библиотеки Audio, LED и для вывода на экран. Предоставлен заголовочный файл DMAChannel.h, описывающий уровень абстракции для DMA. Блоки периферии USB device, USB host, SD card и Ethernet также имеют встроенную поддержку для совместной работы с DMA.

Random Number Generator. Генератор случайных чисел это аппаратное устройство, генерирующее случайные данные с определенной скоростью. Для доступа к генератору случайных числе используется библиотека Entropy.

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

Temperature Sensor. Встроенный датчик температуры может измерить температуру внутри основного чипа. Для доступа к этому датчику может использоваться библиотека InternalTemperature.

[Техническая информация]

i.MX RT1060 Processor Reference Manual site:pjrc.com - вся полезная информация по программированию процессора.
i.MX RT1060 Crossover Processors for Consumer Products site:pjrc.com - даташит, где приведены только электрические спецификации.
W25Q16JV-DTR site:pjrc.com - даташит на чип памяти Flash.
Arm Cortex-M7 Processor Technical Reference Manual site:pjrc.com - техническое руководство по процессору.
Arm v7-M Architecture Reference Manual site:pjrc.com - руководство по архитектуре процессора, детально описывающее его внутреннее устройство.

[Габаритные размеры]

Teensy40 dimensions fig17

Рис. 17. Вид на габариты с верхней стороны платы.

Teensy40 dimensions fig18

Рис. 18. Размеры платы.

Teensy40 dimensions fig19

Рис. 19. Вид на габариты с нижней стороны платы.

[Принципиальная схема]

Teensy40 schematic fig20

Рис. 20. Принципиальная схема Teensy4.0.

[Размещение компонентов на плате]

Teensy40 component locations top fig21

Рис. 21. Размещение компонентов на верхней стороне платы Teensy4.0.

Teensy40 component locations bottom fig22

Рис. 22. Размещение компонентов на нижней стороне платы Teensy4.0.

[Ссылки]

1. Teensy 4.0 Development Board site:pjrc.com.
2. MIMXRT1062DVL6A site:nxp.com.
3. Download Teensyduino site:pjrc.com.
4. Teensy 4.0 site:aliexpress.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page