Использование в Android адаптера USB2COM на базе CP2102

03 Ноя 2014

Использование в Android адаптера USB2COM на базе CP2102

Часто возникает ситуация, когда необходимо подключить устройство с 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.

USB-to-COM адаптер на чипе Silicon Labs CP2102, производства IC Book

Из программного обеспечения нужны:

  • SuperSU, или любое другое ПО для работы с правами root в ОС Android;
  • BusyBox для установки параметров COM-порта;
  • эмулятор терминала для выполнения необходимых операций и собствено работы с оборудованием;
  • для удобства работы в терминале желательно вместо штатной клавиатуры Android установить Hackers Keyboard.

Начинаем эксперимент

Эксперимент будем проводить с планшетом Vido Yuandao N70S с прошивкой от arctablet, базирующемся на про­цес­со­ре Rockchip RK3168, который отличается от указанной модели RK3188 только наличием двух вычислительных ядер вместо четырёх:

Информация об устройстве Vido Yuandao N70S

На планшете установлен Android 4.2.2 с ядром 3.0.36+, устройство рутировано. Подключаем через переходник адаптер CP2102-L170, запускаем эмулятор терминала, выполняем команды:

$ su
# dmesg | grep usb

Видим следующую картину:

В Android-устройстве обнаружен адаптер CP2102 USB-to-UART Bridge

Очевидный факт: планшет обнаружил адаптер 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

Ура! Теперь у нас в системе появился COM-порт с именем ttyUSB0 (в вашей системе он может иметь и другое имя).

Назначим ему необходимые права на чтение и запись, проверим текущие установки:

# chmod 666 /dev/ttyUSB0
# busybox stty -F /dev/ttyUSB0

и зададим необходимую скорость (в моём случае – 9600 бод):

# busybox stty -F /dev/ttyUSB0 ispeed 9600

Устанавливаем значение Baud Rate

Внимательно следим за сообщениями об ошибках.

После того, как мы убедились, что всё работает, можно прописать автоматическую подгрузку модуля драйвера при старте системы. Для этого сначала находим скрипт /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!

Внешний вид и содержимое корпуса CP2102 — адаптера последовательного порта для USb-шины

И назначаем ему права:

# chmod 755 /system/etc/init.d/01-cp210x

Всё, теперь ваш COM-порт будет готов к использованию сразу после загрузки Android. Теперь можно за­дейст­во­вать ваше любимое ПО или же подключиться к устройству напрямую, используя входящий в состав busybox тер­ми­нал microcom:

# microcom -s [скорость порта] ttyUSB0

Резюме

Наш эксперимент с подключением адаптера CP2102 к планшету убедительно продемонстрировал, что поддержка таких устройств в операционной среде Android возможна. Для этого необходимо соблюдение аппаратных и про­грам­мных требований, изложенных выше. Главное – доступность драйвера устройства (в нашем случае это уже известный cp210x.ko).

Добрых слов заслуживает утилитарная поддержка сообщества на Google Play. Трудно представить такого рода экс­перименты без специфического программного обеспечения. Его качество – выше всяких похвал.

Теги: