Пастильда: итоги

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Как устроено контрактное производство электроники в США?
Можно ли заработать на краудфандинге?
Софт, который убивает железо. Миф или реальность?
Есть ли жизнь у open-source проектов?

Все это в заключительной части детективной истории про разработку Пастильды — аппаратного менеджера паролей с открытым исходным кодом.

Что еще за Пастильда?
Pastilda — аппаратный менеджер паролей с открытым исходным кодом. Устройство позволяет хранить и вводить пароли без использования софта (в т.ч. в командной строке и BIOS’e). База данных создается при помощи KeePass и загружается на устройство в формате .kbdx. Устройство подключается к клавиатуре компьютера и включается при вводе комбинации “Ctrl + Shift + ~”. Именно поэтому проект получил название “Pastilda” (от password + tilda “~”).

Более подробно об идее и технической реализации — в статье Пастильда — открытый аппаратный менеджер паролей.

После разработки и производства опытной партии, мы попробовали найти клиентов и покупателей в России, но дальше обсуждений дело не дошло. Тогда мы решили собрать средства через краудфандинг и остановились на платформе Crowd Supply, которая специализируются на open-source hardware проектах. Мы поставили цель и в итоге перевыполнили ее почти в три раза. Как это вышло? Читайте в статье Пастильда: нишевый краудфандинг
Оставалось произвести и поставить устройства инвесторам.


Начинаем производство


На момент запуска первой партии у нас были заявки на 182 Пастильды от 149 инвесторов. Заказы были со всего мира:



Статистика по странам на текущий момент:
  1. США: 143 шт.
  2. Германия: 64 шт.
  3. Австралия: 14 шт.
  4. Франция: 14 шт.
  5. Россия: 14 шт.
  6. Канада: 13 шт.
  7. Швейцария: 13 шт.
  8. Великобритания: 13 шт.
  9. Голландия: 9 шт.
  10. Испания: 8 шт.
  11. Австрия: 5 шт.
  12. Дания: 5 шт.
  13. Сингапур: 4 шт.
  14. Китай: 3 шт.
  15. Израиль: 3 шт.
  16. Бельгия: 2 шт.
  17. Финляндия: 2 шт.
  18. Ирландия: 2 шт.
  19. Италия: 2 шт.
  20. Япония: 2 шт.
  21. Колумбия: 1 шт.
  22. Чехия: 1 шт.
  23. Корея: 1 шт.
  24. Македония: 1 шт.
  25. Малайзия: 1 шт.
  26. Новая Зеландия: 1 шт.
  27. Норвегия: 1 шт.
  28. Румыния: 1 шт.
  29. Словения: 1 шт.
  30. ЮАР: 1 шт.
  31. Вьетнам: 1 шт.



Интересно, что несмотря на наши статьи на русском языке, заказов из России всего 14 штук. Производству мы заказали 324 Пастильды, на такое количество хватило собранных средств.
Из-за специфики устройства мы воспользовались советом Crowd Supply и разместили производство в США на заводе Macrofab. Немного о том, как там всё устроено. Заходим на сайт и создаём заказ. Загружаем ODB++, внутри есть всё про наше устройство: слои платы, перечень компонентов (Bill of materials или BOM), их расстановка и т.д. Дальше надо сопоставить свой BOM с компонентами, доступными на складе, а также подтвердить правильность расположения компонентов сверху и снизу платы.



После этого получаем стоимость и сроки производства для любых партий. Себестоимость расписана подробно: сколько стоит труд, сколько компоненты, сколько печатные платы и т.д.:



Также строится график, который поясняет падение себестоимости при росте партии:



Фабрика берётся не только за сборку, но и за тестирование устройств. Для этого надо расписать методику тестирования и прошивки в специальном разделе. Стоимость прошивки около $1 за минуту.
Производство партии из 324 штук заняло около 8 недель. 10% плат не прошли тестирование с неясным диагнозом «некорректно отрабатывающий загрузчик». Коммуникация была крайне медленной, потери незначительные, так что мы просто проигнорировали эту проблему и списали эти 10% в утиль. Запомните этот момент. Работающие платы были отправлены инвесторам, жалоб на них не поступало.
Продажи продолжались, наша Пастильда даже появилась на Mouser с лютой наценкой по $125. Когда произведенные платы были проданы, мы решили запустить ещё одну небольшую партию в 55 устройств. На этот раз производство заняло около 7 недель, а тестирование проводилось сотрудниками Crowd Supply. Вот график, поясняющий хронологию заказов, отгрузки и производства Пастильд:



Производство показано условными чёрточками.

Что-то пошло не так


Через некоторое время мы узнали, что с частью новой партии возникли проблемы. 10 Пастильд прошли тестирование, а остальные 45 – нет. Устройства прошиваются как надо, светодиод моргает, но подключённая клавиатура не работает. Проблема на производстве? Кривые руки тестировщика? Несколько месяцев мы пытались решить проблему удалённо. Не достигнув успеха, мы попросили выслать нам несколько штук для исследования. Получили образцы и выяснили: в схему закралась ошибка. Вот здесь:



На выходе линейного преобразователя D4:5 TPS76333 напряжение около 4В вместо 3.3В. Ёмкость С13 на выходе слишком маленькая. Производитель просит как минимум 4,7мкФ, а у нас – 1мкФ. В теории это может приводить к возбуждению источника и повышению напряжения на выходе. После замены ёмкости на 10 мкФ питание вроде пришло в норму, но платы как следует не заработали.
Пришло время «перекинуть проц»
Это значит выпаять микроконтроллер с платы и поставить на его место новый или взятый с донора. В этом случае мы перекинули МК с платы из первой партии. Заработало.
Вывод: из-за неверной ёмкости повышается питание МК, отчего он повреждается. Должен ли STM32 держать такое напряжение? В документации написано, что максимальное напряжение без повреждения чипа – 4В, то есть мы ходили по краю. Но почему раньше эта проблема не проявлялась? Мы сообщили коллегам в США о находках и попросили сверить маркировки контроллеров из разных партий. Маркировки разные:



Что можно узнать из маркировки? Согласно статье и сведениям из описания на микроконтроллер, можно сказать следующее:
Первая партия – Китай, изготовлен на 19 неделе 2007 или 2017 года. Скорее 2017, они начали производить серию F4 только в 2011 году. Ревизия контроллера – 2.
Вторая партия – Филиппины, изготовлен на 25 неделе 2017 года. Ревизия контроллера – Y.
Похоже, микроконтроллеры из Филиппин ревизии Y менее устойчивы к повышенному питанию, чем контроллеры ревизии 2 из Китая. Мы приняли решение переслать все устройства обратно на Macrofab, попросить их провести своё исследование и поменять микроконтроллеры и конденсаторы на всех платах.

Следствие ведёт Macrofab


Там за дело взялся Инженер, который воспользовался осциллографом и вольтметром, и нашёл наши проблемы. Вот что он нам сообщил:

  1. 75% плат работают, это исключает проблемы с платами или ошибки в Gerber files
  2. Позиционирование(поворот) компонентов в порядке.
  3. К качеству пайки претензий нет.
  4. Измерили напряжения питания 3.3В и 5В мультиметром, напряжения в норме.
  5. Проверили тактирование 25МГц.
  6. Большинство плат зависают во время работы. Возможная причина – бракованный микроконтроллер или флуктуации питания.
  7. Измерение питания 3.3В осциллографом показало напряжение 4.1В во время загрузки на всех платах. Похоже, регулятор не в состоянии поддерживать напряжение питания.
  8. Возможно, некоторые контроллеры устойчивы к повышенному питанию, а некоторые — нет.
  9. На выходе регулятора, согласно Datasheet, должно быть минимум 4.7мкФ. Судя по схеме, ёмкость на выходе D4 TPS76333 не достаточна, С13 обозначен как 1 мкФ. Заменим конденсатор на 10мкФ и посмотрим, как это повлияет на стабильность
  10. Замена конденсатора сделала нерабочую плату рабочей на время, затем она вновь сбоит.
  11. Напряжение питания выглядит шумнее, чем ожидалось. Рекомендуем решить эту проблему перед следующим производством.

Проблема подтвердилась, скорее всего мы имеем дело с ошибками дизайна. К производству вопросов не было, помочь они не могли. Платы вернулись к Crowd supply, а оттуда отправлены к нам.

Следствие ведёт Третий пин


Наконец, у нас в руках 41 плата. Ну, мы-то сейчас всё исправим! Первым делом на всех платах перепаяли ёмкость С13 на 10 мкФ. Начали тестировать все платы по очереди. Получили разнообразное поведение плат:
  • запускается, но виснет через некоторое время, клавиатуру не определяет
  • вообще не запускается, признаков жизни нет
  • при включении начинает быстро моргать
  • включается, прошивается, виснет, микроконтроллер греется

Рабочих плат нет. Замерили питание 3.3В у МК, а там – 4 вольта! Внезапно понимаем, что замена конденсатора у источника проблему повышенного напряжения не решает. Смотрим осциллографом, изучаем ток потребления, меняем источник на LM1117-3.3,



убираем фильтры по питанию и земле, но ничего не меняется – питание по-прежнему прыгает до 4В.



После включения некоторое время напряжение в норме, никаких помех, никакой раскачки напряжения, а потом скачком меняется до 4В и держится так бесконечно долго.
Обнаружено аномальное поведение питания при включении: питание модулируется импульсами ~100мс. Появилась гипотеза: источник питания ни при чём, шину питания каким-то образом портит сам микроконтроллер. Может быть, 5В с USB порта «стекает» в микроконтроллер через ногу VBUS. В прошивке Пастильды эта нога никак не инициализируется. Попробовали принудительно инициализировать ногу на вход:



Мы на верном пути! Питание в норме, правда не сразу – ведь у нас сначала работает загрузчик. Идём туда.
Используемый загрузчик OpenBLT по умолчанию инициализирует USART1, который пересекается с ногой VBUS. Причём это Tx, то есть нога является выходом. Выходом, на который снаружи напрямую приходит питание с USB порта. Заглянули в загрузчик, убрали инициализацию USART1 – питание стало нормальным. Это победа!
У микроконтроллеров STM32 при питании 3.3В часть ног устойчивы к сигналам 5В TTL, в описании они обозначаются FT (Five volt Tolerant). Освежим память про эти самые FT ноги:
  • Это свойство относится к ноге, только если она настроена как вход.
  • Максимальное напряжение на ноге 5.5В.
  • Напряжение на ноге не может превышать самое низкое из питаний МК более чем на 3.6В.

Вот структурная схема «ножки»:




Почему нога, настроенная на выход, не может быть FT?
Видно, что Output buffer содержит два полевых транзистора, верхнее плечо — P-канальный и нижнее — N-канальный. Хотя на структурной схеме выше транзисторы изображены без встречный диодов, можете быть уверены, что они там есть. На самом транзисторы выглядят так:



Если на P-канальном транзисторе напряжение на Drain(Сток) превышает напряжение на Source(Исток), через этот диод будет течь ток, пока напряжения не сравняются.


Наш случай с питанием МК через LDO от USB рассмотрен в AN4899 отдельно. На ногу VBus питание 5В должно приходить только тогда, когда микроконтроллер уже запитан. Делаем вот так:



Что в итоге стало причиной проблем на производстве?
  1. Программа микроконтроллера настраивала ноги против себя.
  2. Из-за этого повышалось питание и контроллер повреждался.
  3. Аппаратные ошибки себя не проявили.


Теперь мы знаем, сколько можно огрести ошибок в плате с тремя разъёмами и микроконтроллером (сколько угодно).
У нас их три: две аппаратные и одна программная. На то, чтобы разобраться в истинных причинах «производственной» проблемы, у нас ушёл год.

Экономика


Давайте посмотрим, сколько мы заработали на этом проекте.
Поступления через Crowd Supply — $14610. Вот как распределились расходы:



Большую часть ожидаемо занимает производство печатных плат. Всё остальное: комиссия площадки, комиссии за переводы денег, доставка и сборка грузов в сумме — 24%. Площадка взяла 10% комиссии со всех платежей. Все расходы мы поручили ребятам с площадки, так что деньги так и не приходили к нам на счёт.
В прошлой статье мы раскрыли трудоёмкость разработки – около 1840 часов. Представим, что этот проект делали по коммерческим ставкам. Тогда затраты на разработку можно оценить примерно в $100000.
Чтобы окупить разработку нам надо продать ещё около 3000 Пастильд.

Вывод


Такие проекты как Пастильда рождаются в сердцах разработчиков и реализуются наперекор здравому смыслу.

Такой подход работает с хобби проектами, где главная цель – пробовать новое. Но когда к нам обращаются с коммерческими проектами, первое, что мы делаем – проводим анализ экономической эффективности. Если экономика не сходится, мы отговариваем от запуска проекта, начиная с этапа проработки ТЗ. У нас даже родилась идея новой статьи. Что-то вроде «10 причин, почему вам НЕ нужна разработка своего устройства». Актуальная тема?

Что дальше?


Главный вывод, который мы сделали за время работы над этим проектом: в текущем исполнении Пастильда подходит только для личного пользования. Если мы хотим, чтобы устройство решало задачи на уровне бизнеса – одной аппаратной части недостаточно, нужно строить систему.

Есть следующие идеи:
  1. Совместить физическое и серверное (или облачное) хранение пароля. Условно, разделить пароль на две части. Первая часть хранилась бы на физическом ключе (как сейчас реализовано), вторая в момент ввода пароля запрашивалась с сервера и передавался на ключ, например по Wi-Fi.
  2. Аналогично первому варианту, но хранить на ключе не часть пароля, а закрытый ключ шифрования, который будет расшифровывать пароль, приходящий с сервера по Wi-Fi (пароль предварительно зашифрован другим ключом).

Будем рады обратной связи от коллег из отрасли информационной безопасности.

Объявление пользователям:


Необходимо обновить загрузчик Пастильды во избежание повреждения МК. Обновлённый загрузчик лежит в репозитории. Там же лежит инструкция, как его прошить в Пастильду. Перепаивать конденсатор для устойчивой работы можно, но не обязательно.
Ещё раз просим прощения за задержку у покупателей, которые всё ещё ждут свои Пастильды. Все оставшиеся 40 Пастильд разлетятся к вам в ближайшие недели.

Инициализируйте пины с умом, берегите выходы смолоду. И конечно, используйте сложные пароли.
Источник: https://habr.com/ru/company/thirdpin/blog/466533/


Интересные статьи

Интересные статьи

Привет, Хабр! Я люблю считать и собирать данные! 2020 год состоял из 8784, 4874 из которых я смог учесть в собранной мною статистике. Я знаю как потратил 55% всего времен...
В 1С-Битрикс: Управление сайтом (как и в Битрикс24) десятки, если не сотни настраиваемых типов данных (или сущностей): инфоблоки, пользователи, заказы, склады, форумы, блоги и т.д. Стр...
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
Приветствую вас (лично вас, а не всех кто это читает)! Сегодня мы: Создадим приложение (навык) Алисы с использованием нового (октябрь 2019) сервиса Yandex Cloud Functions. Настроим н...
Получить трафик для интернет-магазина сегодня не проблема. Есть много каналов его привлечения: органическая выдача, контекстная реклама, контент-маркетинг, RTB-сети и т. д. Вопрос в том, как вы распор...