Главная » Хабрахабр » Как я разрабатывал Российский планшет

Как я разрабатывал Российский планшет

Доброго времени суток, друзья!

Только суровая разработка, только хардкор…
Не знаю, не слишком ли громкое название я выбрал для статьи, но вроде как все честно: разработка Российская, форм-фактор планшета, хоть и похож на кирпич «улыбчивый смайл». В этой статье не будет Arduino, Raspberry, Olimex, переноса внутренностей планшета в свой «кастомный» корпус из картона и пластыря и т.д.

Для своих читателей я решил набросать план статьи, чтобы можно было легко ориентироваться в ней и пропустить ненужные пункты, но если уж Вы собрались написать комментарий, то просьба прочитать все, «чтобы не было мучительно больно за мучительно прожитые годы … (с)».

  1. Введение. Идея.
  2. Ответы на вопросы.
  3. Что хотелось получить на выходе.
  4. Описание железа.
  5. Перспективы. Если это будет нужно.
  6. Выводы. Подведение итогов.

1. Введение. Идея.

Как я уже писал ранее в своих статьях, меня очень привлекает тема вывода изображения на матрицу, и все что с этим связано. Сейчас уже никого не удивишь скалерами для матриц, в виде небольших плат за $10-$15, из которых можно легко сделать/отремонтировать монитор или ТВ, но с ними я уже наигрался и хочется чего-то нового.

Конечно, сам планшет мне не нужен, его можно купить за умеренные деньги при необходимости или в крайнем случае сделать корпус из фанеры для Raspberry, но зачем мне Raspberry (а к ней можно даже корпус готовый прикупить)? Идея сделать нечто похожее на планшет родилась уже давно, и я ее постоянно вынашивал, обдумывая как бы реализовать меньшими усилиями и затратами с бОльшим профитом. Интересна была именно реализация на своем железе с полной разработкой, но на это нужны деньги, а прежде всего время, которого вечно не хватает (или в Ваших сутках больше 24 часов?).

Некоторые из них RGB, но также среди них оказалась LVDS матрица и встроенным драйвером подсветки и USB емкостным тачем. Толчком к реализации послужили сразу два события, первое – это неожиданно появились несколько ненужных матриц от 7 до 10 дюймов, которые ой как меня привлекли. Конечно, было проще выкинуть матрицы, и взять с полки готовый референс, но тут не все так просто, мы используем в своих разработках некий набор периферии (кодеки, физики, контроллеры заряда и т.д.), которые необходимо отлаживать под новый функционал, а также хотелось испытать что-то новое (да и матрицы очень привлекательные). Второе – это появилась слабая необходимость в компактном референсе для отладки софта под IMX6, в котором было бы почти все и еще немного. Конечно, стоит! Стоит ли на это потратить месяц своих свободных от работы вечеров, спросите Вы?

Я знал, что времени могу выделят совсем немного и в тоже время было не ясно дойдет ли до второй итерации. С этими мыслями и коробкой матриц я начал разработку.

1.
Рис. Фото «планшета» со стороны печатной платы.

2. Ответы на вопросы

Чтобы не было ненужных вопросов, я постараюсь часть из них предвидеть и сразу на них отвечу.

1 Не проще ли купить себе планшет?
— Проще, но менее интересно.
2. 2. Никакой партии не планируется, сделано, так сказать, для себя.
2. 2 Сколько он стоит и сколько будет стоить при партии?
— Стоит он дорого, но наша компания взяла все затраты на себя за реализацию моей маленькой прихоти. Почему не напечатали его на принтере, не выпилили из фанеры, не слепили из пластилина (и прочее).
— Сейчас я собрал все воедино, и, в принципе, можно что-то придумать по поводу корпуса, но пока нет ни времени, ни желания. 3 Где корпус? 4 Почему не взяли меньше/больше/тоньше дисплей?
— Дисплей достался бесплатно, а дареному коню как известно…
2. Если все-таки дойдет до второй итерации платы, когда можно будет уменьшить толщину, то в планах сделать корпус с тонким полированным металлическом листом снизу для отвода тепла.
2. 5 Для чего Вы поставили такой кодек/питатель/аккумулятор/физику и т.д.
— Набор микросхем ограничен нашим складом и хотелось как можно меньше закупать компонентов, поэтому старался использовать то, что есть.

Этот список можно продолжать почти бесконечно и Вы можете продлить его в комментариях, но я на этом закончу.

3. Что хотелось получить на выходе.

ТЗ было только в голове, а расширялось оно по мере добавления новых листов схемы в альтиуме. Конечно, хотелось выжать из процессора все что можно. На первом этапе, а возможно и на последнем, было решено делать все на нашем модуле, так как его плата 8 слоев, а для материнки мне понадобиться не более 4-х.

Интерфейсы:

1 LVDS – один канал для 10-дюймовой матрицы + емкостной тач.
3. 3. 3 Аудио – кодек с несколькими каналами на вход и выход + встроенные динамики и микрофон.
3. 2 Ethernet – 1000/100/10 (чтобы было).
3. 5 SATA – подключение внешнего накопителя SSD.
3. 4 HDMI – стандартный разъем для подключения монитора.
3. 7 E-Ink – маленький дисплей для отображения уведомлений, времени, заряда аккумулятора, сетей и т.д.
3. 6 Камера – одна, а лучше две + вспышка.
3. 9 CAN – дифференциальный, для подключения внешних устройств.
3. 8 GPS – любой модуль для отслеживания местоположения.
3. Хранение данных.
3. 10 SD карта – отладка и загрузка ПО. 12 USB – не менее 5шт + OTG + консоль.
3. 11 WiFi/BT/4G – на USB внутри корпуса (ниже поясню почему так).
3. 14 RTC – отдельная микросхема для хранения времени, когда устройство полностью обесточено.
3. 13 Акселерометр – для переворота экрана.
3. 16 Кнопки управления – включение/выключение/громкость/ресет.
3. 15 NFC – считыватель, чтобы поиграться.
3. 18 Питание 5-18В.
3. 17 Аккумулятор – 3,7В, 4-6А.
3. 19 ОС Linux.

Ниже я дам пояснения по некоторым противоречивым пунктам почему именно так. Вот вроде и все, что хотелось.

4. Описание железа

Справедливо сказать, почему все-таки на модуле, а не сразу на 8-слойной плате. Правильнее переносить все на одну плату только после отладки всей периферии, если это вообще будет нужно. Одна итерация платы (4-6шт) на восьми слоях (60ммХ40мм) стоит порядка 50тр + компоненты – это довольно прилично, так что правильнее на макете. Проц на модуле 4-х ядерный, каждое из которых по 1ГГц.

2.
Рис. Печать элементов корпуса

Их должно быть несколько, и они должны быть на плате. Первое по поводу чего я много думал – это беспроводные интерфейсы. С GPS все решилось само собой, я уже неоднократно использовал модуль SIM33 со встроенной антенной, он отлично работает, хоть и не дешевый, на выходе у него UART и я уже рисовал для него футпринт).

4G модемы бывают разных форм-факторов и модулями на разъеме и на плату под пайку и USB. Wi-Fi/BT можно было тоже реализовать в виде модуля на плату, благо их много, но пока отложим этот вопрос. В этом случае у нас появляются еще и звонки. Софт поднимает Максим (наш программист), который тот еще энтузиаст и он предложил установить на плате несколько USB, чтобы втыкать стики Wi-Fi/BT (которые мы неоднократно использовали), а также попробовать поднять USB модем 4G, например Yota или что-то подобное (что получится). Так и было решено сделать.

IMX6 имеет на борту всего два USB, при том один из них OTG и может понадобиться для отладки, поэтому выведен на заднюю панель в виде разъема miniUSB. Внутри на плате стоят 3 USB, а) Wi-Fi/BT, б) 4G modem, в) модуль для беспроводной клавиатуры/мышки. На заднюю панель выходит 3 USB для подключения внешних устройств. Второй USB идет на хаб TUSB2077 от TI, который имеет на выходе 7 портов, для которого Максим уже поднял ранее драйвер, так что я использовал именно его. Еще один microUSB на задней панели для вывода консольного уарта чипа для отладки (через CP2102 на основной плате).

Он еще не куплен, так как пока не до него. E-Ink дисплей выбрал трехцветный (серый/черный/красный), один из наиболее распространенных для Arduino. Также очень хочется поиграться с E-Ink. Мне показалось довольно интересным решение не включать экран, а отображать некоторую информацию на маленьком дисплее и изредка ее обновлять.

3.
Рис. Фото дисплея E-Ink.

Так что одна камера заработала (напрямую к разъему модуля), а вот с двумя вопрос. Наш модуль IMX6 имеет разъем (корме MIPI_CSI туда приходят три напряжения питания, I2C, сброс, ШИМ и т.д.) для подключения камеры OV5640-M4320, даже двух. На плате я развел MIPI_CSI в нужные места платы, но еще не проверял. Шлейф такой камеры обычно от 3см до 12см. Что-то мне подсказывает, что данный интерфейс не заработает на 15-20см, либо будет лагать.

4.
Рис. Фото камеры OV5640-M4320.

Эти камеры 5 megapixel со встроенным автофокусом.

Никогда не задумывался, что вспышку нужно довольно четко синхронизировать с кадром (хоть это и логично), данный драйвер умеет это делать по I2C, что скорее всего не подойдет и по внешнему прерыванию. На тыльной стороне устройства планируется сделать вспышку для камеры, для этого я сделал выносную платку (как раз на плате видна дырка от этой платки, я ее развел прямо на основной, чтобы не заказывать отдельно) на шлейфе со светодиодом (MP-3030-1100-56-95) и поставил на основную плату flash драйвер ADP1653. Посмотрим, когда придет время, как получилось.

Сама функция синхронизации времени мне не особа интересна, так как это можно делать по сетям, а вот просыпаться по событию – это нужно. В IMX6 есть встроенный RTC, который показал себя не очень хорошо в плане энергопотребления, либо я чего-то не досмотрел, поэтому решил поставить внешнюю микросхему PCF8523, у которой есть вполне рабочий драйвер под Linux. Поставил это чудо разработки на тумбочку у кровати и ждешь когда сработает будильник, прямо как Nokia 3310 восставала из выключенного состояния.

В итоге с питанием получилась довольно интересная конструкция, я еще не успел снять измерения потреблений в разных режимах, но при аппаратном отключении всей периферии должно получиться довольно неплохо. При подаче внешнего напряжения (в выключенном состоянии девайса) запитаны оказываются: контроллер заряда BQ25895, RTC и супервизор STM6601, который и управляет вторичными питаниями по нажатию кнопки либо софтово (если мы хотим не рубануть питание, а корректно завершить работу ОС, а потом все обесточить). Сейчас подключен аккумулятор 2,3А (вот-вот приедет на 6А), в режиме отображения рабочего стола заряд держит около 30 мин – это конечно очень мало, но посмотрим, что будет с полноценным аккумом. В итоге в «планшете» нет как-таковой «дежурки», STM6601 и PCF8523 питаются напрямую от аккумулятора Li-Ion (3,7В) + к RTC батарейка 2016 или 2032 (холдер универсальный).

Хорошая микросхема с I2C/SPI интерфейсами и интерраптами. Акселерометр LIS331 нужен только для отслеживания положения, чтобы переворачивать дисплей, поэтому поставил то, что уже юзал.

Я понимаю, что в планшетах используется eMMC/NAND, но раз есть интерфейс, почему бы его не использовать? Полноценный SATA разъем был поставлен по типу «мне хочется, а почему бы и нет)». 5” хватает – пусть стоит. Так как в данном варианте места под SSD 2.

Я до сих пор не знаю, что он будет делать с данным интерфейсом, но что не сделаешь ради капризов программиста? На установке NFC очень настоял Максим. Я правда не очень бы хотел, чтобы он попробовал расплатиться в продуктовом магазине, прикладывая сей девайс к беспроводному считывателю.

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

Прежде всего задумывался именно он (а не SGTL5000, который тоже ничего) для отладки прошивок под встроенный DSP (SigmaStudio). Кодек снова ADAU1761, чтобы ощутить все прелести работы со звуком. Поэтому на заднюю стенку выходят два разъема под динамики (через усилитель), на боковую разъем для внутреннего микрофона, а также несколько (оставшихся) входов/выходов на джеки 3,5мм на переднюю панель.

До этого ставил в разработки microHDMI, но мне кажется в этом есть смысл только когда габариты ограничены. Выход HDMI мне показался очень удобным, причем на стандартном разъеме.

SATA, дисплей (его питание и подсветка), звук (кодек и усилитель), акселерометр, GPS и все остальное подключено к питаниям через транзисторные ключи TPS27081 – это сдвоенный транзисторный свитч, который умеет рвать питание до 8В и до 3А. Чтобы все это как-то жило и не потребляло одновременно 100500 ампер я поставил на плату микросхему TCA6424 – это GPIO расширитель, который в данном случае служит свитчем для периферии. Расширитель управляется по I2C, так что можно написать экранную программулю которая умеет все по отдельности выключать. Так что помимо всяких программных спящих режимов можно аппаратно отключать интерфейсы.

Со слов Максима куда проще все запустить под Android, но как показала практика у нас больше проектов под Linux. Теперь почему все-таки Linux. Да, возни будет, скорее всего больше, но как мне кажется, с Xubuntu (именно она сейчас на устройстве) «планшет» приобретает некоторую оригинальность и больше подходит под наши задачи.

5.
Рис. Печатная плата.

6.
Рис. Плата с установленными компонентами.

7.
Рис. Первый запуск.

5. Перспективы. Если это будет нужно.

Прежде всего, конечно, хочется уменьшить габариты по толщине. Достигнуть этого можно только одним способом – это перенос процессора на плату и изменение ее геометрии. Оправданным будет отказ от SATA, правильнее будет поставить eMMC на 64/128Gb (в данный момент стоит 8Gb). Аккумулятор должен стоять не на плате, а рядом с ней, ну в общем все мы знаем расположение элементов внутри планшетов, все уже придумано до нас. Про корпус я уже писал выше, хотелось бы пластину для охлаждения, как реализовать остальные элементы пока особо не думал.

8.
Рис. Аудио входы/выходы. В корпусе.

9.
Рис. Собранное устройство.

10.
Рис. Задняя панель.

6. Выводы. Подведение итогов.

Так как проект разрабатывается (теперь уже софт) в свободное от работы время, еще не все удалось поднять. Максим что-то пилит и «планшет» постепенно оживает, но финал еще не виден.

Я установил VLC плеер и теперь можно посмотреть фильмец на небольшом экране)). По моему мнению устройство получилось вполне жизнеспособным, для задач описанных выше. Запаяв модуль на плату, можно получить общую толщину не более 23мм – это, конечно сурово для нынешней забугорной электроники, но для прототипа вполне приемлемо. Если, по существу, то моя идея реализовалась почти полностью (первая итерация), не считая корпуса.

9.x_1. ЗЫ: ссылка на исходники github.com/boundarydevices/linux-imx6/commits/boundary-imx_4. 0_ga 0.

Всем успехов в своих начинаниях!


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Из песочницы] LVEE — самая неформальная и душевная ИТ-тусовка

О событии Под Минском завершилась ежегодная конференция LVEE 2018 (Linux Vacation/Eastern Europe), организованная белорусской группой пользователей Linux еще в 2005 году. В мероприятии принимали участие более сотни людей из 7 стран, а программу составили 23 доклада, лайтнинги, воркшоп, круглый стол, ...

Губительная ошибка новичков в геймдеве

Перед началом любого дела необходимо составить план, сделать «пробы пера», одним словом — черновик. Именно это помогает определить стартовую точку и понять направление движения. Не хотите тратить тонны усилий впустую? Хотите делать быстрее и качественней остальных? 90% начинающих разработчиков этого ...