Перейти к содержанию
    

Парсинг UART через 2шт виртуальных COM

Есть два устройства, общающиеся по UART.
Хочу сделать парсинг их протокола.

Для этого, подключаю к компу 2шт USB-UART преобразователя.
Пишу два лога данных, по линиям Rx и Tx.
Использую Device Monitoring Studio
Всё замечательно.

Но!
Мне-то нужно не два лога, а один. Что бы было понятна очередность пакетов, которыми обмениваются устрйоства.
Что бы был лог, в котором друг за другом показано, что отправило одно устройство, и что ему ответило второе.

Вопрос: так можно сделать в Device Monitoring Studio   или ещё где-то ?
Вроде бы очевидное желание, неужели для этого нет инструментов ?

 

Заранее спасибо тому кто поможет !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть вы сделали на ПК "трубу", я правильно понял?

Мне кажется, если уж два устройства общаются между собой через UART, то самое простое - соединить из штатно и повесить на обе линии логический анализатор - хотя бы китайский клон saleae logic.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, engel65536 said:

То есть вы сделали на ПК "трубу", я правильно понял?

Что имеется в виду  под "труба" ?

6 minutes ago, engel65536 said:

если уж два устройства общаются между собой через UART, то самое простое - соединить из штатно 

Они соединены штатно, и общаются штатно.
Общение я слушаю двумя USB-UART преобразователями, используя входы RX

Получаю два лога данных.
Но мне надо не два отдельных лога, а один, что бы видеть что одно устройство послало и что другое следом ответило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 минуты назад, MiklPolikov сказал:

Мне-то нужно не два лога, а один. Что бы было понятна очередность пакетов, которыми обмениваются устрйоства.
Что бы был лог, в котором друг за другом показано, что отправило одно устройство, и что ему ответило второе.

Взять какую-нибудь плату вашей разработки, где есть два компорта(у меня была плата с одним, но второй я подпаял на проводочках), подключить оба устройства к этой плате, а внутри программно завернуть траффик куда надо.

4 минуты назад, MiklPolikov сказал:

Общение я слушаю двумя USB-UART преобразователями, используя входы RX

соединить выходы по ИЛИ через диоды

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, MiklPolikov said:

Получаю два лога данных.

Так соедините их в один. Время есть в каждом. По нему и объединяйте.

Куда уж проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если надо оперативно что-то посмотреть глазами, то wireshark умеет в том числе смотреть и обмен по USB. Если эти два переходника подключены к одному USB-контроллеру, то обмен с обоими попадет в один поток. Наверное его можно записать и обработать какими-то другими утилитами, этого я не знаю - не было необходимости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, HardEgor said:

Взять какую-нибудь плату вашей разработки, где есть два компорта(у меня была плата с одним, но второй я подпаял на проводочках), подключить оба устройства к этой плате, а внутри программно завернуть траффик куда надо.

Аппаратно уже сделал.
И в Device Monitoring Studio получил один лог.

Но ! 
В этом логе все байты идут друг за другом, не понятно, что послало 1е устройство, что второе.

Спрашиваю, нет ли средства, что байты от 1го и 2ого устройства окрасить в разный цвет в одном логе ?
Поэтому и подключал изначально через 2шт USB-UART , думал что найду такую функцию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, MiklPolikov сказал:

В этом логе все байты идут друг за другом, не понятно, что послало 1е устройство, что второе.

если это ваша разработка , то присвоить адреса устройствам

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

почти любой терминал умеет скидывать в дамп файл с вместе метками времени,

termite например, но метки времени там либо по строкам, либо с некой дискретностью проверяется есть ли что в буфере, т.е. не на каждый байт.

да и usb-uart преобразователи всё равно буферизируют и точнее нескольких милисекунд не разобрать кто когда что послал.

 

возможно проще будет написать что-нибудь вроде

while(1){
  if (portA.getRxBuffNum() > 0) printf("A: %d\t%02X\n", QueryPerformanceCounter(), portA.read(1));
  if (portB.getRxBuffNum() > 0) printf("B: %d\t%02X\n", QueryPerformanceCounter(), portB.read(1));
}

 

или вот ещё какая-то терминалка с timestamp,

?action=dlattach;attach=1435798;image

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да и самому можно написать логгер такой минут за 30.
Просто надо заставить себя и не лениться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не монитор тебе нужен, а сниффер последовательного порта.

Давненько это было... Если у тебя UART, то есть сигналы TX и RX. На каждый ставишь любой девайс (например, EIA232-USB), имеющий RX и создающий на компе два СОМ-порта. Дальше пишешь простейшую программу, которая принимает сначала по одному СОМ-порту посылку и отображает её в терминале, любым приятным тебе способом указывая с какого порта эта посылка, а потом по второму порту.

Как правило, по UART девайсы обмениваются по принципу ведущий-ведомый, запрос-ответ, более того, чаще всего известно, кто спрашивает, а кто отвечает. Если одно из устройств ПК, то всё проще. Есть проги, зеркалирующие СОМ-порты в компе и показывающие в окошке что и откуда-куда идёт. Была контора, называлась, вроде на "Э", у которой было полно подобных прог, правда, за деньги, но есть ведь Рутрэкер...

Анализ COM-порта

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу найти названий тех коробочек и программ, которыми пользовался 25 - 30 лет назад. )) Но смысл такой, поясню по воспоминаниям анализатора протокола SINEC L1 для MS-DOS. Я бы сделал так. По экрану бегут 2 строки символов, параллельно. Верхняя - одно устройство (У№1), нижняя - второе (У№2). Если никто ничего не посылает, то строки замирают на месте. Послал байт У№1. он отобразился в верхней строке, а в нижней - ничего. Если оба У№1 и У№2 посылают байты, то они отображаются в соответствующих строках. Плюсы такого "монитора" очевидны - виден "нахлёст", т.е. про софтварном Xon-Xoff, когда У№1 шлёт посылку, а У№2 шлёт код DC3, чтоб её затормозить, видно, сколько байт "хвоста" следуют от У№1, пока он не остановится.

Нужен промежуточный микроконтроллер с 2-мя последовательными портами (входами) и 2-мя буферами. Заполнились 2 буфера - выдать. Порт выдачи, понятное дело, должен иметь скорость как минимум в 2 раза выше наблюдаемых (какой-нибудь USB-UART на 500кбит).

Изменено пользователем vvppvv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 minutes ago, vvppvv said:

Нужен промежуточный микроконтроллер с 2-мя последовательными портами (входами) и 2-мя буферами

В этом качестве успешно выступает ПК.

vvppvv, мы с тобой делали одинаково, только в "железе" по разному реализовывали. И да, я так же по 2 строки попарно выдавал на экран.

Последний раз подобным образом разбирали протокол обмена между ПК и ПЛК от Мицубиси, но там я отзеркалировал через виртуальный СОМ-порт между средой программирования и ПЛК, чтобы видеть Тх компьютера, и подключил его на одну консоль. На вторую консоль выводил сигнал с линии Тх ПЛК. На большом мониторе поставил окна двух терминалов рядом и наблюдал запрос от ПК на одной консоли, а на второй ответ. Протокол текстовый, так что проблем не было. Можно взять терминал, выводящий вместо символов байты в hex-виде. Кстати, ТС тоже можно взять 2 терминала с hex-отображением и поставить их окна рядом.

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 часов назад, MiklPolikov сказал:

Есть два устройства, общающиеся по UART.
Хочу сделать парсинг их протокола.
Для этого, подключаю к компу 2шт USB-UART преобразователя.
Пишу два лога данных, по линиям Rx и Tx.

... Спрашиваю, нет ли средства, что байты от 1го и 2ого устройства окрасить в разный цвет в одном логе ?

Подключите по-другому ваши преобразователи:
На вход первого преобразователя заведите только TX1 первого устройства.
На вход второго преобразователя заведите объединенный сигнал "TX1 или TX2".

Далее на ПК напишите программу, которая принимает трафик от обоих портов одновременно.
Методом сравнения выделяет в общем, объединенном потоке трафик первого устройства и подсвечивает его другим цветом при выводе на экран.

P.S. Естественно, предполагаем, что протокол организован по принципу "запрос-ответ". То есть, "встречная" передача исключается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забудьте все, что вам тут понаписали. Китайский 8-канальный логический анализатор, стоящий копейки на али и лежащий (должен лежать, по крайней мере) в тумбочке у каждого разработчика позволит наблюдать и пересылаемые байты и временнЫе интервалы между ними. И, естественно, сохранять в файл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...