Последовательная связь между встроенной системой и ПК с доступными только портами USB.

Я работаю над приложением, в котором у меня есть часть встроенной системы Linux, передающей некоторые данные на ПК с использованием PySerial (модуль Python). Мой вопрос: есть ли альтернатива поиску ПК с разъемом RS232 для установления двусторонней связи между ПК и встроенной системой? Спасибо.

Кроме моста USB-UART?
Есть ли у встроенного устройства Linux устройство или порт USB OTG?
Оба устройства имеют Ethernet? Вы можете запустить сервер DCHP на устройстве Linux. Например, «apt-get install isc-dhcp-server» при использовании Debian.

Ответы (2)

Адаптер USB-Serial сделает то, что вы хотите, он доступен и дешев. Однако они, скорее всего, будут поставляться с разъемом RS232 SUB-D и выходными уровнями напряжения RS232, которые затем потребуют преобразования.

Вы также можете найти кабели USB-Serial со штырьковыми разъемами и удобными уровнями 3,3 В, которые намного проще использовать в вашем приложении.

РЕДАКТИРОВАТЬ

Итак, вы хотите связать два устройства через USB. Поскольку вы говорите, что встроенное устройство использует Linux, оно должно иметь Python. В зависимости от пропускной способности и сложности существует множество решений.

  • Если на вашей встроенной плате есть Ethernet... просто используйте его!
  • Два адаптера USB-Serial вплотную друг к другу (хотя скорость ограничена)
  • « Кабель для передачи файлов с USB на USB », который фактически эмулирует порт Ethernet для каждого порта USB, поэтому оба устройства объединены в сеть.
  • Запрограммируйте встроенную плату, чтобы она работала как USB-устройство, для Linux есть библиотеки для этого, я попытался немного погуглить и нашел, например, это и это .

Я запрограммировал USB-устройство на Cortex-M4, это не высшая математика, но это требует времени. Так что, если вам нужна минимально возможная стоимость, это будет лучше всего, так как все, что вам нужно, это кабель. Если это разовый или личный проект, я бы предпочел другие решения.

Спасибо за ответ, peufeu; Я использовал адаптеры USB-Serial в прошлых проектах, но мне трудно понять, будет ли по какой-то причине работать предлагаемое устройство. Поскольку единственными доступными портами на обоих концах являются порты USB, мне понадобится сочетание кабелей USB-Serial (один выходит из встроенной системы, а другой — к ПК)?
Хорошо, я не понял, что у вас только USB на обоих концах. Смотрите редактирование ;)
Вам нужно будет подключить два адаптера USB-to-RS232 через «нуль-модемный» кабель, чтобы TX одного шел к RX другого. Он также направляет сигналы рукопожатия, например, RTS (запрос на отправку), маршруты на CTS (разрешение на отправку) и т. д. Я могу конкретизировать альтернативный ответ, но я уверен, что в Google много статей.
Также OP необходимо указать требуемую пропускную способность.
Привет, Винс, я хотел знать, не могли бы вы помочь расширить ответ, который вы дали. Вот ссылка на два кабеля, которые я думаю о покупке на основе вашего ответа: amazon.com/StarTech-com-USB-Serial-Adapter-Modem/dp/B008634VJY . Чтобы уточнить, я рассматриваю возможность покупки одного «нуль-модема» и одного Кабель "DB9" для завершения этого проекта. Это выглядит правильно?
Peufeu, требования к пропускной способности довольно низкие, поэтому я не счел их достойными упоминания, поскольку все предлагаемые решения более чем достаточны для их покрытия. В ответ на ваш первый пост у меня нет доступа к порту Ethernet (он используется для связи с другим периферийным устройством). Я рассматриваю возможность использования кабеля для передачи файлов с USB на USB, как вы упоминали ранее, но у меня нет опыта его использования - предположительно, я просто настроил бы драйверы и запустил свой код?
Я тоже никогда не использовал его, поэтому единственный совет, который я могу дать, - убедиться, что обе ОС поддерживают драйверы... linux-usb.org/usbnet

@peufeu находится на правильном пути, используя два адаптера USB-to-Serial. Но не хватает очень важной вещи: между ними вам понадобится «нуль-модемный» адаптер.

Для определенного типа разъема (9-контактного или 25-контактного) существует два типа проводки RS-232: «DTE» (терминальное оборудование для передачи данных), которое обычно представляет собой ПК, и «DCE» (оборудование для передачи данных), которое может быть телефонным модемом или подобным оборудованием. (Если вы молоды, вы скажете, какого черта телефонный модем!)

Таким образом, DTE (ПК) будет передавать данные на контакт 3 и получать данные на контакт 2, в то время как DCE (модем) получает данные на контакт 3 и передает данные на контакт 2.

Проблема в том, что адаптер USB-to-Serial обычно подключается как DTE, поэтому, если вы просто подключите их напрямую, они оба попытаются отправить данные на один и тот же контакт 3 и получить на один и тот же контакт 2.

Таким образом, нуль-модем — это либо кабель, либо встречно-параллельные разъемы, в которых контакты RX и TX поменяны местами, чтобы они передавали и получали данные на правильных контактах.

Кроме того, контакты квитирования меняются местами, чтобы они выглядели правильно.

Итак, суть в том, что DTE на другой стороне выглядит точно так же, как DCE, и два компьютера могут общаться друг с другом, и рукопожатие работает правильно.

Вот изображение из Википедии, которое помогает визуализировать происходящее:

Полная запись здесь: https://en.wikipedia.org/wiki/Null_modem .

Вы можете отрезать разъемы и соединить их самостоятельно. Минимальная настройка будет состоять в том, чтобы игнорировать все линии квитирования и просто соединить 3 провода: соединить контакт GND 5 вместе, а контакты 2 и 3 поменять местами (2 одного подключаются к 3 другого и наоборот). Вот и все.

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

Таким образом, в минимальной настройке ни один из этих проводов не подключен, поэтому вам придется отключить подтверждение связи в вашем ПО и предположить, что другой парень готов принимать всякий раз, когда вы передаете.

Проводка нуль-модема из Википедии