Главная » Статьи о COM-портах » Аппаратное управления потоком

Аппаратное управления потоком

Сигнал Clear To Send, сокращенно — CTS, поступает от модема к компьютеру, и его активные уровень означает, что компьютер может передавать данные в сторону модема, пассивный уровень означает что модем «просит» компьютер приостановить передачу данных. Таким образом, этот сигнал прежде всего предназначен для приостановки потока данных от компьютера к модему, и для ог­ра­ни­че­ния эффективной (средней) скорости передачи.

В бытность, когда компьютеры и деревья были большими, а скорости передачи маленькими, CTS часто использовался как «вентиль», с помощью которого устройство (модем) может организовать получение данных от компьютера не равномерным потоком, а по одному байту. Особенности аппаратного управления потоком (Hardware Flow Control) или интенсивное использование сигналов CTS и DSRПо этой схеме работали многие простейшие устройства, которые могли об­ра­ба­ты­вать данные только побайтно и не содержали в себе буфера спо­соб­ные накопить не один байт, а целую порцию.

При такой схеме работы, сигнал CTS изменяется дважды для передачи каждого байта данных. Каждое изменение сигнала CTS требует реакции со стороны компьютера (генерирует аппаратное прерывание и обрабатывается драйвером), но при малых скоростях передачи это не было большой проблемой. Но как только скорости передачи данных возросли, и в UART-контроллерах были реализованы FIFO-буфера, организация с помощью CTS такой побайтной схемы обмена стала невозможной. Как только уровень CTS станет пассивным, компьютер перестанет пополнять FIFO передатчика, но все что уже было в FIFO «выстрелит» в сторону устройства (модема).

Чтобы всегда принимать данные без потерь модем (или другое устройство) должен иметь буфер как минимум на два байта больше чем размер FIFO в компьютере. У многих современных UART-контроллеров размер FIFO находиться в диапазоне 64-256 байт, и если производитель модема посчитал, что 32 байта для входящего буфера будет достаточно — у вас будут проблемы. Для решения этой проблемы в драйвере SerialXp предусмотрено ограничение заполнения FIFO передатчика (параметр «LimitTxFifo»), либо можно вообще просто отключить FIFO.

Однако частое изменение CTS конечно будет продолжать тратить процессорное время.Назначение сигналов RS232 интерфейса Поэтому в правильно спроектированных модемах входной буфер имеет размер не менее 1024 байт (обычно от 2048 до 4096), сигнал CTS становиться пассивным, как только этот буфер заполняется на 3/4, и вновь становиться активным при заполнении 1/4.

При «побайтовом» обмене, даже при отключении FIFO, проявляется еще одна проблема. На UART-контроллере с аппаратной ошибкой потери прерывания (см. ниже), любое изменение CTS может быть «забыто» контроллером и не замечено компьютером. При ис­поль­зо­ва­нии стандартного драйвера, это фактически приводит к невозможности взаимодействия с устройством. Драйвер SerialXp имеет механизм восстановления после «потери прерывания», однако реакция драйвера будет не моментальной, а спустя системный «тик» времени, что дополнительно замедлит итоговую скорость передачи.

Реклама на V-Comp:


21.11.2017