Задержка последовательного перевода UART - PullRequest
1 голос
/ 20 июля 2010

В настоящее время у меня есть встроенное устройство, подключенное к ПК через последовательный порт.У меня проблемы с получением данных на ПК.Когда я использую свою карту последовательного порта PCI, я могу получать данные сразу (без задержек).Когда я использую свой разъем USB-To-Serial или материнские платы, встроенные в последовательный порт, мне приходится задерживать чтение данных (40 мс для 32-байтовых пакетов).

Единственное отличие, которое я могу найти между аппаратными средствами, - это UART.Карта PCI использует 16650, а штекер / материнская плата использует стандарт 16550A.PCI-карта настроена на прерывание на 28 байтов, а штекер настроен на прерывание на 14 байтов.

Я подключен со скоростью 56700 бод (если это помогает).

Задержка становится основной.рабочего цикла и действительно увеличивает время передачи.(10 минут передачи против 1 часа передачи).

У кого-нибудь есть объяснение, почему я должен использовать задержку со штекером / материнской платой?Кто-нибудь может предложить возможное решение для минимизации или устранения этой задержки?

Ответы [ 3 ]

3 голосов
/ 20 июля 2010

Linux имеет флаг ASYNC_LOW_LATENCY для драйвера последовательного порта, который может помочь.Какой бы драйвер вы ни использовали, он может иметь что-то похожее.

Однако задержка не должна иметь значения при массовой передаче.Он должен добавить 40 мс в самом начале передачи, вот и все, поэтому водители в первую очередь не беспокоятся об этом.Я бы рекомендовал рефакторинг вашего протокола передачи для использования протокола скользящего окна , с размером окна около 100 пакетов, если вы выполняете 32-байтовые пакеты с такой скоростью передачи и задержкой.Другими словами, вы хотите прекратить передачу, только если вы не получили ACK для пакета, который вы отправили 100 пакетов назад.

0 голосов
/ 21 июля 2010

У меня есть конвертер последовательных в USB.Когда я подключаю его к своему оконечному устройству и создаю петлю, я могу без проблем отправлять / получать со скоростью около 1 Мбит / с.Последовательный порт отправляет двоичные данные, которые могут быть преобразованы в данные ascii.

Используя .Net, я настроил свое программное обеспечение так, чтобы оно вызывало событие для каждого байта (ReceivedBytesThreshold = 1), хотя это не значит, что оно будет.

0 голосов
/ 20 июля 2010

Возможно, вы обнаружите, что разные USB-последовательные преобразователи дают разные результаты. Мы обнаружили, что FTDI хорошо подходят для общения со встроенными устройствами. Некоторые конвертеры, похоже, долго буферизуют данные и / или фрагментируют их.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...