Салют-ЭЛ24Д1: знакомство с модулем на российском процессоре 1892ВМ14Я для жестких условий

5e7f88de1c5f4308a7233007d12a277b.jpg
В нашей инженерной лаборатории появилась новая российская плата для экспериментов — отладочный модуль Салют-ЭЛ24Д1 на многоядерном сигнальном микропроцессоре 1892ВМ14Я. Посмотрим, на что он способен.

Модуль Салют-ЭЛ24Д1, как и все отладочные платы, рассчитан на изучение возможностей процессора, разработку и отладку программного обеспечения. Его разработчик — НПЦ «ЭЛВИС» — начал поставки «Салюта» в конце 2015 года.

Одна из главных областей применения процессора 1892ВМ14Я — системы машинного зрения, обработка видео- и аудиопотока с расчетом на жесткие условия, производственные или космические. Так что процессор ориентирован скорее на industrial, чем на гражданское применение — диапазон рабочих температур составляет от –60°C до +85°C.

Чип 1892ВМ14Я разработан по технологии «система на кристалле» (SoC) и включает в себя два ядра ARM Cortex-A9, блок GPU Mali-300, два ядра DSP Elcore-03M, блок аппаратной видеообработки VELcore-01 и различные порты ввода-вывода.

dfec843b0277489fa70414e5bf7a8e86.png

884d714b7d63477d9622f04bf24b9028.png

Комплект поставки


В коробке, помимо самой отладочной платы Салют-ЭЛ24Д1, имеются блок питания на 12В, CSI-камера со шлейфом, карта памяти micro-SD на 32 Гб, адаптер USB → UART, батарейка для RTC, антенна WiFi-модуля и радиатор для процессора, без которого неслабо греется.

Отладочная плата поставляется с предустановленным дистрибутивом Arch Linux. Доступны исходники buildroot, из которых можно самостоятельно собрать необходимые пакеты или всю систему.

Самое вкусное в Arch Linux — демонстрационные утилиты для захвата видеопотока с CSI-камеры, утилиты для работы с видеокодеком H264 и Gstreamer с установленными RTSP-плагинами.

Интерфейсы платы


На плате имеются порты USB, Ethernet, Wifi и разъемы для подключения антенн ZigBee/GPS.

Видео/аудиоинтерфейсы включают HDMI-видеовыход, DSI-видеовыход, разъем CSI для подключения камеры, стандартный аудиовход/выход 3,5 мм.

431febe4a467449981bcc2befb90477d.jpg

Также доступны интерфейсы RS-232, RS-485, CAN-шина, UART, I2C, I2S, SPI.

На верхней части платы выведены отладочные порты и RaspberryPI-совместимый блок PLS-штырьков с GPIO и соответствующими интерфейсами.

Полный список характеристик Салюта-ЭЛ24Д1
  • Процессор 1892ВМ14Я:

    • 2-ядерный CPU Cortex-A9, до 912 МГц;

    • 2-ядерный DSP ELcore-30M, до 720 МГц;

    • видеокодек VELcore-01: обеспечение функций H.264 CBP Encode and Decode, Full HD (1920×1080) стерео поток c частотой следования не менее 30 кадров/с;

    • аппаратный ускоритель для сжатия изображений по стандарту JPEG;

    • графический процессор Mali-300, 250 млн. пикселей/с.


  • DDR3–1066, 32 бит, 1 ГБ.

  • Энергонезависимая память:

    • NAND Flash x 8 бит @ 100 МГц, 4 ГБ;

    • microSD card, 10 МБ/с, 32 ГБ.


  • Беспроводные интерфейсы:

    • WiFi (IEEE 802.11);

    • Bluetooth (IEEE 802.15.1);

    • ZigBee (IEEE 802.15.4).


  • Навигация: ГЛОНАСС/GPS (опционально).

  • Высокоскоростные интерфейсы:

    • 4 порта USB 2.0 Host;

    • Ethernet 10/100.


  • Видеовход:

    • MIPI CSI2 4 lanes, 1.5 Гбит/с, I2C.


  • Видеовыход:

    • MIPI DSI, 2 lanes, 1.5 Гбит/с;

    • HDMI 1.3a Tx, 1080 p/60 Гц, аудио.


  • Аудио вход:

    • Analog jack, Stereo PCM, 16 бит, 192 кГц.


  • Аудио выход:

    • Analog jack, Stereo PCM, 16 бит, 192 кГц.


  • Прочие интерфейсы:

    • UART; RS485; RS232;

    • I2C; I2S;

    • SPI; MFBSP;

    • CAN ISO 11898.


  • Отладочные интерфейсы:

    • JTAG OnCD;

    • Trace Debug Port.


  • Режимы загрузки: SPI Flash, UART, SD, NAND.

  • Питание:

    • DC JACK 2.5mm 10–30 В;

    • MicroUSB 5 В, 3 А.


  • Размер: 130×105 мм.



Обработка видео на процессоре


Основная область, в которой мы экспериментировали с процессором 1892ВМ14Я — обработка видеосигналов — одна из его главных возможностей.

Для начала провели пробные тесты программного кодирования в H264 с помощью GStreamer. С разрешением видео 1280×720 px программное кодирование в H264 с плагином libx264 в GStreamer выдает всего 2—3 fps. Декодирование работает немного быстрее — около 8 fps. Скорость довольно низкая, что не удивительно, т.к. процессор не предназначен для выполнения сложных вычислительных задач.

Целевая область применения 1892ВМ14Я — обработка видео/аудио, IP-камеры и др. Поэтому больше всего нас интересовал блок видеообработки VELcore-01 с возможностью аппаратного кодирования/декодирования H264.

Аппаратный кодек H264


Основные характеристики ядра видеообработки VELcore-01:
  1. Максимальный размер обрабатываемых изображений — 4096×4096 пикселей.
  2. Минимальный размер обрабатываемых изображений — 16×16 пикселей.
  3. Формат изображений — YCbCr (4:2:0).
  4. Точность представления — 8 бит на пиксель.
  5. Количество одновременно обрабатываемых потоков видеоданных — до двух потоков компрессии и до двух потоков декомпрессии.
  6. Максимальная производительность — до двух потоков компрессии и до двух потоков декомпрессии видео в формате Full HD (1920×1080 пикселей) с частотой 60 кадров в секунду по любому из указанных стандартов.

Одной из особенностей аппаратного блока кодирования H264 является то, что он использует нестандартный формат пикселей M420 для входного видео. M420 — это формат YUV (4:2:0) с плотностью записи 12 бит на пиксель. Y-компонента записывается для каждого пикселя (1 байт на пиксель), а CbCr-компоненты — по одной паре значений на блок из 4-х пикселей (2 байта на 4 пикселя). Этот формат похож на NV12, с тем отличием, что блок данных CbCr идет не в конце, а «смешан» построчно с блоком Y: 2 строки Y — одна строка CbCr и т.д.

Структура формата M420 выглядит так, судя по описанию на linuxtv.org:

start + 0:	Y'00	Y'01	Y'02	Y'03
start + 4:	Y'10	Y'11	Y'12	Y'13
start + 8:	Cb00	Cr00	Cb01	Cr01
start + 16:	Y'20	Y'21	Y'22	Y'23
start + 20:	Y'30	Y'31	Y'32	Y'33
start + 24:	Cb10	Cr10	Cb11	Cr11

Видеопоток с комплектной камеры


Драйвер CSI-видеокамеры также выдает видео в формате M420, поэтому можно использовать его с драйвером аппаратного кодека H264 напрямую.

Запускаем команду…

cap-enc -s 1920x1072 -r30 -f1 /dev/v4l/by-name/vinc0 /dev/v4l/by-name/avico0 | gst-rtsp-launch 'fdsrc ! h264parse ! rtph264pay name=pay0'

… и получаем работающий RTSP-стрим «из коробки» со сжатием видео в H264 с подключенной камеры.

Видеопоток из файла


Со сжатием видео из файла не все оказалось так просто. В утилите, предназначенной для этих целей, есть возможность преобразовывать видео в формат M420 «на лету». Но эта операция сильно грузит процессор, в результате программная часть не успевает вовремя выдавать драйверу кадры для сжатия, что приводит к заметному снижению fps. Для решения этой проблемы пришлось написать скрипт, который заранее преобразовывает видеофайл в формат M420.

Вторая проблема состоит в том, что ядро видеообработки умеет сжимать только кадры, размер которых кратен 16 пикселям. С разрешением 1280×720 все сходится — обе стороны кадра кратны 16, а вот у Full HD (1920×1080) высота на 16 не делится. Таким образом, для сжатия видео 1920×1080 нужно перед передачей кадра драйверу дорисовывать полоску из 8 пикселей, чтобы получилась высота, кратная 16. Формат M420 в этом плане оказался весьма удобен из-за того, что каналы Y и Cb/Cr в нем идут совместно, а не один за другим — достаточно вставить в конец буфера 1920×8 * 1.5 пустых байт.

В итоге удалось достичь кодирования H264 с разрешением 1280×720 и с разрешением 1920×1080, но с «костылем» в виде полоски дополнительных пикселей. Оба разрешения стабильно выдают частоту кадров в 30 fps.

Ядро видеообработки VELcore-01 на аппаратном уровне также поддерживает декодирование H264, но на уровне драйверов поддержка этой функции пока не реализована, поэтому в данном направлении эксперимент провести не удалось.

617b6cb767b34ceeb36c5b0c09f77b66.jpg
В целом знакомство получилось позитивным: 1892ВМ14Я показал себя как отличный процессор для промышленности и спец. применений, где требуется HDMI, графика и мультимедиа. Понравилась отзывчивая техподдержка.

Комментарии (0)

© Habrahabr.ru