
Часто возникает ситуация, когда необходимо подключить устройство с RS232-интерфейсом к планшету или смартфону с операционной системой Android. При этом из интерфейсов у Android-устройства в наличии только беспроводные WiFi, Bluetooth и проводной USB. Конечно, существуют и адаптеры Bluetooth2COM, но добыть их сложно, а цена совсем не радует. В этой ситуации можно и нужно воспользоваться проводными адаптерами USB2COM такими, как CP2102 производства IC Book Labs.
Аппаратные и программные требования
Приступим к практической части. Нам понадобятся:
- Android-based устройство с версией ОС не ниже 3.1, с поддержкой стандарта USB OTG и разблокированным root-доступом;
- если на устройстве установлен разъём MiniUSB или MicroUSB – соответствующий переходник USB OTG на полноразмерный USB Type A Female;
- адаптер CP2102.
Из программного обеспечения нужны:
- SuperSU, или любое другое ПО для работы с правами root в ОС Android;
- BusyBox для установки параметров COM-порта;
- эмулятор терминала для выполнения необходимых операций и собствено работы с оборудованием;
- для удобства работы в терминале желательно вместо штатной клавиатуры Android установить Hackers Keyboard.
Начинаем эксперимент
Эксперимент будем проводить с планшетом Vido Yuandao N70S с прошивкой от arctablet, базирующемся на процессоре Rockchip RK3168, который отличается от указанной модели RK3188 только наличием двух вычислительных ядер вместо четырёх:
На планшете установлен Android 4.2.2 с ядром 3.0.36+, устройство рутировано. Подключаем через переходник адаптер CP2102-L170, запускаем эмулятор терминала, выполняем команды:
$ su
# dmesg | grep usb
Видим следующую картину:
Очевидный факт: планшет обнаружил адаптер USB-to-COM, но что с ним делать не понял, драйверную поддержку не задейстовавл и, как следствие, COM-порт в системе не появился. Это связано с тем, что IC Book CP2102-L170 базируется на контроллере Silicon Labs CP2102, и хотя драйверы для этого чипа включены в ядро Linux, но при компиляции ядра для Android их обычно дезактивируют. На повестке дня стоит задача установить соответствующий драйвер самостоятельно.
Устанавливаем драйвер CP2102
Поскольку исходники операционной системы нам недоступны, будем использовать уже скомпилированный модуль драйвера cp210x.ko. Здесь главная сложность в том, что под каждый CPU и под каждое ядро системы нужен свой драйвер. Впрочем, всегда есть шанс, что заработает драйвер под другой CPU со сходной архитектурой. В нашем случае мы будем устанавливать драйвер, скомпилированный для RK3188. Скопируем наш драйвер в систему, установим права на него, и подгрузим командой insmod:
# cp /mnt/путь_к_драйверу/cp210x.ko /system/lib/modules
# chmod 644 /system/lib/modules/cp210x.ko
# insmod /system/lib/modules/cp210x.ko
Проверим, что изменилось:
# dmesg | grep usb
Ура! Теперь у нас в системе появился COM-порт с именем ttyUSB0 (в вашей системе он может иметь и другое имя).
Назначим ему необходимые права на чтение и запись, проверим текущие установки:
# chmod 666 /dev/ttyUSB0
# busybox stty -F /dev/ttyUSB0
и зададим необходимую скорость (в моём случае – 9600 бод):
# busybox stty -F /dev/ttyUSB0 ispeed 9600
Внимательно следим за сообщениями об ошибках.
После того, как мы убедились, что всё работает, можно прописать автоматическую подгрузку модуля драйвера при старте системы. Для этого сначала находим скрипт /system/bin/preinstall.sh, если его нет, создаём сами. Добавляем в него строки:
#!/system/bin/sh
exec /system/bin/logwrapper busybox run-parts -a start /system/etc/init.d
Создаем папку /system/etc/init.d и назначаем права для неё. Для этого вводим в терминале:
mkdir /system/etc/init.d chmod 755 /system/etc/init.d
Помещаем туда файл “01-cp210x” со следующим содержимым:
#!/system/bin/sh
insmod /system/lib/modules/cp210x.ko
busybox stty -F /dev/ttyUSB0 ispeed 9600
Внимание: созданный файл не должен иметь никакого расширения, даже .sh!
И назначаем ему права:
# chmod 755 /system/etc/init.d/01-cp210x
Всё, теперь ваш COM-порт будет готов к использованию сразу после загрузки Android. Теперь можно задействовать ваше любимое ПО или же подключиться к устройству напрямую, используя входящий в состав busybox терминал microcom:
# microcom -s [скорость порта] ttyUSB0
Резюме
Наш эксперимент с подключением адаптера CP2102 к планшету убедительно продемонстрировал, что поддержка таких устройств в операционной среде Android возможна. Для этого необходимо соблюдение аппаратных и программных требований, изложенных выше. Главное – доступность драйвера устройства (в нашем случае это уже известный cp210x.ko).
Добрых слов заслуживает утилитарная поддержка сообщества на Google Play. Трудно представить такого рода эксперименты без специфического программного обеспечения. Его качество – выше всяких похвал.