Что такое UART? Как они воздействуют на производительность?
UART (Universal Asynchronous Receiver Transmitter -- Универсальный Асинхронный Приемопередатчик) - это микросхема на вашей мультикарте или материнской плате. Функции UART может выполнять и другая микросхема, которая занимается кроме этого другими вещами.
Назначение UART состоит в том, чтобы преобразовать данные в биты, посылать биты по последовательной линии и затем восстанавливать данные на другом конце линии. UART имеет дело с данными, разбитыми побайтно, что удобно для представления символов ASCII.
Скажем, у вас есть терминал, подключенный к PC. Когда вы печатаете символ, терминал передает этот символ своему передатчику (тоже UART). Передатчик посылает этот байт наружу по последовательной линии побитно с определенной скоростью. UART на PC конце линии получает все эти биты и восстанавливает из них байт и помещает его в буфер.
Есть два различных типа UART. Вы вероятно слышали о dumb UART - 8250 и 16450, и FIFO UART - 16550A. Чтобы понять их различия, сначала давайте исследуем, что случается когда UART послал или получил байт.
UART непосредственно не может делать что-либо с данными, он только посылает и получает их. Для первоначальных UART, ЦП получает запрос на прерывание от последовательного устройства каждый раз, когда байт был послан или получен.
Затем ЦП перемещает полученный байт из буфера UART в область оперативной памяти или передает UART другой байт для передачи. В UART 8250 и 16450 буфера однобайтные. Это означает, что за одно прерывание ЦП посылается или принимается только 1 байт. Для низких скоростей это нормально. Но при высоких скоростях передачи, ЦП настолько загружается работой с UART, что хуже обслуживает другие задачи. В некоторых случаях, ЦП не успевает обработать прерывание вовремя, и байт затирается вновь пришедшим, потому что байты поступают в буфер UART слишком быстро.
В этой ситуации полезен UART 16550A. Эти чипы приходят с 16-байтным FIFO. Это означает, что такая микросхема может получать или передавать до 14 байтов прежде, чем она должна будет сформировать запрос на прерывание ЦП. В свою очередь ЦП может передать сразу 14 байтов за один раз. Хотя порог прерывания не всегда устанавливается в 14, все равно имеется значительное преимущество перед другими UART, которые имеют только однобайтный буфер.
ЦП получает меньшее количество прерываний, и имет больше времени для выполнения других вещей.
Данные не теряются, и все счастливы. (Существует также 16550 UART, но он обрабатывается как 16450, так как имеет дефект.)
В общем, UART 8250 и 16450 должны прекрасно подходить для скоростей до 38400 бит\сек. На скоростях больее 38400 бит\сек, вы могли бы заметить потерю данных. Другие операционные системы для PC (definition used loosely here), вроде DOS, не многозадачные, так что они могли бы лучше работать с 8250 или 16450s. Именно поэтому некоторые люди не замечают потерь данных, пока не начинают работать в Linux.
В не-UART и интеллектуальных многопортовых платах стоят DSP чипы, которые имеют дополнительные буферы и более развитое управление, и таким образом ЦП менее загружается.
Например, платы Cyclades Cyclom и Stallion EasyIO используют Cirrus Logic CD1400 RISC UART, а многие платы используют ЦП 80186 или даже специальные RISC ЦП, для обработки последовательного ввода-вывода.
Имейте в виду, что dumb UART не плохи, просто они не очень хороши для высоких скоростей. У вас не должно возникать проблем с подключением терминалов или мышей к этим UART. Но, для высокоскоростных модемов 16550A - определенно обязателен.
На большинстве новых PC (486's, Pentiums или выше) установлены 16550A. Если ваша техника действительно старая, то вы можете нарастить ее вычислительные возможности купив микросхем 16550A и заменив ваши 16450 UART. Если используется другой тип микросхемы, то вам не повезло. Если UART вставлется в "кроватку", то обновление упрощается (если вы можете найти замену). Новые и старые микросхемы совместимы по значениям выводов. Возможно, более правильно купить последовательную плату через Интернет (некоторые розничные торговцы их продают).