[recovery mode] DevBoy — как я создал проект устройства с открытым исходным кодом и запустил проект на Kickstarter

Привет друзья!

Меня зовут Николай, читателем Хабра являюсь давно, а вот с написанием статей как-то не сложилось. Пора исправлять эту ситуацию, тем более что как раз имеется повод — только что я запустил компанию на Kickstarter для реализации устройства с открытым исходным кодом.
7lxicq0kiu2ibdkago0kc1qcdjq.jpeg
Кому интересно — прошу под кат.
Так уж сложилось, что с детства я имел доступ к прогрессивным технологиям своего времени (Atari 65XE, ZX-Spectrum, EC1841 и т.д.) что предопределило не только выбор профессии, но и привило отличное (как я считаю) хобби — программирование и разработка чего-нибудь.
В дальнейшем судьба преподнесла мне еще один сюрприз — возможность эмиграции в США три года назад. При этом мне повезло дважды — практически сразу я нашел работу именно в той области которой хотел: C++ и микроконтроллеры.
С этого момента мое увлечение получило новый »толчок». Во-первых я познакомился с замечательными микроконтроллерами STM32 от компании ST Microelectronics(до этого я баловался с Atmel AVR). Во-вторых с первой зарплаты я купил 3D принтер. По своей сути я перфекционист — с одной стороны это хорошо — делаешь вещи на совесть, а с другой… порой не получается довести проект до конца только лишь потому, что не выходит он »перфектным». Печать корпусов и возможность заказа печатных плат фактически вывели возможности по созданию проектов на новый уровень.

И вот однажды, перебирая разные заказанные модули для построения простейшего осциллографа и пытаясь разместить их на макетной плате я вспомнил об игрушке которую давным давно когда-то купил когда ходил еще в колледж: о GameBoy. Быстро прикинув возможную компоновку решил: буду делать! Причем сразу в голове мелькнула идея:»А ведь не только кнопочки используются-то! Иногда используются джойстики, иногда используются крутилки…, а почему бы не сделать съемные модули? ». И работа закипела: пайка прототипа, программирование, разработка и печать корпуса, опять программирование… в результате держа в руках рабочий прототип пришло осознание того, что идея-то не плоха. Опять все закрутилось по-новой, только добавился этап заказа печатных плат, причем не только для mainboard, но и всех модулей, т.к. подходящих найти не удалось. Причем, поскольку китайцы изготавливают платы по 10 штук, сразу было решено делать мелкую серию. Кстати, после изготовления этой серии я понял, что паять дальше в ручную (имеется ввиду мелкие серии больше 10 штук) — это не вариант.

В итоге получилось это:
tmybxqfistjyc4il4zskpdjwczm.jpeg
Итоговые характеристики:

  • Базируется на микроконтроллере STM32F415RG, ядро Cortex-M4 работающее на частоте 168 MHz
  • 1024 KB ПЗУ и 192 KB ОЗУ
  • 2.8» экран с разрешением 320×240 точек и 16-тибитным цветом
  • Резистивный тачскрин
  • Два слота для модулей ввода, 4 I/O (2 из них могут оцифровывать сигнал с помощью АЦП) линии в каждом
  • Слот расширения с I/O линиями практически от всех выводов микроконтроллера
  • Слот для карт SD
  • И конечно же Open-source


Само устройство со всех сторон:
4bddgu8kdqm-cydp6o8eaxarw7w.jpeg

А вот так вот выглядит распиновка разъема расширения:
xmqcdh_ewxgwnghpbvvsntbjequ.png

Внутри все выглядит так:
vkzkpciqooyxvoypyrfe4ihbz2u.jpeg

Вот так выглядит модуль с микроконтроллером:
kxblczx8dsc9-hedi-w4fxz4qv8.jpeg
А так его распиновка:
x2__ezgzbsgzlnkami_vggczsiu.png

Модуль экрана:
ewlch2f2aqsmaaxxmfdo15kwun4.jpeg

И зарядника для литиевой батареи:
5ebfpdgw3jdbmiw6n4i2eodsayc.jpeg

И наконец последняя част — корпус:
ocf0t9t-edo0boj79_cz1uilct8.jpeg
zgasio3jdof8aeplx68o6ic3aek.jpeg
Оранжевые штучки — это толкатели. Извлечь модуль та еще задачка. В итоге были придуманы эти толкатели. Когда модуль вставлен он их придавливает и кнопки сзади оказываются вровень с корпусом. Если же модуль надо извлечь — наживаем на толкатель и он выдавливает модуль вверх. Далее можно легко и просто его вытянуть.

Исходный код заслуживает отдельной статьи. Возможно напишу её позже. Из стороннего ПО используется System Workbench for STM32, STM32CubeMX и FreeRTOS. Это все бесплатные проекты. К этому всему написаны C++ FreeRTOS wrapper, задачи обслуживания экрана, тачскрина, звука и ввода.
image
Особенно интересен вывод графики — прототип с микроконтроллером STM32F103 мог выводить на экран игру типа Марио с частотой 15 кадров в секунду пр разрешении 320×240 и имея всего 20 Кб ОЗУ на борту (фреймбуфер исключается), при этом ограничение скорее всего было из-за частоты работы SPI. На STM32F415 с частотой SPI вдвое большей выходит 30 кадров в секунду.

Ну и в заключение оставлю ссылки:


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

Если спросить меня о долгосрочных планах, чего же я хочу в итоге ответ будет простым: создать компанию с идеологией open software и open hardware, заниматься своим любимым делом и помогать другим людям как делают это Adafruit и Sparkfun.

Если вдруг текст покажется сумбурным — не судите строго, сейчас уже почти час ночи… задавайте вопросы в комментариях — постараюсь ответить.

© Habrahabr.ru