До потребительского рынка наконец добрались микроконтроллеры с частотой до 1 ГГц, с открытой документацией, набором разнообразного софта, примерами полезного применения и наличием в стоках. Это семейство i.MX RT. Их называют кроссоверы, потому что они претендуют на ниши, где до недавнего времени доминировали малинки и одновременно легко могут заместить старшие 8-битники не увеличивая цены и потребления. Мир кроссоверов - малые встраиваемые системы, устройства для интернета вещей (IoT), промышленная автоматика, преобразовательная техника, роботы и т.п.

Не без труда, но удалось получить отладочную плату MIMXRT1170-EVK с наиболее мощным чипом из семейства. Теперь осталось понять особенности применения такого рода чипов.

Зачем вообще такие быстрые микроконтроллеры?

Чипы серии i.MX RT позволяют реализовать функции ранее доступные только для мощных процессорных систем и SoC. Например локальное голосовое управление, распознавание лиц, взаимодействие с сервисами типа Alexa Voice Service, предиктивная диагностика оборудования, насыщенные графические интерфейсы.

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

А можно на них сделать квадрокоптер с прямым векторным управлением 4-мя моторами и трансляцией зашифрованного видео в реальном времени или умную колонку с массивом микрофонов для пространственной селекцией источников звука.

Необычно сильны меры предпринятые в i.MХ RT от взлома хакерами. Cекретный ключ хранится в RAM и стирается если от чипа отрывают резервное питание или манипулируют питанием, если чип пытаются заморозить или раскалить, если манипулируют частотой, если пытаются отпаять, если пытаются разгадать ключ по импульсам тока потребления или по задержкам. Это даёт возможность применять чипы в современных интерактивных платёжных терминалах.

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

Отладочная плата.

Отладочная плата MIMXRT1170-EVK содержит чип PIMXRT1176DVMAA. Буква P в начале названия говорит, что это инженерный экземпляр для прототипирования, т.е. может иметь аппаратные баги. Но это тем не менее один из самых скоростных чипов в семействе i.MX и он двух ядерный, поэтому тестируем его.

Плата на первый взгляд выглядит сложно. Но в её основе чип на ядре семейства ARM-Cortex-M, вернее двух ядрах. Т.е. имеем дело с младшим и довольно простым семейством от ARM. Аналогичную архитектуру имеют всем известные STM32. Сложный вид придаёт множество периферии на плате, но не вся она может работать одновременно. Часто чтобы задействовать тут или иную периферию на плате необходимо перепаивать резисторы согласно мануалу на плату.

В коробке с платой поставляется адаптер питания и модуль камеры. Можно на плату пристроить дисплей, WiFi модули, LTE модули, но их надо покупать отдельно. Присутствует посадочное место для пайки WiFi модуля LBEE5KL1DX-883 на чипе CYW4343W, если кому-то захочется попробовать драйвера WICED.

На плате размещён отладочный адаптер реализованный на чипе LPC4322. Адаптер работает в стандарте OpenSDA через USB на основе опенсорсного проекта DAPLink. Кроме отладочного канала имеет COM порт и виртуальный диск для загрузки прошивок. Таким образом для начала отладки ничего дополнительно не нужно приобретать.

В дополнение на плате присутствует разъем JTAG/SWD, через который можно подключить к микроконтроллеру внешние более производительные JTAG/SWD адаптеры.

Основные узлы платы

На плату можно подавать питание с одного из трех разъёмов. Найдите на диаграмме ниже из каких.

Основные разъёмы платы

Переходим к тестам

Работаем из среды IAR Embedded Workbench for ARM v9.30.1.
Можно и из MCUXpresso IDE, но IAR традиционно предоставляет больше возможностей для отладки. Хотя надо признать, что если пользоваться встроенным в плату OpenSDA адаптером, то IAR сильных преимуществ не покажет.

Предварительно конфигурируем на сайте NXP и скачиваем пакет софта SDK_2_12_1_MIMXRT1170-EVK.zip для нашей платы. Там будут и все пакеты и все примеры и тесты.

Тест производительности Ethernet

Начинаем с теста производительности Ethernet интерфейса. Тест находится в ветке boards\evkmimxrt1170\azure_rtos_examples\netx_duo_iperf\iar
Из названия понятно что будет применяться Azure RTOS совместно со стеком TCP протоколов NETX Duo.

На компьютере запускаем утилиту iperf3 с командной строкой следующего вида:

iperf3  -s -p 5201 

А на плате компилируем и запускаем тест из рабочего пространства netx_duo_iperf.eww.

Подключаем кабелем плату в локальную 1G сеть и в терминале через последовательный порт организуемый OpenSDA адаптером смотрим на диагностику подключения. Должны появиться следующие надписи:

После этого запускаем броузер и в нем вводим строку с адресом полученным нашей платой от локальной сети: http://192.168.8.105/

В результате видим в браузере окно приглашающее к тесту:

Окно с выдачей WEB сервера работающего на отладочной плате

По окончании теста видим фантастический результат:

Он говорит от том, что плата через интерфейс Ethernet 1G смогла выдать данные практически со скоростью 957 Mbps по протоколу UDP. Это очень круто для обычных микроконтроллеров.

Замеченные недостатки и баги.

Сразу было замечено несколько недостатков. Тест не работает с TCP и не работает из SDRAM. Загрузка и исполнение работают только из Quad SPI Flash. Но даже от туда при отладке по шагам происходит зависание на выполнении инициализации в следующей строке:

    /* Init System Pll2 pfd3. */
    CLOCK_InitPfd(kCLOCK_PllSys2, kCLOCK_Pfd3, 32);

После сброса питания тест начинает выполняться нормально.

i.MX RT явно не обещает лёгкого пути.

Тест производительности USB + SD диск

Тест расположен в ветке boards\evkmimxrt1170\usb_examples\usb_device_msc_disk\freertos\cm7\iar

Компилируем с опцией максимальной оптимизации по скорости и запускаем из Quad SPI Flash. В качестве SD карты используем Kingston CANVAS Select Plus 64GB. Используется FreeRTOS в качестве операционной системы на плате.

Скорость скачивания закачивания гигабайтных файлов оказалась в пределах 15-16 мегабайт в секунду.

При выполнении программы из SDRAM скорость доходила до 19.5 мегабайт в секунду. Это приблизительно в 5 раз медленней чем чтение аналогичной карты с помощью PC. Списываем это на 3-вольтовый SDIO и недостаточную оптимальность теста. Целостность файлов после пересылок была проверена.

Тест производительности криптографических функций

Тест расположен в ветке boards\evkmimxrt1170\mbedtls_examples\mbedtls_benchmark\cm7\iar

Компилируем с опцией максимальной оптимизации по скорости и запускаем из ITCM ARM т.е. из самой быстрой области выполнения программ. Используется аппаратный криптографический модуль чипа и тестовый набор функций из опенсорсного пакета Mbed TLS.
И были получены такие результаты:

mbedTLS version 2.28.0
fsys=996000000
Using following implementations:
  SHA: CAAM HW accelerated
  AES: CAAM HW accelerated
  AES GCM: CAAM HW accelerated
  DES: CAAM HW accelerated
  Asymmetric cryptography: CAAM HW accelerated

  MD5                      :  18018.54 KB/s,   52.63 cycles/byte
  SHA-1                    :  88982.97 KB/s,    9.54 cycles/byte
  SHA-256                  :  98965.59 KB/s,    8.43 cycles/byte
  SHA-512                  :  8316.75 KB/s,  115.59 cycles/byte
  3DES                     :  63092.71 KB/s,   14.07 cycles/byte
  DES                      :  136480.34 KB/s,    5.78 cycles/byte
  AES-CBC-128              :  68448.75 KB/s,   12.85 cycles/byte
  AES-CBC-192              :  59808.27 KB/s,   14.90 cycles/byte
  AES-CBC-256              :  53108.29 KB/s,   16.95 cycles/byte
  AES-GCM-128              :  65207.48 KB/s,   13.51 cycles/byte
  AES-GCM-192              :  57023.80 KB/s,   15.66 cycles/byte
  AES-GCM-256              :  50648.39 KB/s,   17.80 cycles/byte
  AES-CCM-128              :  36921.58 KB/s,   24.91 cycles/byte
  AES-CCM-192              :  31850.54 KB/s,   29.10 cycles/byte
  AES-CCM-256              :  27932.44 KB/s,   33.39 cycles/byte
  Poly1305                 :  19653.65 KB/s,   48.16 cycles/byte
  CTR_DRBG (NOPR)          :  8856.47 KB/s,  108.45 cycles/byte
  CTR_DRBG (PR)            :  6607.61 KB/s,  145.82 cycles/byte
  HMAC_DRBG SHA-1 (NOPR)   :  2957.83 KB/s,  327.56 cycles/byte
  HMAC_DRBG SHA-1 (PR)     :  2748.29 KB/s,  352.68 cycles/byte
  HMAC_DRBG SHA-256 (NOPR) :  4241.30 KB/s,  227.94 cycles/byte
  HMAC_DRBG SHA-256 (PR)   :  4264.17 KB/s,  226.76 cycles/byte
  RSA-1024                 :  7861.00  public/s
  RSA-1024                 :  430.33 private/s
  DHE-2048                 :   26.67 handshake/s
  DH-2048                  :   50.00 handshake/s
  ECDSA-secp521r1          :  146.67 sign/s
  ECDSA-secp384r1          :  285.00 sign/s
  ECDSA-secp256r1          :  482.33 sign/s
  ECDSA-secp224r1          :  534.00 sign/s
  ECDSA-secp192r1          :  667.00 sign/s
  ECDSA-secp521r1          :   77.67 verify/s
  ECDSA-secp384r1          :  157.00 verify/s
  ECDSA-secp256r1          :  282.67 verify/s
  ECDSA-secp224r1          :  317.33 verify/s
  ECDSA-secp192r1          :  413.00 verify/s
  ECDHE-secp521r1          :   80.00 handshake/s
  ECDHE-secp384r1          :  162.67 handshake/s
  ECDHE-secp256r1          :  299.00 handshake/s
  ECDHE-secp224r1          :  338.67 handshake/s
  ECDHE-secp192r1          :  452.33 handshake/s
  ECDH-secp521r1           :  160.00 handshake/s
  ECDH-secp384r1           :  325.00 handshake/s
  ECDH-secp256r1           :  595.67 handshake/s
  ECDH-secp224r1           :  679.67 handshake/s
  ECDH-secp192r1           :  903.33 handshake/s
  ECDHE-secp521r1          :   40.00 full handshake/s
  ECDHE-secp384r1          :   81.67 full handshake/s
  ECDHE-secp256r1          :  150.33 full handshake/s
  ECDHE-secp224r1          :  170.33 full handshake/s
  ECDHE-secp192r1          :  225.00 full handshake/s

Результаты неплохие, но не фантастические. Чипы семейства Synergy при частоте в 4 раза меньшей уступают по скорости шифрования AES-GCM-256 с аппаратным ускорителем всего в 2.5 раза. Однако чисто программное шифрование AES-GCM-256 чипом Cortex-M4 на частоте 120 МГц ведётся на скорости около 94 KB/s т.е. в 500! раз медленнее.

В любом случае скорость у i.MX RT достаточна чтобы в реальном времени шифровать видеопоток MJPEG в 5 мегапикселей и сохранять на диск.

Нагрев микроконтроллера в течении выполнения этого теста:

Радиатор этом чипу точно не пригодится.

Всего в комплекте программного обеспечения из SDK_2_12_1_MIMXRT1170-EVK находится 674 демонстрационных проекта. И тестирование только начинается.
Впереди тестирование Wi-Fi, Bluetooth, ускорителей GUI, FlexPWM для управления двигателями и прочих модулей.