- PVSM.RU - https://www.pvsm.ru -
Компания Intel выпускает несколько устройств для разработчиков: Galileo [1], Galileo Gen2 [2] и Edison [3] — продукты, совместимые с платформой 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.
Основные разъемы на плате (начиная с левого нижнего угла и далее по часовой стрелке):

В правой части платы также видны характерные «гребенки» для Arduino-шилдов (полностью соответствуют Arduino Uno R3). Все пины заботливо подписаны в лучших традициях Arduino-плат.
Чуть ниже UART-разъема находится единственный джампер (IOREF) на два положения (5В и 3.3В) – он позволяет выбрать планку логических уровней, с которым будут работать подключенные шилды. Неправильный выбор напряжения может повредить как шилд, так и порты ввода/вывода Intel Galileo.
Левее и чуть ниже SoC находится двухпиновый разъём для подключения резервной батарейки (3В) для RTC (подписан «COIN»). RTC интегрирован в процессор.
На верхней стороне платы также находятся две кнопки: RESET (перезагрузка ардуино-составляющей) и REBOOT (перезагрузка всей системы).
Для индикации активности на Intel Galileo Gen2 находятся 5 светодиодов (все расположены рядом с разъёмом USBhost):
Посмотрим на плату с нижней стороны:

Первое, что бросилось в глаза – остатки флюса почти на всей нижней поверхности платы. Странно видеть подобное у именитого производителя (да ещё и с такой привлекательной упаковкой). Ну да ладно, «на скорость не влияет».
Зато на нижней стороне платы размещён полноценный mini-PCI Express слот для возможных расширений (модули WiFi, модемы и т.п.). Рядом с ним находится 10-пиновый разъем JTAG для отладки. Там же предполагается подключать и опциональный модуль PoE (соответствующие контакты подписаны «POWER OVER ETHERNET»).
Ключевые особенности платы приводить не буду, поскольку это уже многократно делали. Кому интересно, можно ознакомиться, например, с информацией на самом сайте компании [2].
Плата подобного класса для меня – большая новинка. До этого я довольно плотно работал сначала с различными ардуино-платами, а потом и просто с устройствами на базе МК atmega.
Intel Galileo позиционируется (по крайней мере, как это декларируется в маркетинговых материалах Intel) как плата с большими возможностями linux-систем и простым прототипированием Arduino, а так же с возможностью организации взаимодействия двух этих «подсистем». Посмотрим, как обстоят дела на самом деле.
Изучение я начну с той части, которая для меня является хорошо знакомой: Arduino. Все действия буду описывать под Mac.
Плата в заводском состоянии (без какой-либо подготовки) уже пригодна для работы в среде Arduino (в 8Mb встроенного флеш-хранилища находится облегченная версия linux, которая обеспечивает этот функционал).
Но «хватит откладывать – пора высиживать»: жахнем из главного калибра по воробьям (поморгаем светодиодом). Первое, что требуется – скачать и установить специальную версию Arduino IDE (доступна в Galileo Software Downloads [5]) для своей ОС.

Теперь, наконец-то, можно подключить саму плату. Тут есть небольшой нюанс – после подключения питание необходимо немного подождать (несколько секунд), пока система загрузится. При этом на плате последовательно загорятся два зелёных светодиода (по разные стороны от 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 заявляет, что обеспечивается совместимость практически с любым ардуино-шилдом.
Все шилды я, конечно, проверять не буду (тем более, что есть вот такой документ [6]) – под руку попался EM Shield [7]. Этот модуль содержит популярный жк-дисплей (аналогичный Nokia 5510), две кнопки (подключенные к одному аналоговому пину), три разъёма для подключения токовых датчиков (тоже заведены на аналоговые пины) и интерфейс для подключения популярного трансивера nRF24l01+ (на ардуино используется аппаратный SPI). Цель экспресс-проверки – попробовать запустить какие-нибудь примеры из готовых библиотек, не входящих в состав «подготовленной» IDE.
Для наглядности начал с дисплея. И библиотека LCD5110_Graph [8] (ожидаемо) не «завелась»… Основные ошибки при компиляции: работа с регистрами напрямую. А вот если переписать соответствующие куски кода на digitalWrite() и т.п. – дисплей «оживает». Собственно, КДПВ сделана именно при этих экспериментах.
Аналогичные проблемы (не компилируется, не работает) появились при работе с таймерами. Обнаружились проблемы и при работе с прерываниями – они (прерывания) обрабатываются, но только «при изменении» (напомню, в обычной Arduino можно настраивать прерывания «по фронту», «по спаду» и «при изменении»).
Вероятно, есть какие-то еще особенности – проявятся в дальнейшем изучении. Пока писал этот пост, нашёл вот такой документ [9] – в нём описаны соответствующие ограничения. Лучше их предварительно изучить, чтобы не ходить по уже известным «граблям». Особо следует обратить внимание на существенно меньшие токи с каждого пина: 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 [10] и две микросхемы памяти (DDR3, 256Mb).
Можно смело сказать, что плата от Intel (если рассматривать исключительно Arduino-составляющую) – обеспечивает такой же низкий уровень входа, как и Arduino (правда, при существенно большей стоимости платы). Но ведь это даже не половина возможностей!
На Intel Galileo можно запустить вполне функциональную версию linux – Yocto, при этом можно использовать плату как обычный linux-компьютер. А организовав взаимодействие «linux-компьютера» и «arduino-устройства» – реализовывать гораздо более функционально-продвинутые вещи.
В следующих частях «практикума» я постараюсь осветить и эти возможности. Продолжение следует…
Автор: avstepanov
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/80686
Ссылки в тексте:
[1] Galileo: http://habrahabr.ru/company/intel/blog/202894/
[2] Galileo Gen2: http://www.intel.ru/content/www/ru/ru/do-it-yourself/galileo-maker-quark-board.html
[3] Edison: http://www.intel.ru/content/www/ru/ru/do-it-yourself/edison.html
[4] перегрузки по питанию: https://communities.intel.com/message/259834
[5] Galileo Software Downloads: https://communities.intel.com/docs/DOC-22226
[6] такой документ: https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=24342
[7] EM Shield: http://devicter.ru/goods/EM-Shield
[8] библиотека LCD5110_Graph: http://www.henningkarlsen.com/electronics/library.php?id=47
[9] документ: https://communities.intel.com/docs/DOC-22797
[10] Intel® Quark™ SoC X1000: http://www.intel.ru/content/www/ru/ru/intelligent-systems/quark/quark-x1000-overview.html
[11] Источник: http://habrahabr.ru/post/248279/
Нажмите здесь для печати.