Доброго времени суток, друзья!
В этой статье не будет Arduino, Raspberry, Olimex, переноса внутренностей планшета в свой «кастомный» корпус из картона и пластыря и т.д. Только суровая разработка, только хардкор…
Не знаю, не слишком ли громкое название я выбрал для статьи, но вроде как все честно: разработка Российская, форм-фактор планшета, хоть и похож на кирпич «улыбчивый смайл».
Для своих читателей я решил набросать план статьи, чтобы можно было легко ориентироваться в ней и пропустить ненужные пункты, но если уж Вы собрались написать комментарий, то просьба прочитать все, «чтобы не было мучительно больно за мучительно прожитые годы … (с)».
- Введение. Идея.
- Ответы на вопросы.
- Что хотелось получить на выходе.
- Описание железа.
- Перспективы. Если это будет нужно.
- Выводы. Подведение итогов.
1. Введение. Идея.
Как я уже писал ранее в своих статьях, меня очень привлекает тема вывода изображения на матрицу, и все что с этим связано. Сейчас уже никого не удивишь скалерами для матриц, в виде небольших плат за $10-$15, из которых можно легко сделать/отремонтировать монитор или ТВ, но с ними я уже наигрался и хочется чего-то нового.
Идея сделать нечто похожее на планшет родилась уже давно, и я ее постоянно вынашивал, обдумывая как бы реализовать меньшими усилиями и затратами с бОльшим профитом. Конечно, сам планшет мне не нужен, его можно купить за умеренные деньги при необходимости или в крайнем случае сделать корпус из фанеры для Raspberry, но зачем мне Raspberry (а к ней можно даже корпус готовый прикупить)? Интересна была именно реализация на своем железе с полной разработкой, но на это нужны деньги, а прежде всего время, которого вечно не хватает (или в Ваших сутках больше 24 часов?).
Толчком к реализации послужили сразу два события, первое – это неожиданно появились несколько ненужных матриц от 7 до 10 дюймов, которые ой как меня привлекли. Некоторые из них RGB, но также среди них оказалась LVDS матрица и встроенным драйвером подсветки и USB емкостным тачем. Второе – это появилась слабая необходимость в компактном референсе для отладки софта под IMX6, в котором было бы почти все и еще немного. Конечно, было проще выкинуть матрицы, и взять с полки готовый референс, но тут не все так просто, мы используем в своих разработках некий набор периферии (кодеки, физики, контроллеры заряда и т.д.), которые необходимо отлаживать под новый функционал, а также хотелось испытать что-то новое (да и матрицы очень привлекательные). Стоит ли на это потратить месяц своих свободных от работы вечеров, спросите Вы? Конечно, стоит!
С этими мыслями и коробкой матриц я начал разработку. Я знал, что времени могу выделят совсем немного и в тоже время было не ясно дойдет ли до второй итерации.
Рис.1. Фото «планшета» со стороны печатной платы.
2. Ответы на вопросы
Чтобы не было ненужных вопросов, я постараюсь часть из них предвидеть и сразу на них отвечу.
2.1 Не проще ли купить себе планшет?
— Проще, но менее интересно.
2.2 Сколько он стоит и сколько будет стоить при партии?
— Стоит он дорого, но наша компания взяла все затраты на себя за реализацию моей маленькой прихоти. Никакой партии не планируется, сделано, так сказать, для себя.
2.3 Где корпус? Почему не напечатали его на принтере, не выпилили из фанеры, не слепили из пластилина (и прочее).
— Сейчас я собрал все воедино, и, в принципе, можно что-то придумать по поводу корпуса, но пока нет ни времени, ни желания. Если все-таки дойдет до второй итерации платы, когда можно будет уменьшить толщину, то в планах сделать корпус с тонким полированным металлическом листом снизу для отвода тепла.
2.4 Почему не взяли меньше/больше/тоньше дисплей?
— Дисплей достался бесплатно, а дареному коню как известно…
2.5 Для чего Вы поставили такой кодек/питатель/аккумулятор/физику и т.д.
— Набор микросхем ограничен нашим складом и хотелось как можно меньше закупать компонентов, поэтому старался использовать то, что есть.
Этот список можно продолжать почти бесконечно и Вы можете продлить его в комментариях, но я на этом закончу.
3. Что хотелось получить на выходе.
ТЗ было только в голове, а расширялось оно по мере добавления новых листов схемы в альтиуме. Конечно, хотелось выжать из процессора все что можно. На первом этапе, а возможно и на последнем, было решено делать все на нашем модуле, так как его плата 8 слоев, а для материнки мне понадобиться не более 4-х.
Интерфейсы:
3.1 LVDS – один канал для 10-дюймовой матрицы + емкостной тач.
3.2 Ethernet – 1000/100/10 (чтобы было).
3.3 Аудио – кодек с несколькими каналами на вход и выход + встроенные динамики и микрофон.
3.4 HDMI – стандартный разъем для подключения монитора.
3.5 SATA – подключение внешнего накопителя SSD.
3.6 Камера – одна, а лучше две + вспышка.
3.7 E-Ink – маленький дисплей для отображения уведомлений, времени, заряда аккумулятора, сетей и т.д.
3.8 GPS – любой модуль для отслеживания местоположения.
3.9 CAN – дифференциальный, для подключения внешних устройств.
3.10 SD карта – отладка и загрузка ПО. Хранение данных.
3.11 WiFi/BT/4G – на USB внутри корпуса (ниже поясню почему так).
3.12 USB – не менее 5шт + OTG + консоль.
3.13 Акселерометр – для переворота экрана.
3.14 RTC – отдельная микросхема для хранения времени, когда устройство полностью обесточено.
3.15 NFC – считыватель, чтобы поиграться.
3.16 Кнопки управления – включение/выключение/громкость/ресет.
3.17 Аккумулятор – 3,7В, 4-6А.
3.18 Питание 5-18В.
3.19 ОС Linux.
Вот вроде и все, что хотелось. Ниже я дам пояснения по некоторым противоречивым пунктам почему именно так.
4. Описание железа
Справедливо сказать, почему все-таки на модуле, а не сразу на 8-слойной плате. Правильнее переносить все на одну плату только после отладки всей периферии, если это вообще будет нужно. Одна итерация платы (4-6шт) на восьми слоях (60ммХ40мм) стоит порядка 50тр + компоненты – это довольно прилично, так что правильнее на макете. Проц на модуле 4-х ядерный, каждое из которых по 1ГГц.
Рис.2. Печать элементов корпуса
Первое по поводу чего я много думал – это беспроводные интерфейсы. Их должно быть несколько, и они должны быть на плате. С GPS все решилось само собой, я уже неоднократно использовал модуль SIM33 со встроенной антенной, он отлично работает, хоть и не дешевый, на выходе у него UART и я уже рисовал для него футпринт).
Wi-Fi/BT можно было тоже реализовать в виде модуля на плату, благо их много, но пока отложим этот вопрос. 4G модемы бывают разных форм-факторов и модулями на разъеме и на плату под пайку и USB. Софт поднимает Максим (наш программист), который тот еще энтузиаст и он предложил установить на плате несколько USB, чтобы втыкать стики Wi-Fi/BT (которые мы неоднократно использовали), а также попробовать поднять USB модем 4G, например Yota или что-то подобное (что получится). В этом случае у нас появляются еще и звонки. Так и было решено сделать.
Внутри на плате стоят 3 USB, а) Wi-Fi/BT, б) 4G modem, в) модуль для беспроводной клавиатуры/мышки. IMX6 имеет на борту всего два USB, при том один из них OTG и может понадобиться для отладки, поэтому выведен на заднюю панель в виде разъема miniUSB. Второй USB идет на хаб TUSB2077 от TI, который имеет на выходе 7 портов, для которого Максим уже поднял ранее драйвер, так что я использовал именно его. На заднюю панель выходит 3 USB для подключения внешних устройств. Еще один microUSB на задней панели для вывода консольного уарта чипа для отладки (через CP2102 на основной плате).
E-Ink дисплей выбрал трехцветный (серый/черный/красный), один из наиболее распространенных для Arduino. Он еще не куплен, так как пока не до него. Мне показалось довольно интересным решение не включать экран, а отображать некоторую информацию на маленьком дисплее и изредка ее обновлять. Также очень хочется поиграться с E-Ink.
Рис.3. Фото дисплея E-Ink.
Наш модуль IMX6 имеет разъем (корме MIPI_CSI туда приходят три напряжения питания, I2C, сброс, ШИМ и т.д.) для подключения камеры OV5640-M4320, даже двух. Так что одна камера заработала (напрямую к разъему модуля), а вот с двумя вопрос. Шлейф такой камеры обычно от 3см до 12см. На плате я развел MIPI_CSI в нужные места платы, но еще не проверял. Что-то мне подсказывает, что данный интерфейс не заработает на 15-20см, либо будет лагать.
Рис.4. Фото камеры OV5640-M4320.
Эти камеры 5 megapixel со встроенным автофокусом.
На тыльной стороне устройства планируется сделать вспышку для камеры, для этого я сделал выносную платку (как раз на плате видна дырка от этой платки, я ее развел прямо на основной, чтобы не заказывать отдельно) на шлейфе со светодиодом (MP-3030-1100-56-95) и поставил на основную плату flash драйвер ADP1653. Никогда не задумывался, что вспышку нужно довольно четко синхронизировать с кадром (хоть это и логично), данный драйвер умеет это делать по I2C, что скорее всего не подойдет и по внешнему прерыванию. Посмотрим, когда придет время, как получилось.
В IMX6 есть встроенный RTC, который показал себя не очень хорошо в плане энергопотребления, либо я чего-то не досмотрел, поэтому решил поставить внешнюю микросхему PCF8523, у которой есть вполне рабочий драйвер под Linux. Сама функция синхронизации времени мне не особа интересна, так как это можно делать по сетям, а вот просыпаться по событию – это нужно. Поставил это чудо разработки на тумбочку у кровати и ждешь когда сработает будильник, прямо как Nokia 3310 восставала из выключенного состояния.
При подаче внешнего напряжения (в выключенном состоянии девайса) запитаны оказываются: контроллер заряда BQ25895, RTC и супервизор STM6601, который и управляет вторичными питаниями по нажатию кнопки либо софтово (если мы хотим не рубануть питание, а корректно завершить работу ОС, а потом все обесточить). В итоге с питанием получилась довольно интересная конструкция, я еще не успел снять измерения потреблений в разных режимах, но при аппаратном отключении всей периферии должно получиться довольно неплохо. В итоге в «планшете» нет как-таковой «дежурки», STM6601 и PCF8523 питаются напрямую от аккумулятора Li-Ion (3,7В) + к RTC батарейка 2016 или 2032 (холдер универсальный). Сейчас подключен аккумулятор 2,3А (вот-вот приедет на 6А), в режиме отображения рабочего стола заряд держит около 30 мин – это конечно очень мало, но посмотрим, что будет с полноценным аккумом.
Акселерометр LIS331 нужен только для отслеживания положения, чтобы переворачивать дисплей, поэтому поставил то, что уже юзал. Хорошая микросхема с I2C/SPI интерфейсами и интерраптами.
Полноценный SATA разъем был поставлен по типу «мне хочется, а почему бы и нет)». Я понимаю, что в планшетах используется eMMC/NAND, но раз есть интерфейс, почему бы его не использовать? Так как в данном варианте места под SSD 2.5” хватает – пусть стоит.
На установке NFC очень настоял Максим. Я до сих пор не знаю, что он будет делать с данным интерфейсом, но что не сделаешь ради капризов программиста? Я правда не очень бы хотел, чтобы он попробовал расплатиться в продуктовом магазине, прикладывая сей девайс к беспроводному считывателю.
CAN бывает иногда нужен в наших разработках, так что поставил физику TJA1040T, драйвер для нее уже есть, работать мы с ним умеем, даже подключали к своим авто и смотрели таблицы. Занятная штука.
Кодек снова ADAU1761, чтобы ощутить все прелести работы со звуком. Прежде всего задумывался именно он (а не SGTL5000, который тоже ничего) для отладки прошивок под встроенный DSP (SigmaStudio). Поэтому на заднюю стенку выходят два разъема под динамики (через усилитель), на боковую разъем для внутреннего микрофона, а также несколько (оставшихся) входов/выходов на джеки 3,5мм на переднюю панель.
Выход HDMI мне показался очень удобным, причем на стандартном разъеме. До этого ставил в разработки microHDMI, но мне кажется в этом есть смысл только когда габариты ограничены.
Чтобы все это как-то жило и не потребляло одновременно 100500 ампер я поставил на плату микросхему TCA6424 – это GPIO расширитель, который в данном случае служит свитчем для периферии. SATA, дисплей (его питание и подсветка), звук (кодек и усилитель), акселерометр, GPS и все остальное подключено к питаниям через транзисторные ключи TPS27081 – это сдвоенный транзисторный свитч, который умеет рвать питание до 8В и до 3А. Так что помимо всяких программных спящих режимов можно аппаратно отключать интерфейсы. Расширитель управляется по I2C, так что можно написать экранную программулю которая умеет все по отдельности выключать.
Теперь почему все-таки Linux. Со слов Максима куда проще все запустить под Android, но как показала практика у нас больше проектов под Linux. Да, возни будет, скорее всего больше, но как мне кажется, с Xubuntu (именно она сейчас на устройстве) «планшет» приобретает некоторую оригинальность и больше подходит под наши задачи.
Рис.5. Печатная плата.
Рис.6. Плата с установленными компонентами.
Рис.7. Первый запуск.
5. Перспективы. Если это будет нужно.
Прежде всего, конечно, хочется уменьшить габариты по толщине. Достигнуть этого можно только одним способом – это перенос процессора на плату и изменение ее геометрии. Оправданным будет отказ от SATA, правильнее будет поставить eMMC на 64/128Gb (в данный момент стоит 8Gb). Аккумулятор должен стоять не на плате, а рядом с ней, ну в общем все мы знаем расположение элементов внутри планшетов, все уже придумано до нас. Про корпус я уже писал выше, хотелось бы пластину для охлаждения, как реализовать остальные элементы пока особо не думал.
Рис.8. В корпусе. Аудио входы/выходы.
Рис.9. Собранное устройство.
Рис.10. Задняя панель.
6. Выводы. Подведение итогов.
Так как проект разрабатывается (теперь уже софт) в свободное от работы время, еще не все удалось поднять. Максим что-то пилит и «планшет» постепенно оживает, но финал еще не виден.
По моему мнению устройство получилось вполне жизнеспособным, для задач описанных выше. Я установил VLC плеер и теперь можно посмотреть фильмец на небольшом экране)). Если, по существу, то моя идея реализовалась почти полностью (первая итерация), не считая корпуса. Запаяв модуль на плату, можно получить общую толщину не более 23мм – это, конечно сурово для нынешней забугорной электроники, но для прототипа вполне приемлемо.
Всем успехов в своих начинаниях!
Автор: the_bat