USBTin Lawicel protocol.

Задача : оживить Can адаптер USBTin на android устройстве при помощи терминала, установить диалог по Can шине с некоей железкой, в перспективе плата
будет посредником между android Car-pc и авто.
Исходные данные: головное устройство с рутованным android 8, в роли некоей железки выступает ардуинка эмулирующая некоторые ответы блоков ECU двигателя,
и вариатора Renault Kaptup.

Can адаптер USBTin работает по протоколу Lawicel он же CAN Hackeг, с ним я работал в одноимённой программе в статье про Can_bus Renault Kaptup
протокол не сложный вот его описание.

Command list

Команды строчные и завершаются символом новой строки \r (0xD). Код ошибки в ответе ( 0x7).

Sx\r Установка скорости
x: скорость (0-8)
 S0 = 10 kBaud
 S1 = 20 kBaud
 S2 = 50 kBaud
 S3 = 100 kBaud
 S4 = 125 kBaud
 S5 = 250 kBaud
 S6 = 500 kBaud
 S7 = 800 kBaud
 S8 = 1 MBaud
sxxyyzz\r Установка регистров битрейта MCP2515. Установка нестандартной скорости, которая не поддерживается "Sx" команда.
xx: CNF1 шестнадцатеричное значение (00-FF)
yy: CNF2 шестнадцатеричное значение (00-FF)
zz: CNF3 шестнадцатеричное значение
Gxx\r Считать регистр MCP2515. xx: Адрес регистра, который нужно прочитать hex значение (00-FF).
Wxxyy\r Записать регистр MCP2515. xx: Адрес регистра, который нужно записать hex значение (00-FF).
yy: Данные для записи в регистр. hex значение (00-FF).
V\r Получить версию оборудования.
v\r Получить версию прошивки .
N\r Получить серийный номер. Возвращает всегда 0xffff.
O\r Открыть CAN канал.
l\r Открыть устройство в loop back режиме. (в режиме обратной связи)
L\r Открыть CAN канал в listen-only режиме. (только слушать)
C\r Закрыть CAN канал
tiiildd..\r Передаёт стндартный (11 bit) фрейм.
iii : идентификатор, hex значение (000-7FF)
l : длина (0-8)
dd : данные, hex значение (00-FF)
Tiiiiiiiildd..\r Передать расширенный (29 bit) фрейм.
iiiiiiii : идентификатор, hex значение (0000000-1FFFFFFF)
l : длина (0-8)
dd : данные, hex значение (00-FF)
riiil\r Передаёт стндартный RTR (11 bit) фрейм.
iii: Identifier in hexadecimal format (000-7FF)
l : Data length (0-8)
Riiiiiiiil\r Передать расширенный RTR (29 bit) фрейм.
iiiiiiii : идентификатор, hex значение (0000000-1FFFFFFF)
l : длина (0-8)
F\r Прочитанный флаг состояния / ошибки can контроллера
Возвращает : Fxx\r в виде шестнадцатеричного байта со следующими флагами ошибок:
Bit 0 - не используется
Bit 1 - не используется
Bit 2 - Error warning (Bit EWARN of MCP2515)
Bit 3 - Data overrun (Bit RX1OVR or RX0OVR of MCP2515)
Bit 4 - не используется
Bit 5 - Error-Passive (Bit TXEP or RXEP of MCP2515)
Bit 6 - не используется
Bit 7 - Bus error (Bit TXBO of MCP2515)
Zx\r Установка отметки времени on/off.
x: 0=off, 1=on
mxxxxxxxx\r Установить маску приемного фильтра. SJA1000 format (AM0..AM3). первые 11 бит.
xxxxxxxx : Маска фильтра
Mxxxxxxxx\r Установить код приемного фильтра. SJA1000 format (AC0..AC3). первые 11 бит.
xxxxxxxx: Код приемного фильтра

USBTin является CDC-ACM устройством, при подключении к USB создаётся файл устройства ttyACM, в эмуляторе терминала набираем команду: ls /dev/ttyACM*.
Получаем список:

px5:/ # ls /dev/ttyACM*
/dev/ttyACM0
px5:/ #

Как бы очевидно ttyACM0 и есть наш виртуальный ком порт с ним и будем работать, в эмуляторе терминала открываем два окна, в первом будем принимать
во втором передавать.
В приёмнике настраиваем порт на желаемую скорость, (у меня ардуинка вещает на 115200) позже проверил что работает и без настроки скорости.
Второй командой запускаем терминал на прослушку.

Моторная can шина у нас HS (high speed) в передатчике настраиваем адаптер на скорость 500 kBaud отправив команду "S6", и командой "O" открываем can канал
на адаптере моргающий светодиод начинает светится постоянно.