TL;DR (Abstract)
Мы сделали маленький «одноплатный» встраиваемый компьютер с хорошим набором периферии, в основном беспроводной (GSM/GPRS, NFC, Wi-Fi, GPS, Ethernet, etc). Рабочее название — Wiren Board (от Wireless Enabled)
Предполагается, что использоваться он будет для всяческой автоматизации — то есть в качестве «мозга» для оборудования. Если вы хотите сделать умное устройство, не разрабатывая целиком собственное сложное железо, то это для вас. Впрочем, для DIY наш компьютер тоже весьма полезен, и об этом направлении мы не забыли при разработке. Если понадобится дополнить чем-то специфическим — функциональность можно расширять готовыми модулями. Что ещё приятно, стоимость компьютера мы планируем сделать всего около $100.
Первая версия уже готова, открыт предзаказ.
Что привело нас к разработке встраиваемого компьютера, через какие этапы мы прошли, и что в итоге получилось — читайте дальше.
Зачем?
История весьма банальна: прошлой осенью мы начали думать, как сделать некое устройство.
В процессе мы придумали, что писать софт и подключать всякую периферию к устройству с Linux несравненно проще, чем к устройству с микроконтроллерами, при почти одинаковой стоимости железа. Устройство мы планировали массовое и дешёвое, поэтому ставить raspberry pi с примотанным синей изолентой usb-хабом мы за решение не считали. Разработка своей платы с нуля казалась сложнее, чем всё остальное вместе взятое, а ничего готового за приемлемую цену на рынке не было.
Мы думали, как было бы здорово иметь плату, которая бы удовлетворяла нашим задачам, стоила бы как raspberry pi, а не как боинг с пассажирами и, главное, была бы доступна для покупки в любом количестве. Купить одну, повертеть в руках и купить тысячу, если понадобится. В таких мечтах и родилась концепция нашего будущего продукта: платы, которая объединяет в себе комплект разработчика, массогабаритный макет и готовый продукт. Короче говоря, чтобы разрабатывать, как будто это raspberry pi, но чтобы никакой изоленты.
Плата должна была гибко конфигурироваться — в первую очередь, для снижения цены при массовом применении. С другой стороны, плата в максимальной комплектации должна быть доступна для немедленной розничной покупки и разработки, причём не должна существенно отличаться от серийного решения по габаритам и железу. Серийный экземпляр может получаться за счёт расширения функциональности базовой платы нужными компактными модулями, либо наоборот — за счёт урезания лишнего функционала.
Ниша, казалось, была почти свободна: несмотря на бум ардуино, а потом и одноплатных компьютеров всех видов, ничего подобного для индустрии или для более или менее серьёзных DIY применений так и не появилось. Совсем печально обстояли дела с беспроводными коммуникациями всех видов.
Как?
Если вы хотите сделать устройство с нормальным процессором и Linux на борту, то у вас есть несколько вариантов. Вы можете разработать плату-расширение к вашему любимому одноплатному компьютеру (r-pi), вы можете использовать готовый процессорный модуль, либо разработать всё с нуля.
Использование System on Module (например Carambola, Aria) стало весьма популярно в последнее время. Суть заключается в том, что вы используете на своей плате готовый модуль, содержащий процессор (точнее SoC) и память. Модуль может вставляться в сокет либо припаиваться к плате. В этом случае вы избавлены от головной боли, связанной с разводкой процессора и памяти, и можете спроектировать гораздо более компактное устройство и дешёвое устройство. Недостатки такого подхода вытекают из его достоинств: на своей “материнской” плате вы теперь должны реализовать схему питания, вывести наружу разъёмы интерфейсов и т.д. Кроме этого, вы всё ещё ограничены возможностями конкретного модуля. Другая проблема — цена таких решений. Если производство вашей платы вы можете значительно удешевлять при росте объёмов производства, то цена готового SoM остаётся почти постоянной.
Последний вариант — разработка платы с нуля. Вы сами разводите на своей плате процессор, память и всё необходимую конкретно вам периферию. Отличный пример такого подхода к разработке — наши конкуренты. Разрабатывая плату, вы столкнётесь со всеми прелестями разводки высокочастотных компонентов, проектирования многослойных плат, со сложностями в поставке чипов и в организации производства. Достигнутый результат может быть прекрасным, но и время уже не вернуть.
Нас очень беспокоило всё написанное выше, и мы мучительно думали, что нам делать.
В итоге, мы наткнулись на замечательную компанию Olimex и их не менее замечательный одноплатный компьютер. Использвание Olinuxino Micro в качестве SoM в нашей плате имеет множество преимуществ.
Во-первых Olinuxino Micro — это не совсем SoM, а скорее полноценный одноплатный компьютер, который легко интегрировать в своё железо. Он уже имеет слот micro-SD карт, разъём питания и т.д. При этом используемый процессор Freescale i.mx233 хоть и не очень свежий, но полностью удовлетворяет нашим потребностям: он industrial-grade, поддерживается производителем, будет производится до 2017 г., на него открыта вся документация, он полностью поддерживается ядром Linux, его без проблем можно купить, и стоит он смешные $5.5 в больших партиях.
Во-вторых, Olinuxino Micro дешёв и легко доступен для покупки. Но главное — это Open Hardware проект, а значит производитель предоставляет полные схемы, и мы всегда можем модифицировать Olinuxino под наши нужды и наладить самостоятельный выпуск. Более того, в этой модели не используются BGA-чипы, и плата разведена на двух сторонах. Это значительно снижает стоимость производства по сравнению многослойными платами с BGA и позволяет нам производить платы даже в России без затруднений.
Итак, чтобы разработка нашей платы не продлилась годы, мы приняли следующий поэтапный план развития:
- Используем готовый Olinuxino Micro на нашей плате
- Налаживаем самостоятельное производство Olinuxino Micro для оптимизации цены
- Модифицируем его под свои нужды.
Такой подход позволил нам за несколько месяцев сделать готовое к массовому производству устройство, которое мы и представляем вашему вниманию.
Процесс работы
Наверняка многим интересно, какие этапы мы прошли от идеи до готовой платы. И действительно, наш путь не был прямым. Ниже опишу самые интересные ситуации из процесса разработки.
Как делать платы
Чтобы сделать плату с кучей модулей, сначала мы делали по отдельной отладочной плате для каждого чипа. Заказывать производство такие простых плат — пустая трата времени и денег, так что первые варианты мы делали сами дома. Выбирали между двумя технологиями — ЛУТом и листовым фоторезистом. Выбор пал на фоторезист как на более технологичный метод, не зависящий от мастерства владения утюгом.
В процессе мы узнали много интересных вещей:
- как избавиться от зернистости заливки чёрных зон на фотошаблоне
- как обеспечить качественную печать узких дорожек (0.25 мм)
- что платы с уже нанесённым двухсторонним фоторезистом, продающиеся в России без всякой маркировки, сделаны с применением положительного фоторезиста, и требуют применения других реактивов в отличие от плёночного отрицательного фоторезиста.
Фотографии наших (ужасных) отладочных плат, сделанных на коленке с листовым фоторезистом:
NFC
Из всех современных RFID-чипов, поддерживающих NFC и peer-to-peer соединения, мы выбрали чип NXP PN532. Семейство RFID-чипов NXP/Philips проверено временем и аппаратно поддерживает наиболее распространённые проприетарные карточки стандарта Mifare. Кроме того, чип поддерживается активно развивающейся библиотекой libnfc .
Чипы PN53x поддерживают подключение по шинам USB, UART, I2C и SPI. Порты UART и USB весьма дефицитны, поэтому мы подключили чип по шине SPI. Все SPI устройства используют общую шину для передачи данных, и только по одному GPIO-выводу тратится на то, чтобы выбирать, с каким устройством обмениваться данными в данный момент.
“Железная часть” подключения прошла без сюрпризов, а вот софт заставил поднапрячься — вышеупомянутая библиотека libnfc не поддерживала работу по SPI.
В процессе реализации поддержки SPI выяснилось, что реализация SPI в чипе от товарищей из NXP не очень совместима со стандартом и принципами работы с SPI в Linux. Пришлось применять, так сказать, нестандартные технические решения, использующие недокументированные особенности работы чипа.
WiFi
Цена — основное, что определило выбор Wi-Fi модуля. Но здесь и была хитрость. Cамый дешёвый Wi-Fi-модуль на Digikey стоит $17. Но такая цена вступает в лёгкое противоречие с существованием дешёвых китайских донглов за $3. Нет, всё понятно: китайская сборка, большие объёмы — но не в 5 же раз! И это даже без учёта того, что во втором случае предлагают готовое устройство. Тогда мы обратились к опыту уже знакомых товарищей из Olimex: www.olimex.com/Products/Modules/Ethernet/MOD-WIFI-RTL8188/. В описании к модулю есть интересное название: RTL8188. Оказалось, китайцы выпускают множество готовых модулей на этом чипсете Realtek, которые в основном используются в китайских же планшетах и, например, внутри широко известного китайского медиа-центра MK802. Модули бывают разных размеров, с встроенной антенной и без, для разного крепления на плату. Мы использовали самые компактные модули — без встроенной антенны, с контактами под пайку на плату — как раз такие, как используются в MK802 (на фотографии справа внизу).
Все модули поставляются исключительно на китайский рынок, найти нам удалось их только на taobao. К сожалению, говорить по-английски там не принято, но можно понять, что стоит модуль (в рознице!) 12,5 юаней, или 63 рубля 60 копеек по текущему курсу.
Купить эти модули в Китае было не очень просто, но в итоге мы их всё-таки получили.
Антенны
Есть беспроводные модули — нужны антенны. Первое, что пришло в голову — рисовать антенны дорожками прямо на плате. Но здесь есть свои подводные камни: во-первых, необходимо контролировать импеданс дорожек-антенн, а во-вторых, вокруг них возникает “зона отчуждения”, куда нельзя помещать другие компоненты и дорожки — иначе коэффициент усиления значительно падает. В итоге получаем значительное увеличение размеров платы при неопределённом коэффициенте усиления.
Второй вариант — чип-антенны, устанавливающиеся на плату. Они заметно компактнее, но всё ещё занимают драгоценное место на плате, а коэффициент усиления невелик.
Поэтому мы решили использовать простое решение — установку рядом с беспроводными модулями u.FL-разъёмов. Вот таких:
В них подключаются или сами антенны (на рисунке сверху — простейшая антенна для диапазона 2.4 ГГц), или тонкие коаксильные кабели, которые идут к антеннам. Саму антенну тогда можно установить в любом месте внутри или вне корпуса устройства.
Причём при помощи переходника u.FL — SMA для монтажа на корпус можно подключить большую антенну с полноразмерным SMA разъёмом, например, такую:
Установка u.FL рядом с соответствующими модулями заметно удобнее, чем установка разъёмов SMA непосредственно на плате, так как к последним требуется проводить по плате линию с контролируемым волновым сопротивлением, что очень сложно и занимает много места на плате.
А в конце нами было открыто забавное и приятное свойство — Wi-Fi внутри квартиры и GSM в городе ловятся и без какой-либо антенны, просто на u.FL-разъём и подходящую к нему дорожку =)
UEXT
По сути, UEXT-разъём — главный козырь компании olimex. Придумав совместить три популярных последовательных интерфейса — SPI, I2C и UART, а также питание в одном разъёме, olimex создала удобный способ добавить практически любой проводной или беспроводной интерфейс или датчик к своим отладочным платам для разных микроконтроллеров и микропроцессоров. Чем и воспользовалась, наплодив несколько десятков устройств расширения — www.olimex.com/Products/Modules/
Мы же, хоть и создаём “устройство без изоленты”, понимаем, что некоторые специфические модули иногда всё таки проще подключить снаружи — особенно если они невелики, или для них необходимо специальное положение в готовом устройстве — как, например, www.olimex.com/Products/Modules/Interface/MOD-IRDA. Поэтому на нашей плате мы сделали целых два UEXT разъёма.
Разные фотографии готовой платы и прототипов можно посмотреть в галерее .
Технические характеристики Wiren Board
Вот что у нас получилось на сегодняшний день:
- Двухэтажный компьютер, размеры 50мм x 100мм x 23мм.
- Первый этаж: плата нашей разработки с периферией, беспроводными и проводными интерфейсами:
- GSM/GPRS модуль SIMCOM SIM900R. Разъём для micro-SIM (или embedded-SIM модуль). Модуль может выступать в качестве модема, отправлять СМС, а также поддерживает кучу расширений, вроде определения местоположения по вышкам, встроенной памяти или удалённого управления через СМС. Гнездо u.FL для антенны.
- Wi-Fi на чипе RTL8188SU 802.11b/g/n. Гнездо u.FL для антенны.
- Ethernet 10/100 на чипе ENC424J600, 8P8C-сокет HanRun с встроенными трансформаторами и светодиодами состояния
- GPS/GLONASS модуль SIM68V на новом чипсете MediaTek MT3333: TTFF 28 с., поддержка скачанных эфемерид, выбор режима работы GPS/GPS+GLONASS/GLONASS. Гнездо u.FL для антенны.
- NFC на чипе PN532 — чтение/запись карт ISO/IEC 14443A/MIFARE, поддержка эмуляции Mifare, поддержка NFC Peer-to-Peer, NFCIP-1. Встроенная антенна на плате.
- 2 разъёма UEXT для подключения плат расширения — uart, spi, i2c или 7 gpio
- Второй этаж — Olinuxino Micro
- iMX233 ARM926J processor at 454Mhz
- 64 MB RAM
- Слот micro-SD
- 19 свободных GPIO, разведённых под стандартную 2.54мм гребёнку
- JTAG и SJTAG
- Linux 3.7.1, Debian 6.0, все необходимые драйверы и примеры приложений
Первый этаж Wiren Board с двух сторон:
Мы не собираемся зарабатывать на розничных продажах для DIY, по крайней мере сейчас, и хотели бы установить на первую партию минимально возможную при производстве в России цену. Цена производства даже в России значительно зависит от объёмов, поэтому мы открываем предзаказ, чтобы представлять в каких количествах нам надо производить плату.
Цена также значительно зависит от комплектации; мы отдаём себе отчёт в том, что далеко не всем нужны все модули сразу. Мы проанализируем ваши заказы и сделаем несколько вариантов платы.
На странице предзаказа также есть модули, про которые в статье не говорилось (DC-DC 7-40V, USB-host, RS232/RS485/RS422, реле, etc...) — их мы тестировали отдельно и ещё можем добавить в первую версию платы, если они будут востребованы.
На этом пока всё. Будем рады услышать ваши советы и предложения и ответить на вопросы в комментариях!
Автор: evgeny_boger