Кликабельно
Я инженер встроенных систем. В свободное время я часто ищу то, что можно будет использовать в проектировании будущих систем, или что-то из разряда моих интересов.
Одна из таких областей – дешёвые компьютеры, способные поддерживать Linux, и чем дешевле, тем лучше. Поэтому я зарылся в глубокую кроличью нору малоизвестных процессоров.
Я подумал: «Эти процессоры настолько дешёвые, что их практически можно раздавать даром». И через некоторое время ко мне пришла идея сделать голую карточку для Linux в форм-факторе визитной карточки.
Как только я подумал об этом, я решил, что это было бы очень круто сделать. Я уже видел электронные визитки до этого, и у них были различные интересные возможности, типа эмулирования флэш-карт, мигания лампочек или даже беспроводной передачи данных. Однако визитки с поддержкой Linux я не встречал.
Так что я сделал себе такую.
Это законченная версия продукта. Полноценный минимальный компьютер на ARM, на котором работает моя особая версия Linux, созданная при помощи Buildroot.
В углу у неё есть USB-порт. Если подключить её к компьютеру, она грузится примерно за 6 секунд и её видно, как флэш-карту и виртуальный последовательный порт, по которому можно войти в оболочку карты. На флэшке лежит файл README, копия моего резюме и несколько моих фотографий. В оболочке есть несколько игр, классика из Unix типа fortune и rogue, небольшая версия игры 2048 и интерпретатор MicroPython.
Всё это сделано при помощи очень маленького флэш-чипа на 8 Мб. Загрузчик умещается в 256 Кб, ядро занимает 1,6 Мб, а вся файловая система root – 2,4 Мб. Поэтому для виртуальной флэшки остаётся много места. Там также есть домашняя директория, доступная на запись – если кто-то сделает что-то, что захочет сохранить. Это всё тоже сохраняется на флэш-чип.
Всё устройство стоит менее $3. Оно достаточно дешёвое, чтобы его можно было раздавать. Если вы получили от меня такое устройство, это означает, что скорее всего я пытаюсь произвести на вас впечатление.
Проектирование и сборка
Спроектировал и собрал я всё сам. Это моя работа, и она мне нравится, и большая часть трудностей заключалась в поиске достаточно дешёвых запчастей для такого хобби.
Выбор процессора был самым важным решением, влиявшим на стоимость и реализуемость проекта. После активных исследований я выбрал F1C100s, относительно малоизвестный процессор производства Allwinner, оптимизированный по стоимости (т.е. чертовски дешёвый). В одном корпусе находятся и RAM, и CPU. Купил я процессоры на Taobao. Все остальные комплектующие приобретены на LCSC.
Платы я заказал у JLC. За $8 мне сделали 10 копий. Качество их впечатляет, особенно за такую цену; не такие аккуратные, как у OSHPark, но всё равно выглядят хорошо.
Первую партию я сделал матово-чёрными. Смотрелись они красиво, но были очень маркими.
С первой партией была парочка проблем. Во-первых, коннектор USB был недостаточно длинным, чтобы надёжно вставать в любые USB-порты. Во-вторых, дорожки для флэш были сделаны неправильно, но я обошёл это, загнув контакты.
Проверив всё в работе, я заказал новую партию плат; фото одной из них вы можете видеть в начале статьи.
Из-за небольшого размера всех этих маленьких комплектующих я решил прибегнуть к пайке оплавлением припоя [reflow solder] с использованием дешёвой печки. У меня есть доступ к лазерному резаку, поэтому я вырезал на нём трафарет для пайки из плёнки для ламинатора. Получился трафарет достаточно неплохо. Отверстия для контактов процессора диаметром 0,2 мм требовали особой тщательности для качественного изготовления – критически важно было правильно сфокусировать лазер и подобрать его мощность.
Для удержания платы при нанесении пасты хорошо подходят другие платы
Я нанёс паяльную пасту и расположил компоненты вручную. Я озаботился, чтобы нигде в процессе не использовался свинец – все платы, комплектующие и паста соответствуют стандарту RoHS – чтобы меня не мучила совесть, когда я буду раздавать их людям.
С этой партией я немного промахнулся, однако паяльная паста прощает ошибки, и всё собралось нормально
На расположение каждого компонента уходило примерно по 10 секунд, поэтому я попытался сделать их количество минимальным. Больше подробностей о проектировании карты можно почитать в другой моей подробной статье.
Список материалов и стоимость
Я придерживался строгого бюджета. И визитка получилась такой, как задумано – мне не жалко её отдавать! Конечно, всем и каждому я её раздавать не буду, поскольку на изготовление каждого экземпляра тратится время, а моё время в стоимости визитки не учитывается (оно как бы бесплатное).
Компонент | Цена |
---|---|
F1C100s | $1.42 |
PCB | $0.80 |
8MB flash | $0.17 |
Все остальные компоненты | $0.49 |
Итого | $2.88 |
Естественно, есть ещё расходы, которые сложно рассчитать, типа доставки (поскольку она распределилась между компонентами, предназначенными для нескольких проектов). Однако для платы с поддержкой Linux это определённо весьма дёшево. Также эта разбивка даёт неплохое представление о том, почём обходится компаниям изготовление устройств самого нижнего ценового сегмента: можете быть уверены в том, что компаниям это обходится ещё дешевле, чем мне!
Возможности
Что сказать? Карта загружает очень сильно обрезанный Linux за 6 секунд. Из-за форм-фактора и стоимости у карты нет I/O, сетевой поддержки, какого-то серьёзного объёма хранилища для запуска тяжёлых программ. Тем не менее, я сумел впихнуть в образ прошивки кучу всего интересного.
USB
С USB можно было придумать много чего интересного, но я выбрал самый простой вариант, чтобы у людей с большой вероятностью всё заработало, если они решат попробовать мою визитку. Linux позволяет карте вести себя как «устройство» с поддержкой Gadget Framework. Некоторые драйвера я брал из предыдущих проектов, включавших в себя этот процессор, поэтому у меня есть доступ ко всей функциональности платформы USB gadget framework. Я решил эмулировать заранее сгенерированный флэш-диск и дать доступ к оболочке по виртуальному последовательному порту.
Оболочка
После логина под пользователем root на последовательную консоль можно запускать следующие программы:
- rogue: классическая для Unix приключенческая игра про подземелья;
- 2048: простая игра в 2048 в консольном режиме;
- fortune: вывод различных пафосных изречений. Я решил не включать сюда всю базу цитат, чтобы осталось место для других функций;
- micropython: очень маленький интерпретатор Python.
Эмуляция Flash Drive
Во время компиляции инструменты сборки генерируют небольшой образ FAT32 и добавляют его в качестве одного из разделов UBI. Подсистема гаджетов Linux представляет его ПК как устройство-накопитель.
Если вам интересно посмотреть, что появляется на флэшке, то проще всего это сделать, ознакомившись с исходниками. Там лежит также несколько фотографий и моё резюме.
Ресурсы
Исходники
Моё дерево Buildroot выложено на GitHub — thirtythreeforty/businesscard-linux. Там есть код генерации флэш-образа NOR, который устанавливается при помощи режима скачивания по USB у процессора. Там также есть все определения пакета для игр и других программ, которые я запихнул в Buildroot после того, как всё заработало. Если вы хотите использовать F1C100s в своём проекте, это станет отличной отправной точкой (не стесняйтесь задавать мне вопросы).
Я использовал прекрасно исполненный проект Linux v4.9 для F1C100s за авторством Icenowy, немного его переделав. На моей карточке работает почти стандартная v5.2. Она лежит на GitHub — thirtythreeforty/linux.
Думаю, у меня на сегодня самый лучший порт U-Boot для F1C100s в мире, и он частично также основан на работе Icenowy (неожиданно, заставить U-Boot работать как надо оказалось весьма неприятной задачей). Также можно взять на GitHub — thirtythreeforty/u-boot.
Документация на F1C100s
Нашёл довольно скудную документацию F1C100s, и выкладываю её здесь:
- Allwinner F1C100s Datasheet – общая информация и распиновка.
- Allwinner F1C600 Reference Manual – определения регистров для F1C600, который на самом деле является тем же F1C100s, но переименованным с заявленной поддержкой Linux (ха!).
- Я активно заимствовал информацию из схемы от Sipeed's Lichee Nano – платы разработки, которую я использовал для настройки софта.
Для любопытных загружаю схему моего проекта.
Заключение
Я много чему научился в процессе разработки этого проекта – это мой первый проект, где я использовал печь для пайки оплавлением припоя. Также я научился находить ресурсы для компонентов с плохой документацией.
Я пользовался имевшимся у меня опытом работы со встроенным Linux и опытом разработки плат. Проект не без изъянов, однако неплохо показывает все мои умения.
Интересующимся подробностями работы со встроенным Linux предлагаю прочесть мою серию статей об этом: Mastering Embedded Linux. Там я подробно рассказываю о том, как создавать ПО и железо с нуля для крохотных и дешёвых Linux-систем, похожих на эту мою визитную карточку.
Комментарии (104)
customizer
27.12.2019 11:10С одной стороны — шикарная вещь, с другой — достаточно бессмысленная. А ведь давно просится устранить самый главный недостаток банковских карт — нет информации о балансе карты на настоящий момент. То есть, никогда не знаешь точный объем средств, имеющихся на карточке. Хотя возможности технического решения этой проблемы давно имеются.
Представьте, рассчитываетесь карточкой за покупку в магазине и показания оставшихся средств высвечиваются на ЖК экране. Далее, вынимаете карточку, ЖК экран гаснет, но имеется возможность в любой момент на короткое время его включить и «вспомнить» сколько осталось денег.APXEOLOG
27.12.2019 11:15+1Так ведь банк вообще не посылает обратно на терминал ваш баланс. Более того, я бы и не хотел, чтобы такая информация передавалась.
Вопрос баланса карты решается приходом СМСки на телефон в Вашем кармане по факту оплаты
Arson
27.12.2019 11:17большинство банков уходят от смс в сторону push, а это не всегда удобно.
APXEOLOG
27.12.2019 11:25К счастью я пока с таким не сталкивался. Во всяком случае в банках с которыми я имел дело есть отдельный пакет СМС оповещений
Nikobraz
27.12.2019 12:40У меня, если за 2 минуты пуш не дошел, то приходит смс.
А если пуш дошёл, то есть интернет и можно зайти в приложение и посмотреть.Arson
27.12.2019 12:43Бывает что надо посмотреть последний баланс при отсутствии нормального покрытия сети.
DMGarikk
27.12.2019 12:54ну это не возможно в принципе по той-же самой проблеме
1) вы купили чтото в магазине
2) вы купили чтото в интернет-магазине
3) у вас списалась годовая комиссия по карте
4) вам начислили кешбек
— какой баланс вам карта покажет?Arson
27.12.2019 12:59Так вот я как раз про это, если смс приходят по любой операции, то в последнем сообщении гарантированно последний баланс, который вы можете увидеть даже если сети нету.
fougasse
27.12.2019 13:05Если мети нету — то и СМС может не быть. Доставка СМС, как бы, не гарантируется, вообще.
Arson
27.12.2019 13:06Я имел ввиду последний баланс который был:)
Du-X
29.12.2019 13:16А в чем проблема? Многие банки до сих поддерживают возможность запроса баланса по смс. Отправляешь смс на номер банка в ответ получаешь смс с актуальным балансом карты. И пуши доступны пока их не очистишь. Если так принципиально знать актуальный баланс в любое время, можно не удалять пуш.
abar
27.12.2019 16:54Точно в последнем? Пару раз сталкивался со случаями, когда СМС перемешивались по дороге и _актуальный_ баланс был в предпоследнем. Что очень сильно наводило панику на пользователя.
shurshur
27.12.2019 21:28Не только последовательность прихода СМС не гарантируется, но и то, что транзакция уже пересчитала баланс. Например, операции по погашению задолженности на кредитках Сбера часто выполняются не один час.
И на самом деле в МП может быть смотреть даже лучше. Во всяком случае, этот баланс будет запрошен из банка вот прямо сейчас, а что там с СМС творилось никогда толком нельзя знать. Тем более, что при недоступности ТА получателя СМСЦ ставит сообщение в отдельную очередь и может повторить попытку доставки неизвестно когда.zuek
31.12.2019 12:50Не только в СБ — некоторые банки отображают баланс сразу с учётом пополнения, но при попытке выполнить операцию списания, можно словить ошибку "недостаточно средств", и если копнуть глубже (углубиться в анализ "истории операций"), можно выяснить, что свежепришедшие средства ещё "не зачислены" (в зависимости от дизайна МП, операция какое-то время отображается красной или с подписью "Ожидает подтверждения")…
… а ещё есть "дополнительные карты", привязанные к тому же счёту.
Так что однозначно — только онлайн, только в клиент-банке.DMGarikk
31.12.2019 12:55у сбера еще весело получать на дебетовке штраф за овердрафт по этой причине (хотя давно такого не было, видимо придумали костыль, но деньги штраф они возвращали по звонку)
1) на карте 0
2) кладешь 1000р
3) сразу переводишь другому человеку эту 1000р
4) через пару дней получаешь штраф за овердрафт… хотя если смотреть по операциям, на карте всегда 0 или плюс
потому что между 2 и 3 на карте фактически денег нет, несмотря на то что баланс «вроде как» положительный
У многих по этому поводу бомбит с проклятиями в сторону банка в стиле 'не садись играть с шулером'
Barbaresk
27.12.2019 21:35Если это сбер — то там можно обратно включить нормлаьное уведомление об изменениях на СМС.
Jesting
27.12.2019 12:29Может посылать в отдельных случаях. Например снятие наличных в банкомате своего банка.
fougasse
27.12.2019 13:06Разница, все-таки, большая, между своим банкоматом в своей сети и непонятным терминалом «in the wild».
DMGarikk
27.12.2019 13:08и вообще запрос баланса, как операция — стоит денег
Viceroyalty
27.12.2019 15:40Для клиента — нет
DMGarikk
27.12.2019 17:23для клиента банка — когда он делает запрос в банкомате своего банка.
А если вы запросите баланс в банкомате чужого банка, с вас запросто сдерут комиссию
Собственно эквайринговый терминал в магазине с большой вероятностью (ну за исключением случая если у вас не сбер, со сбером вероятность пониже), это устройство 'не вашего банка' и за запрос баланса его силами с вас сдерут комиссию
===
Тут есть некая скрытая хитрость, во времена существования ОРС некоторые вещи выполнялись 'без комиссии' если их делать в банкоматах этой сети если ваш банк туда входит… что создавало впечатление что комиссий нет… и сейчас есть некоторые межбанковские договоры с похожими плюшками
Чтобы понять реалии жизни, попробуйте за бугром узнать баланс карты своей российскойViceroyalty
27.12.2019 17:33Расслабился я после поездки по Вьетнаму — там как-то попроще с комиссиями (видимо, мало кто в мире жаднее наших банкиров)
DMGarikk
27.12.2019 11:28Хотя возможности технического решения этой проблемы давно имеются.
Это каким образом?
Все чиповые карты 'умеют' помнить последний свой баланс, однако как решить проблему его изменения при оплате в интернете например?ctacka
27.12.2019 20:25-2Ну когда у вас смартфон вместо карточки, вот тогда проблема прекрасно решается.
fougasse
27.12.2019 13:04А мне наоборот отлично, что всякий Вася из ночного магазина не имеет никакой информации о количестве денег на моей карте.
И я против передачи такой информации.JediPhilosopher
27.12.2019 18:29+1Терминал выступает лишь передатчиком сообщений и не может в них заглянуть. Карта обменивается шифрованными сообщениями с банковским ПО. Так что в теории это все можно сделать секьюрно
dididididi
27.12.2019 15:18+4хранить баланс на «фронте», как то не секюрно)
DMGarikk
27.12.2019 15:24+1а карточка это не фронт. Это полноценный токен для хранения ключей с криптопроцессором который умеет проверять пинкод в оффлайн режиме например
p.s. и баланс у себя она хранит кстати, хотя и редко обновляетJesting
27.12.2019 19:25что прям хранит-хранит? баланс? типичная EMV-карта при определенных условиях может хранить всякую фигню вроде сумму оффлайн транзакций. Баланс тоже можно прикрутить технически, но зачем?
DMGarikk
28.12.2019 00:18+1например чтобы оффлайн операцию провести с большим доверием (типа последний остаток $100500 а у вас операция на $2, в РФ оффлайн не делают конечно практически нигде и никогда, но карта то всеравно все это поддерживает
Jesting
28.12.2019 11:38Нету больше или меньшего доверия. Карта может провести операцию в оффлайн или не провести, в зависимости от своих ограничений и ограничений терминала после выполнения ряда связанных с этим проверок. В набирающем обороты бесконтакте карта вообще не ждёт ответа от хоста и не знает как завершилась транзакция.
Оффлайн операции есть на прогулочных кораблях на Волге (это на вскидку то что вспомнил)
imotorin
28.12.2019 16:36Самый массовый оф-лайн это
же городской транспорт.
Метро и валидаторы в автобусах пытаются относительно быстро.
В СПб у меня карта как-то попадала в черный список из-за аварии процессинга-эмитента еще до конца поездки.
А в ЕКБ кондуктор с ручным терминалом выгружает транзакции только в конце смены.
dididididi
30.12.2019 10:03Да хоть как. Копируем карточку и дважды(n-раз) снимаем с нее максимум оффлайн.
NeoCode
27.12.2019 19:01Для реализации этой идеи напрашивается e-ink экран, встроенный в карточку.
Вместо usb сделать питание по nfc, правда очень не уверен в том, что его будет достаточно для обновления e-ink… но помечтать можно (в конце концов мощность nfc можно увеличить).
Ну и кстати, в рамках nfc вполне можно представить расширения mass storage class и virtual com port. Будут бесконтактные флэшки:)
UPD: не знаю чего вас минусуют, идея-то в целом неплохая, хотя конечно все аспекты не раскрыты.customizer
27.12.2019 20:28-3Не обращайте внимания, это Хабр. Здесь все по Оруэллу — «все животные равны, но некоторые равнее».
corvair
28.12.2019 07:50+2Для банковской карты отображение баланса на ней самой совсем не нужно, даже нежелательно, а вот для пополняемого проездного e-ink экранчик был бы очень полезной фишкой. Типа как электронный ценник в магазине.
compilator
28.12.2019 10:43Можно еще Алису в карточку встроить, чтобы не вынимая карту из кармана баланс узнать. Ваш. Вон тем ребятам.
EternalStudent
29.12.2019 13:17Такие карты были — исключительно оффлайновые, с чипом и без магнитной полосы. Остаток хранился на чипе. Были т.н. «Пункты пополнения» в банках и на проходных крупных клиентов. Терминал проводил операцию без связи с процессингом, список операций передавался по расписанию, раз в сутки, обычным модемом. Лично занимался. Беларусь, Национальная система «БелКарт» (первого поколения). Конец девяностых — начало двухтысячных, до массового развития Visa и MasterCard. Со связью тогда туговато было, вот и пытались в оффлайне работать.
ua30
27.12.2019 11:23Все новое — это хорошо забытое старое? USB-визитка Фрэнка Чжао habr.com/ru/post/107357 Там, конечно, не «runs Linux», но 2010 год.
galqiwi
27.12.2019 12:18+1Да ну, для простого rubber duck-а много ума не надо, а в статье человек сам засунул целый рабочий Линукс в 3$ карточку. Не принижая Чжао, эти проекты даже рядом не сорят.
ua30
27.12.2019 12:55Я всегда лоялен к чужому мнению. Но не в этом случае. И вот почему.
Во-первых, это было 10 лет тому назад. Тогда и близко не было подобных возможностей (Гугл сразу показывает что тот же F1C100s 2015 года).
Во-вторых, это мне даже важнее. Чжао придумал сам концепт. По крайней мере лично я более ранних упоминаний не слышал. На сегодня USB визиток уйма разных есть. В том числе и промышленных заготовок.
Иными словами, Хиллард лишь развил идею. Да, круто развил, без вопросов. Мне даже эстетический вид и сама концепция понравились больше технической сути. Но в моем понимании, развитие технологии и создание инновации — принципиально разные вещи.vvzvlad
27.12.2019 18:16Ну, разница между двумя проектами огромная, и объединяет их только USB и то, что там где-то в глубине есть кусочек кремния. Так что всё-таки "создание инновации".
bolk
27.12.2019 22:11Конечно Хиллард «лишь развил идею» — в его статье четыре (!) ссылки на чужие электронные проекты. Вы статью-то читали?
vinny496
27.12.2019 23:29+1Насчёт линукса и габаритов — в типоразмере SD-карт с 2008 года в лице Eye-Fi, а потом и разными другими фирмами выпускались как карты памяти, так и адаптеры на MicroSD, и там помещался аналогичный компьютер в гораздо меньшем корпусе, зато с WiFi (в т.ч. с Linux habr.com/ru/post/191742 ). Но да, цены не минимальные, задачи другие, и в любительском варианте повторить сложнее.
Tamul
27.12.2019 11:31Ух ты, какой интересный процессор. Неплохо было бы освоить для разных окололинуксовых самоделок. Хотя это и Allwinner с его легендарными граблями.
Спасибо за перевод
stavinsky
27.12.2019 13:00Глянул в chipdip — проц стоит 600+ рублей
Глянул на алихе — $3.50+
Digikey — $7+
Где он его за бакс нашел?GarryC
27.12.2019 13:25Али — 2,3$
Taobao — 92/61,95 = 1.4 (как в статье)rboots
27.12.2019 17:21Вы нашли на Taobao английскую версию или прямо на китайской смотрите? Как у них с доставкой за пределы Китая?
GarryC
28.12.2019 12:34t-b.ru.com/catalog/search/?cid=all&platform=taobao&q=F1C100s русская версия.
Но с доставкой вне Китая совсем плохо.
akadenis
29.12.2019 13:16алиэкспрес 2,3$ это с платной пересылкой. Бесплатная доставка = 250р. Но это поштучно, оптом конечно существенно дешевле, возможно вдвое. Наверно у автора статьи есть доступ не только к лазерному резаку, но и к оптовым ценам.
f1c100s — микросборка, там на подложке два чипа, процессор + SDRAM (32 МБ). Цена меньше доллара? возможно. Возможно даже, что что-то китайцы дарят в нагрузку, возможно свои баги, а возможно и закладки. Но это не точно.
Молодцы, что тут скажешь.
spc
27.12.2019 13:30+1I found it at $1.20 or so on Taobao, and recently I've seen listings for $0.90 apiece
Fregl
27.12.2019 15:00+4Скоро тараканы будут бегать с чипами на спине под управлением линукс )))
Lsh
27.12.2019 21:41Где-то это было...spot62
27.12.2019 15:29толи дело Тони Старк — на его «дизайне» работало собственное сердце…
abar
27.12.2019 17:01+8Тони Старка не существует
alexxz
27.12.2019 18:02+1Зате есть Тэл Голсуорси https://www.ted.com/talks/tal_golesworthy_how_i_repaired_my_own_heart/up-next который починил себе сердце 8)
roboter
28.12.2019 13:13Обидно что столько пинов идут вникуда, сделать бы хотябы под провода отверстия, хорошая бы девборда получилась бы.
Stas911
29.12.2019 05:53Мне одному кажется так себе идея втыкать в свой комп непойми кем сделанную флешку?
MozgFx
29.12.2019 13:16Баланс на момент оплаты может хранится где угодно. Но вот как быть если вы расплатились, а со счета через время уже списали платежи за проезд в трамвае или если какой-то магазин сверку итогов сделал через неделю-другую… Вы рассчитываете на одну сумму, а там другая.
Многие не понимают как работает банк и пишут чушь, а потом задают вопросы откуда у них на карте образовался технический овердрафт.
massmedium
29.12.2019 13:16Очень круто, но типографика ужасна, достаточно было набрать инфу тем же шрифтом, которым нанесены на плате технические пометки, смотрелось бы куда органичнее и целостнее.
vorput
30.12.2019 21:02Припоминаю, году эдак в 1998 или 99, сейлз из Sun Microsystems показывал нам перстень с java «на борту» (вот такой, нашел на eBay-е — купить, что ли? ;) ). Конечно, это далеко не business card embedded Linux (что весьма впечатляюще), но и 1998 год — не 2019…
begemot_sun
Кто первый сделает стартап в России (в мире)?
IgorPie
Флэшку-визитку делали еще на attiny85, да и с одноплатниками напряженки давно нет, поэтому, не очень ясно в чем стартап и откуда взяться притоку пользователей.