Чем я занимаюсь: синяя коробочка
Этим постом я начинаю относительно постоянную рубрику (надеюсь) под названием "Чем я занимаюсь?". В рамках её я буду рассказывать и показывать чем я занимаюсь на работе (а может и не только это).Команда "Отгружать!"
Последние пару месяцев основные усилия нашей команды были направлены на то, чтобы доделать и отгрузить новую аппаратную модификацию 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 раз?
Я вижу следующие факторы: импортозамещение (платы разработаны в России, руками людей, которые сидят через стену от меня), реальная техподдержка на русском языке (от меня и моих коллег) и кастомизация под возможные решения заказчика.
Заинтересует ли это кого-то? Посмотрим :)