Jump to content

    

ttyACM на Линуксе

  С новым годом многоуважаемое сообщество. Давненько не писал на электроникс но вот пришло время, нужен совет.
Давеча появилась необходимость передавать данные на ПК, со скоростью примерно мегабит. Физический последовательный порт справляется с такой скоростью довольно плохо, поэтому решено было остановится на ЮСБ.

 

  Подключаю стмку к Линуксу по USB с эмуляцией виртуального последовательного порта (communication device class). Подключение прямое, никаких хабов, переходников и т.д. Кубом сгенерил проект с полноскоростным юсб 2.0 12МБит. Пк видит подключение как /dev/ttyACM0. Стмкой передаю тестовую последовательность в порт по одному байту, каждая посылка с периодичностью 11мкс. На Линуксе открываю Putty порт с параметрами 921600, 1 стоп бит, без контроля четности и логирую все это в файл.

  В логе наблюдаю такую картину ...0x01 0x02 0x03 0x05 0x06 0x08 0x0B 0x0C 0x0E 0x16 0x17... видно, что некоторые байты были пропущены. На виндовс машинах так же провалы в последовательности, и они больше чем в Линуксе.

 

  При увеличении периода до 87 мкс что примерно соответствует битрейту 115200, последовательность передается без ошибок.

Собственно вопрос - действительно ли лимит драйвера 115200 ? Может можно поправить где то конфигурационные файлы ? Вообще приветствуются все идеи.
Задавал тот же вопрос на юникс стакиксченчж, но там пока глухо. То ли праздники, то ли никто не сталкивался с подобным.

Edited by Космонавт

Share this post


Link to post
Share on other sites
4 minutes ago, Космонавт said:

Собственно вопрос - действительно ли лимит драйвера 115200 ?

Со стороны ПК - нет (под Линуксом, во всяком случае). А вот со стороны куба можно ждать чего угодно.

Share this post


Link to post
Share on other sites
38 минут назад, Космонавт сказал:

В логе наблюдаю такую картину ...

Насколько я помню, putty пишет в лог не все байты. Байты с кодом 0x00 она у меня точно отбрасывала. Выставленная в настройках терминальной программы скорость влияет только на число, передаваемое в команде SET_LINE_CODING и на скорость обмена по USB никак не влияет.

Share this post


Link to post
Share on other sites
15 hours ago, Сергей Борщ said:

putty пишет в лог не все байты

Вот фрагмент моего лога. Как видно нули там есть. Да и было бы странно, что бы на 115200 логировалось все, а на 921600 - не все. Пока копаю в сторону куба.

putty.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this