Формат пакета данных при инициализации USB в качестве COM-порта

Кто-нибудь знает, как выглядят данные в пакете данных, когда USB инициализируется как COM-порт?

У меня есть Arduino Mega 2560. Я инициализировал COM-порт со скоростью передачи данных 9600 бод. Я знаю, что существует четыре типа USB-пакетов:

  1. Пакет токенов (обычно используется для идентификации устройства и инициации транзакции.)
  2. Пакет данных (содержит данные, которые должны быть переданы от хоста к клиенту или наоборот).
  3. Пакет подтверждения (Подтверждение безошибочного приема данных.)
  4. Специальные пакеты (связь между узлами и дифференциал скоростей).

Полезная нагрузка в пакете данных форматируется как

ДАННЫЕ1 >> нагрузки >> контрольные суммы CRC16 ; ДАННЫЕ2 >> >> нагрузки >> контрольные суммы CRC16 ; и т. д.

До этого момента мне ясно, что происходит.

Теперь все, что я хочу знать, это

  • Как структурируются данные в разделе полезной нагрузки, когда USB инициализируется как COM-порт?
  • Как скорость передачи данных входит в картину, т. е. Как достигается определенная скорость передачи данных в этом типе связи?
  • Как осуществляется связь с точки зрения последовательности пакетов? Меняется ли последовательность пакетов? (Как маркер>>данные>>подтверждение>>данные>>подтверждение>>...)

Мне действительно нужно срочно это знать, так как я работаю над программой, которая должна подключаться к 3 платам MEga2560 через USB-концентратор. Я хочу исправить свои конструктивные ограничения в зависимости от того, какова максимальная скорость передачи данных, которую я могу достичь для всех плат.

, 👍0

Обсуждение

То, что вы ищете,-это ссылка на схему CDC/ACM (или, где это применимо, на более старые уникальные схемы поставщиков, такие как микросхемы ftdi). Возможно, вам будет интересно ознакомиться либо с соответствующим драйвером ядра linux, либо с некоторым кодом хоста Android USB, либо с прошивкой чипа 8u2. Однако обычно приложение не обращает на это никакого внимания и позволяет операционной системе справиться с этим., @Chris Stratton

Видимая пользователю скорость передачи данных не влияет на USB (которая, вероятно, составляет 12 Мбит/с), это просто параметр конфигурации, передаваемый через последовательный канал 8u2-Mega2560. Что вам действительно нужно следить на USB, так это *задержка* - независимо от "последовательной" скорости передачи данных это может занять больше времени, чем на истинном последовательном канале, чтобы отправить байт или два и получить ответ, так как USB-часть соединения ограничена пакетами, отправленными с фиксированными интервалами, независимо от того, насколько они малы., @Chris Stratton


1 ответ


1

Как только USB-соединение инициализируется как COM-порт, оно больше не использует традиционные USB-пакеты (только внутренние). Он действует как обычный COM-порт. Этот уровень абстракции создается чипом 8u2 на стороне Arduino и драйвером на стороне ПК.

Если вам нужно использовать USB без абстракции COM-порта, вам, вероятно, придется настроить микросхему 8u2 таким образом. Я думаю, что его можно будет настроить, например, в качестве какого-нибудь HID-устройства. Вам также нужно будет позаботиться о стороне ПК, и вам, возможно, придется написать свой собственный драйвер.

Для получения руководства по взлому и настройке чипа 8u2 на Mega см. Следующую ссылку:

http://arduino.cc/en/Hacking/DFUProgramming8U2

,

Можете ли вы предложить мне любую ссылку, где я могу прочитать больше об этом:- "он больше не использует традиционные USB-пакеты" . Это было бы действительно полезно., @Damon

Первое предложение здесь не очень точное. Нет никакой разницы между инициализацией и работой - это все еще USB-устройство на проводе и последовательное устройство для клиентских программ, расположенное ниже драйвера ttyACM (или как там его называет ваша операционная система)., @Chris Stratton