Чем я занимаюсь: синяя коробочка

Этим постом я начинаю относительно постоянную рубрику (надеюсь) под названием "Чем я занимаюсь?". В рамках её я буду рассказывать и показывать чем я занимаюсь на работе (а может и не только это).

Команда "Отгружать!"

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

Вот так выглядит Metrotek ETLN.

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

А вот это Metrotek ETNS.
(Сорян за рендер, я был уверен, что в наших закромах в files лежит какая-то красивая реальная картинка, но её найти не смог. А сейчас я не на работе.)


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

Прошивки по FPGA по этим проектам уже было закончены, а ТЗ по новым фичам не было утверждено, то в фоновом режиме я занимался FPGA разработкой для проекта, который имеет внутренее название "sinya korobochka" (синяя коробочка :) ).

Синяя коробочка


Синяя коробочка это такая штука, которую мы будем позиционировать как кит для разработки. К сожалению, на сайте еще об этом информации нет, но буклетик можно найти тут.

SoM


В его основе лежит SoM (System on Module), где расположен чип Cyclone V SoC от Altera. Мы этим модули используем в своих приборах (ETN и ETNS), которые идут большими (большое, это конечно относительно число, но мы считаем, что большими :) ) партиями.

КитЪ для разработки

В итоге мы предлагаем (будем, когда информация об этом на сайте появится) людям использовать наши SoM'ы в своих проектах. Бонус заключается в том, что если им не надо будет разводить сложную часть платы, где стоит SoC чип и DDR3 память, а надо будет только сделать свою часть, например, со своими датчиками. А эта плата может быть очень простой (например, двух- или четырёхслойной). Для того, чтобы человек мог как-то поиграться с SoM, пока он думает, надо ему это или нет мы сделали плату, на которой разместили небольшую периферию: Ethernet, USB, консоль, RTC и пр.

С помощью пинов, которые выведены на стандартные разъемы, к FPGA и HPS можно подключить различные датчики, видеокамеры и пр. Похожей философией пользуются и признанные лидеры китов, типа Терасика.

Arduino Shield

Чисто с синей коробочкой не так всё просто получается, т.к. всё равно не всё так наглядно может быть для пользователя. Поэтому мы решили сделать еще к нему шилд под названием Arduino Shield for CB-CV-SOM.

Он вставляется сверху на синюю коробочку (в разъемы). Выглядит это примерно вот так:

Что в нем есть:


Тем самым можно получить полноценный компьютер: через USB можно подключить клавиатуру и мышку, а монитор к VGA.

BSP for Sinya Korobochka

Правильным путем является еще прикладыванием "CD", куда входят какие-то готовые (желательно рабочие) примеры, например, моргания светодиода или еще чего-то такого. Этим я и занимался до Нового Года в фоновом режиме.

Здесь у нас более серьёзная периферия, чем просто светодиодики. Мы захотели, чтобы вся периферия была "видна" в линуксе: можно было бы на процессоре запустить какое-то гуёвое приложение и выводилась бы картинка на экран. В принципе, многие вещи у нас заработали из коробки, но повозиться пришлось.

Кратко и без подробных технических деталей:

VGA

У нас сделано RGB565, а АЦП на резисторах. Т.е. с FPGA уходят сигналы цвета и еще синхронизация (v_sync, h_sync).

Сделано всё через стандартный линуксовый фреймбуфер. Были взяты модули Frame Reader и Clocked Output из Altera VIP, а драйвер из исходников ядра, которое "поддерживает" Альтера (altvipfb.c)

Получилось как-то так:


Выводим котика через утилиту "fbi".


Запуск иксов (icewm).

Audio

Там используется стандартный чип-кодек SSM2603: один интерфейс для управления (I2C), второй для получения/отправки аудиоданных (I2S). Эти сигналы тоже заходят на FPGA.

I2C модуль, который настраивает этот кодек на дефолтные настройки мы нашли где-то в интернете и пока захадркодили, а вот с I2S пришлось немного повозиться: у Альтеры есть IP-ядро, которое идеально подходит по то, что нам надо, но оно распроняется по Altera University Program, и типа только для DE1/DE2 борд, а у нас плата-то своя.

Мы конечно, написали запрос в Альтеру, но нам не ответили до сих пор. Пока писали письмо, решили что лучше самим написать I2S контроллер на FPGA, что мы и сделали (относительно просто получилось).

В итоге получилось с процессора писать отсчеты, и у нас получилось вывести звук, но пока поддержки со стороны "драйвера" нет - мы писали из юзерспейсного приложения.

ADC (АЦП)

Там стоит очень простой 1Msps 12-битный чип (ADC128S102), данные читаются по SPI, поэтому было решено использовать готовое ядро от Альтеры SPI Core. В качестве SPI-драйвера использовался альтеровский spi-altera.c. А в качестве самого АЦП - ADC128S052. В принципе чипы почти одинаковые)

В итоге появились файлики, из которых читаются "сырые" значения для ADC:
root@device:~# ls -l /sys/bus/iio/devices/iio\:device0/in_voltage*
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage0_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage1_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage2_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage3_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage4_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage5_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage6_raw
-rw-r--r-- 1 root root 4096 Nov 30 09:34 /sys/bus/iio/devices/iio:device0/in_voltage7_raw

DAC (ЦАП)

Здесь используется 16-битый ЦАП DAC8831.
Он тоже SPI-ный и подключен к FPGA. Поэтому тоже использовали SPI ядро и драйвер от Альтеры.

К качестве "высокоуровнего" драйвера было решено взять для DAC7512, потому что он тоже был для 16-битного SPI ЦАПа и был самый простой, что мы заметили.

Появился файл:
/sys/devices/soc/c0000000.bridge/c0000020.spi/spi_master/spi32765/spi32765.0/value

Куда можно записать значение в десятичной форме через echo:
echo "123" > value

Более подробно можно будет всё понять из исходников. Правда, их я пока не могу выложить, т.к. они не готовы. Как только они появятся на гитхабе, то сделаю здесь ссылку.

Стоит ли игра свеч?

Вполне очевидный вопрос задается о целесообразности того, что мы делаем, потому что Терасик предлагает очень вкусные цены на свои киты, а зная ту цену, которую мы будем сообщать на SoM'ы и синюю коробочку, то может сложиться впечатление, что интереса не будет.

Есть мнение, что у Терасика относительно дешешевые цены, т.к. вендоры (Альтера, TI и пр.) могут отдавать Терасику чипы ниже себестоимости (и это вполне нормально, т.к. это взаимовыгодно). Таких цен нам Альтера не дает :).

Стоит ли переплачивать за "относительно" похожие киты в N раз?
Я вижу следующие факторы: импортозамещение (платы разработаны в России, руками людей, которые сидят через стену от меня), реальная техподдержка на русском языке (от меня и моих коллег) и кастомизация под возможные решения заказчика.

Заинтересует ли это кого-то? Посмотрим :)