Компания Intel выпускает несколько устройств для разработчиков: Galileo, Galileo Gen2 и Edison — продукты, совместимые с платформой Arduino, основное назначение которых – создание решений в сфере интернета вещей (IoT).

Сегодня я хочу вас познакомить с Intel Galileo Gen2:



Комплектация


Intel Galileo Gen2 позиционируется как отладочная плата для изучения ключевых возможностей и особенностей Intel-платформы и не предназначена для встраивания в конечные устройства. Для применения в готовых устройствах предназначен Intel Edison (декларируется простая миграция Gilileo -> Edison).

Galileo Gen2 поставляется в красивой (не только снаружи, но и внутри) упаковке, однако, перечень содержимого достаточно скромный:



Собственно, внутри только сама плата Intel Galileo Gen2, источник питания (12В 1.5А, в комплекте 5 различных адаптеров под разнообразные розетки) и один листочек с важной информацией о безопасности (отпечатан ультрамелким шрифтом, записи на всех возможных языках, кроме русского).
Кстати, в этой бумажке написано, что во время работы Intel Quark SoC может нагреваться и трогать его не рекомендуется.
Странно, что в комплекте нет microUSB-кабеля, который требуется для работы с платой, ну да ладно – такого добра в хозяйстве любого гика достаточно.

Внешний вид


Размер платы Intel Galileo Gen2 составляет 124х72 мм (разъёмы чуть выступают за пределы платы):


На фото для сравнения: Intel Galileo Gen 2, «малина» и компактная версия клона Arduino Mega.

Основные разъемы на плате (начиная с левого нижнего угла и далее по часовой стрелке):

  • Слот для microSD-карты
  • Разъем питания (от 7 до 15В)
  • Ethernet-порт (10/100)
  • UART (6-пиновый разъем)
  • USBclient
  • USBhost
  • Разъем DEDIPROG (белый, может понадобиться, например, для восстановления после «окирпичивания»)
  • ICSP (6-пиновый разъем)



В правой части платы также видны характерные «гребенки» для Arduino-шилдов (полностью соответствуют Arduino Uno R3). Все пины заботливо подписаны в лучших традициях Arduino-плат.

Чуть ниже UART-разъема находится единственный джампер (IOREF) на два положения (5В и 3.3В) – он позволяет выбрать планку логических уровней, с которым будут работать подключенные шилды. Неправильный выбор напряжения может повредить как шилд, так и порты ввода/вывода Intel Galileo.

Левее и чуть ниже SoC находится двухпиновый разъём для подключения резервной батарейки (3В) для RTC (подписан «COIN»). RTC интегрирован в процессор.

На верхней стороне платы также находятся две кнопки: RESET (перезагрузка ардуино-составляющей) и REBOOT (перезагрузка всей системы).

Для индикации активности на Intel Galileo Gen2 находятся 5 светодиодов (все расположены рядом с разъёмом USBhost):

  • OC (красный) – для индикации перегрузки по питанию
  • USB (зелёный) – готовность к подключению через USB
  • L (зелёный) – пользовательский светодиод (подключен к D13)
  • ON (зелёный) – питание
  • SD (зелёный) – индикация доступа к SD-карте

Посмотрим на плату с нижней стороны:



Первое, что бросилось в глаза – остатки флюса почти на всей нижней поверхности платы. Странно видеть подобное у именитого производителя (да ещё и с такой привлекательной упаковкой). Ну да ладно, «на скорость не влияет».

Зато на нижней стороне платы размещён полноценный mini-PCI Express слот для возможных расширений (модули WiFi, модемы и т.п.). Рядом с ним находится 10-пиновый разъем JTAG для отладки. Там же предполагается подключать и опциональный модуль PoE (соответствующие контакты подписаны «POWER OVER ETHERNET»).

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

Let's go!


Плата подобного класса для меня – большая новинка. До этого я довольно плотно работал сначала с различными ардуино-платами, а потом и просто с устройствами на базе МК atmega.

Intel Galileo позиционируется (по крайней мере, как это декларируется в маркетинговых материалах Intel) как плата с большими возможностями linux-систем и простым прототипированием Arduino, а так же с возможностью организации взаимодействия двух этих «подсистем». Посмотрим, как обстоят дела на самом деле.

Изучение я начну с той части, которая для меня является хорошо знакомой: Arduino. Все действия буду описывать под Mac.

Плата в заводском состоянии (без какой-либо подготовки) уже пригодна для работы в среде Arduino (в 8Mb встроенного флеш-хранилища находится облегченная версия linux, которая обеспечивает этот функционал).

Но «хватит откладывать – пора высиживать»: жахнем из главного калибра по воробьям (поморгаем светодиодом). Первое, что требуется – скачать и установить специальную версию Arduino IDE (доступна в Galileo Software Downloads) для своей ОС.

Теперь, наконец-то, можно подключить саму плату. Тут есть небольшой нюанс – после подключения питание необходимо немного подождать (несколько секунд), пока система загрузится. При этом на плате последовательно загорятся два зелёных светодиода (по разные стороны от USBhost-разъёма) – только после этого можно подключать microUSB-кабель.

В Arduino IDE необходимо выбрать свою плату (в этой среде доступны варианты Intel Galileo, Intel Galileo Gen2 и Intel Edison) и появившийся после подключения платы порт. Для Mac адрес порта имеет вид: /dev/cu.usbmodemXXXXX, где XXXXX выглядит как fd121.

В первый раз рекомендуется сделать проверку версии прошивки и обновление, если оно требуется, конечно. Моя плата такое обновление получила:


Обновление прошивки занимает около 5 минут.

Теперь плата полностью готова к работе. В качестве первого эксперимента загружаем «Hello World!» для МК – пример Blink. Привычно нажимаем кнопку «загрузить» и через несколько мгновений на плате начинает задорно моргать зелёный светодиод у USB-разъёма.

Готово! Первый скетч уже работает. После перезагрузки системы – начнёт работать заново. Таким образом, можно сразу использовать Arduino-возможности платы. В Arduino IDE находятся все основные примеры и включены базовые библиотеки (со своими примерами), позволяющие быстро ознакомиться с возможностями платы и её программирования. Собственно, ничего необычного в этом пока не обнаружено – всё работает, как ожидалось (пусть и «поморгать светиком» это слишком уж просто и банально).

Интересно, что через ардуино-составляющую можно работать с Ethernet-портом (через штатную адаптированную одноимённую библиотеку) и SD-картой. При этом не задействуются никакие пины для подключения шилдов.

Intel заявляет, что обеспечивается совместимость практически с любым ардуино-шилдом.

Все шилды я, конечно, проверять не буду (тем более, что есть вот такой документ) – под руку попался EM Shield. Этот модуль содержит популярный жк-дисплей (аналогичный Nokia 5510), две кнопки (подключенные к одному аналоговому пину), три разъёма для подключения токовых датчиков (тоже заведены на аналоговые пины) и интерфейс для подключения популярного трансивера nRF24l01+ (на ардуино используется аппаратный SPI). Цель экспресс-проверки – попробовать запустить какие-нибудь примеры из готовых библиотек, не входящих в состав «подготовленной» IDE.

Для наглядности начал с дисплея. И библиотека LCD5110_Graph (ожидаемо) не «завелась»… Основные ошибки при компиляции: работа с регистрами напрямую. А вот если переписать соответствующие куски кода на digitalWrite() и т.п. – дисплей «оживает». Собственно, КДПВ сделана именно при этих экспериментах.

Аналогичные проблемы (не компилируется, не работает) появились при работе с таймерами. Обнаружились проблемы и при работе с прерываниями – они (прерывания) обрабатываются, но только «при изменении» (напомню, в обычной Arduino можно настраивать прерывания «по фронту», «по спаду» и «при изменении»).

Вероятно, есть какие-то еще особенности – проявятся в дальнейшем изучении. Пока писал этот пост, нашёл вот такой документ – в нём описаны соответствующие ограничения. Лучше их предварительно изучить, чтобы не ходить по уже известным «граблям». Особо следует обратить внимание на существенно меньшие токи с каждого пина: 16мА@5В или 8мА@3.3В (на обычной Arduino – 50мА@5В). То есть в случае чего можно запросто выжечь пин – будьте внимательны.

Также было очень интересно, насколько быстрее Intel Galileo выполняет «стандартные» функции – например, digitalWrite(). Для этого я взял скетч blink, убрал задержки из цикла loop() и залил один скетч в ардуино (atmega328p), и аналогичный – в Galileo. Подключил осциллограф и увидел следующее:


Первый канал (голубой) – Arduino, второй (жёлтый) – Intel Galileo.

Получается, что плата от Intel работает примерно в четыре раза быстрее (385кГц, против 116кГц у Arduino).

Несмотря на предупреждение, я все-таки потрогал SoC во время проведения последнего эксперимента… и практически обжег палец.


Горячее «сердце» системы – Intel Quark SoC X1000 и две микросхемы памяти (DDR3, 256Mb).

На сегодня всё


Можно смело сказать, что плата от Intel (если рассматривать исключительно Arduino-составляющую) – обеспечивает такой же низкий уровень входа, как и Arduino (правда, при существенно большей стоимости платы). Но ведь это даже не половина возможностей!

На Intel Galileo можно запустить вполне функциональную версию linux – Yocto, при этом можно использовать плату как обычный linux-компьютер. А организовав взаимодействие «linux-компьютера» и «arduino-устройства» – реализовывать гораздо более функционально-продвинутые вещи.

В следующих частях «практикума» я постараюсь осветить и эти возможности. Продолжение следует…

» Вторая часть «практикума»: Galileo Gen2 — Linux & Arduino.