Технические характеристики полезных портов ПК

Hacker

Professional
Messages
1,048
Reputation
9
Reaction score
724
Points
113
Эта страница содержит некоторую информацию о наиболее полезных портах ПК для общего взаимодействия. К настоящему времени вы можете найти:
  • Серийный порт.
  • Параллельный порт.
  • Порт джойстика.
  • Чтобы посмотреть на три порта с точки зрения Linux, см. Мини-HOWTO по программированию портов ввода-вывода Linux.

Серийный порт

Вступление
Последовательный порт, безусловно, является наиболее часто используемым портом, и не только на ПК. Он был разработан для связи на большие расстояния, поэтому было важно использовать как можно меньше кабелей. Чтобы установить успешное соединение с использованием последовательных портов, необходимы только 2 кабеля для одностороннего потока данных (или для полудуплексной связи) и 3 кабеля для полнодуплексной связи (программное подтверждение связи). Однако обычным явлением является использование других линий, особенно для соединений на короткие расстояния (аппаратное подтверждение связи). Максимальная длина кабеля варьируется от 80 до 900 метров для скорости передачи данных от 19 200 до 110 бод, хотя это зависит от его качества.

Физический слой
Связь физически контролируется интегральной схемой, называемой универсальным асинхронным приемником-передатчиком (UART). Типичными UART являются 8250, 8251, 16450 и 16550. Сегодня большинство серийных портов, которые вы можете найти (включая ПК и их устройства), соответствуют рекомендованному стандарту 232, редакция C (RS-232-C). Он использует обратную логику, поэтому логический 0 является выходом между +5 и +25 В или входом между +3 и +25 Вольт. Логическая 1 - это выход от -5 до -25 В или вход от -3 до -25 Вольт. По умолчанию последовательный порт устанавливает отрицательный уровень во всех своих выходных линиях. Входной импеданс можно приблизительно определить как сопротивление около 500 Ом, подключенное параллельно конденсатору емкостью около 30 нФ. Между двумя реальными линиями, совместимыми с RS-232-C, можно оставить разомкнутые или замкнутые накоротко с любой другой линией без риска повреждения.

Последовательные порты бывают двух видов: оконечное оборудование данных (DTE) и оборудование передачи данных (DCE). Первый тип предназначен для использования на обоих концах линии связи, поэтому типичными DTE являются компьютеры, терминалы и принтеры. DCE предназначены для размещения в середине цепочки связи, поэтому модем является классическим DCE. В последнее время стало обычным использование штекерных разъемов для DTE и гнездовых разъемов для DCE, однако пока нет реального консенсуса по этому поводу, поэтому единственный способ узнать, с каким портом вы имеете дело, - это прочитать руководство к устройству или экспериментирую. DTE передает в линии, которую DCE слушает, и наоборот. Вот распиновка DTE RS-232-C (порт ПК), распайка DCE дополняет DTE.

DB-25P (папа) DB-9P (папа)

1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5
_________________________________________ _________________
\. . . . . . . . . . . . . / \. . . . . /
\. . . . . . . . . . . . / \. . . . /
\ ___________________________________ / \ ___________ /
14 15 16 17 18 19 20 21 22 23 24 25 6 7 8 9

Распиновка DB-25P Распиновка DB-9P
------------------------------------ -------------
(o) контакт 2 Передача данных (TxD) (i) контакт 1 DCD
(i) контакт 3 Получение данных (RxD) (i) контакт 2 RxD
(o) контакт 4 Запрос на отправку (RTS) (o) контакт 3 TxD
(i) контакт 5 Clear To Send (CTS) (o) контакт 4 DTR
(i) контакт 6 Data Set Ready (DSR) (-) контакт 5 GND
(-) контакт 7 Земля (GND) (i) контакт 6 DSR
(i) контакт 8 Data Carrier Detect (DCD) (o) контакт 7 RTS
(o) контакт 20 Data Terminal Ready (DTR) (i) контакт 8 CTS
(i) контакт 22 Индикатор звонка (RI) (i) контакт 9 RI
Остальные контакты не подключены

(o) = контакт для вывода
(i) = контакт для ввода
(-) = штифт является общей ссылкой

Если вы хотите соединить два устройства через последовательный порт, вы должны знать, какого они типа. Если это DTE и DCE, как в соединении ПК-модем, то проблем нет. Вам просто нужно соединить их по очереди, контакт 1 с контактом 1, контакт 2 с контактом 2 и т. Д. Однако, если они оба одного типа, с предыдущим кабелем вы никогда не заставите их общаться. Вы должны поменять местами дополнительные линии, и это то, что делает нуль-модемный кабель. В зависимости от программного обеспечения вам придется переключать определенные линии, но если вы сделаете это для всех, вы будете уверены, что любое программное обеспечение будет работать с таким кабелем. Вот схема нуль-модемного кабеля для всех возможных комбинаций разъемов, обратите внимание, что DCD закорочен с DSR, а RI оставлен открытым (неподключенным).

DB-25 DB-25 DB-9 DB-9 DB-25 DB-9
-------------------- ------------------ ------------ -------
TxD 2 ------ \ / ------ 2 3 ------ \ / ------ 3 2 ------ \ / ------ 3 TxD
RxD 3 ------ / \ ------ 3 2 ------ / \ ------ 2 3 ------ / \ ------ 2 RxD

DCD 8 - \ / - 8 1 - \ / - 1 8 - \ / - 1 DCD
DSR 6 --- \ - \ / - / --- 6 6 --- \ - \ / - / --- 6 6 --- \ - \ / - / --- 6 DSR
DTR 20 ------ / \ ------ 20 4 ------ / \ ------ 4 20 ------ / \ ------ 4 DTR

CTS 5 ------ \ / ------ 5 8 ------ \ / ------ 8 5 ------ \ / ------ 8 CTS
РТС 4 ------ / \ ------ 4 7 ------ / \ ------ 7 4 ------ / \ ------ 7 РТС

RI 22 - | | - 22 9 - | | - 9 22 - | | - 9 RI

Биты каждого байта отправляются последовательно, то есть один за другим, начиная с младшего значащего бита (LSB) и заканчивая старшим значащим битом (MSB). Каждому байту данных предшествует логический 0 (стартовый бит), также называемый пробелом (S), за которым следует логическая 1 (стоповый бит), также называемая меткой (M). Порт может быть сконфигурирован для отправки байтов по 5, 6, 7 или 8 бит с битом четности или без него, при этом если выбраны байты по 8 бит, то бит четности не допускается. Бит четности может быть настроен на четность, нечетность, пробел (всегда 0), отметку (всегда 1) или отсутствие. Также можно выбрать длину стопового бита 1, 1,5 или 2 бита, хотя я обнаружил, что при выборе 1,5 стоповых битов фактически используется 2 стоповых бита (это может зависеть от UART). Наиболее распространенная конфигурация последовательного порта - 8 бит данных, без бита четности и 1 стоповый бит.

LSB MSB LSB MSB
Отдых StB 1 0 0 0 0 0 0 0 SpB StB 0 1 1 1 1 1 1 1 SpB Отдых
___ ___ ___ ___ ___ ___ ___ ___ ___ ___
| | | | | |
___ ___ | | ___ | | ___ | | ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
MMSMSSSSSSSMSSMMMMMMM MMM

Отдых = состояние линии по умолчанию (отметка)
StB = Стартовый бит (пробел)
SpB = стоповый бит (метка)

Последний параметр, который необходимо настроить, - это скорость, которая находится в диапазоне от 50 до 115 200 бод. Bauds означает количество символов в секунду, некоторые устройства, такие как модемы, могут отправлять несколько битов на символ, и поэтому не всегда X bauds означает X бит в секунду. Представьте, например, что модем может посылать 1 из 4 частот (символов) в сообщении. Это будет означать, что он отправляет 2 бита на символ, и поэтому, если модем работает на X битах, он отправляет 2 * X бит в секунду. Но даже это не совсем так, поскольку в приведенном выше примере мы видим, что 2 бита (стартовый и стоповый биты) на байт не содержат информации. Они включены только в целях синхронизации. Более точный расчет информации, отправляемой за единицу времени, можно оценить, отметив, что мы отправляем 10 бит (только 8 с информацией) на байт. Тогда, если ПК работает на 19, 200 бод отправляет 1920 байт в секунду. Обратите внимание, что это верно для ПК (в котором каждый символ содержит только 1 бит, положительное или отрицательное напряжение линии), настроенный, как указано выше. Для других конфигураций просто следуйте тем же рассуждениям.

Использование порта
Последовательный порт можно настроить с помощью команды DOS MODE, панели управления Windows или любой коммуникационной утилиты. Затем его можно использовать для отправки и получения данных с помощью DOS (через перенаправление), Windows или любой другой коммуникационной программы. Однако вы можете легко написать свои собственные приложения. Это можно сделать двумя способами. Один из них - использовать команды или процедуры высокого уровня, которые можно найти в большинстве языков программирования, таких как BASIC или C. Во многих случаях вы можете использовать последовательный порт как файл или стандартный ввод или вывод. Это очень простой способ использовать последовательный порт в ваших программах, однако он может быть довольно неэффективным.

Подпрограммы BIOS ПК далеки от оптимальных и не могут обеспечить максимальную скорость передачи данных. Используя языки низкого уровня (не обязательно ассемблер), вы можете написать свои собственные процедуры для достижения максимальной скорости 115 200 бод. Вы даже можете написать процедуры для обработки прерываний из порта, и это позволит вам поддерживать связь в фоновом режиме. Однако этот документ не будет углубляться в подробности программирования UART, для этого вам следует поискать в другом месте в Интернете или купить книгу. Я кратко опишу основы управления UART для целей простого взаимодействия, т. Е. С использованием линий управления, а не последовательной линии.

UART управляет записью и чтением из регистров, доступ к которым осуществляется через 8 адресов портов. Базовые адреса 03F8h, 02F8h, 03E8h и 02E8h для портов COM1, COM2, COM3 и COM4 соответственно. Значение каждого адреса порта следующее:
  • Базовый адрес:
    • Регистр переданных байтов. Доступно при записи и DLAB = 0.
    • Байт получен в регистр. Доступно при чтении и DLAB = 0.
    • Младший байт регистра фиксации делителя (скорость передачи). Доступно при чтении или записи с DLAB = 1.
  • Базовый адрес + 1:
    • Старший байт регистра фиксации делителя (скорость передачи). Доступно при чтении или записи с DLAB = 1.
    • Регистр разрешения прерывания. Доступно при чтении или записи с DLAB = 0.
  • Базовый адрес + 2:
    • Регистр идентификации прерывания. Доступно при чтении.
    • Регистр управления FIFO. Доступно при записи.
  • Базовый адрес + 3:
    • Регистр управления строкой (биты данных, четность, стоповые биты, DLAB). Доступен при чтении или записи.
  • Базовый адрес + 4:
    • Регистр управления модемом (DTR, RTS). Доступен при чтении или записи.
  • Базовый адрес + 5:
    • Регистр состояния линии (ошибка четности и т. Д.). Доступно при чтении.
  • Базовый адрес + 6:
    • Регистр состояния модема (CTS, DSR, RI, DCD). Доступно при чтении.
  • Базовый адрес + 7:
    • Скретч-регистр. Доступен при чтении или записи.

Важными адресами портов для простого взаимодействия являются те, которые управляют входными (CTS, DSR, RI, DCD) и выходными (DTR, RTS) линиями. Порты и значение битов следующие, где бит 0 - это младший бит, а бит 7 - это старший бит (обратите внимание, что линии управления не следуют обратной логике):
  • Базовый адрес + 4:
    • Бит 0: 1 = DTR положительный, 0 = DTR отрицательный.
    • Бит 1: 1 = RTS положительный, 0 = RTS отрицательный.
  • Базовый адрес + 6:
    • Бит 4: 1 = CTS положительный, 0 = CTS отрицательный.
    • Бит 5: 1 = DSR положительный, 0 = DSR отрицательный.
    • Бит 6: 1 = RI положительный, 0 = RI отрицательный.
    • Бит 7: 1 = DCD положительный, 0 = DCD отрицательный.

Используя команды и процедуры, которые каждый язык программирования должен читать и записывать в порты, вы можете устанавливать и проверять состояние линий управления последовательного порта. Это позволит вам взаимодействовать с вашими собственными устройствами, например, вы можете открыть / закрыть реле, которое питает двигатель, свет и т. Д .; или вы можете проверить, не был ли обрезан кабель (сигнал тревоги), или был ли активирован переключатель и т. д. Например, если вы хотите контролировать состояние линии RI COM1 и активировать RTS, когда RI активирован, вы можете сделать это с помощью программы BASIC, подобной следующей:

10 ПОКА 1: REM *** Бесконечная петля ***
20 RI = INP (& h03FE) AND & h40: REM *** Чтение порта и бит маски для RI ***
30 IF (RI <> 0) THEN GOTO 50: REM *** Проверить, активирован ли RI ***
40 ВЕНД
50 OUT & h03FC, & h02: REM *** Активировать RTS ***
60 КОНЕЦ

Параллельный порт

Вступление
Параллельный порт широко используется в ПК, обычно для связи с близкими устройствами. Это связано с необходимостью использования большого количества кабелей, по крайней мере, 9 для программного подтверждения связи, но обычно используется большее количество кабелей (аппаратное подтверждение связи). Преимущество этого порта перед другим широко используемым портом ПК, последовательным портом, заключается в его более высокой скорости, примерно в 10 раз быстрее, и поэтому в принципе можно достичь скорости передачи данных порядка нескольких сотен килобайт в секунду.

Чаще всего подключение через параллельный порт ПК осуществляется с принтером. Пока принтер не генерирует данные, а только принимает их, параллельный порт сделан однонаправленным, только для вывода. Однако в аппаратном обеспечении в этом не было реальной необходимости, на самом деле в Интернете есть несколько документов о том, как сделать однонаправленный параллельный порт двунаправленным. Сегодня параллельные порты сделаны двунаправленными, потому что некоторые устройства могут опередить их, например, устройства Zip.

Физический слой
Связь физически контролируется интегральной схемой, которая работает с уровнями TTL. Следовательно, он использует 0 В в качестве логического 0 и +5 В в качестве логического 1. Граница между логическим 0 и логической 1 составляет где-то около 2 Вольт. Таким образом, чтобы обеспечить правильную работу порта, вы должны работать с сигналами от 0 до 1 В для логического 0 и от 3 до 6 В для логики 1. Во всех входных линиях параллельного интерфейса есть подтягивающие резисторы до +5 В. порт и так по умолчанию, т.е. без ввода они находятся в высоком состоянии (логическая единица).

Распиновка параллельного порта следующая:

DB-25S (женский)

13 12 11 10 9 8 7 6 5 4 3 2 1
_________________________________________
\ ooooooooooooo /
\ oooooooooooo /
\ ___________________________________ /
25 24 23 22 21 20 19 18 17 16 15 14

Распиновка DB-25S
------------------------
(o) контакт 1 - Строб
(x) контакт 2 + бит данных 0
(x) контакт 3 + бит данных 1
(x) контакт 4 + бит данных 2
(x) контакт 5 + бит данных 3
(x) контакт 6 + бит данных 4
(x) контакт 7 + бит данных 5
(x) контакт 8 + бит данных 6
(x) вывод 9 + бит данных 7
(i) контакт 10 + Подтверждение
(i) контакт 11 - Занято
(i) контакт 12 + Paper out
(i) контакт 13 + Выбрать
(o) штифт 14 -Автоматическая подача
(i) контакт 15 + ошибка
(o) контакт 16 + инициализация
(o) контакт 17 - выбор входа
(-) контакт 18 Земля
... ... .. ...
(-) контакт 25 Земля

(o) = контакт для вывода
(i) = контакт для ввода
(x) = контакт для вывода и, возможно, также для ввода
(-) = штифт является общей ссылкой

+ = бит следует прямой логике: 1 = + 5 В, 0 = 0 В
- = бит следует обратной логике: 1 = 0 В, 0 = + 5 В

Использование порта
Данные могут быть легко отправлены через параллельный порт с помощью перенаправления в DOS. Однако вы получите полный контроль над портом только при написании собственных приложений. Я кратко опишу основы управления параллельным портом для упрощения взаимодействия.

Параллельный порт управляется записью и чтением из 3 адресов порта. Базовые адреса: 0378h и 037Ch для LPT1, 0278h и 027Ch для LPT2 и 03BCh для LPT3. Значение каждого адреса порта и его битов следующее, где бит 0 - это младший бит, а бит 7 - самый старший бит.
  • Базовый адрес: порт данных, для записи и, возможно, также для чтения.
    • Бит 0: бит данных 0.
    • Бит 1: бит данных 1.
    • Бит 2: бит данных 2.
    • Бит 3: бит данных 3.
    • Бит 4: бит данных 4.
    • Бит 5: бит данных 5.
    • Бит 6: бит данных 6.
    • Бит 7: бит данных 7.
  • Базовый адрес + 1: порт состояния, для чтения.
    • Бит 0: зарезервирован.
    • Бит 1: зарезервирован.
    • Бит 2: обнаружение прерывания.
    • Бит 3: ошибка.
    • Бит 4: Выбрать.
    • Бит 5: Нет бумаги.
    • Бит 6: подтверждение.
    • Бит 7: занято
  • Базовый адрес + 2: порт управления для чтения и записи.
    • Бит 0: стробоскоп
    • Бит 1: автоматическая подача
    • Бит 2: инициализировать
    • Бит 3: выбор входа
    • Бит 4: разрешение IRQ
    • Бит 5: зарезервирован *
    • Бит 6: зарезервирован *
    • Бит 7: зарезервирован *
      * Один из этих битов, вероятно, будет использоваться в двунаправленных портах для переключения порта данных с выхода на вход и наоборот.

Используя команды и процедуры, которые каждый язык программирования должен читать и записывать в порты, вы можете устанавливать и проверять состояние линий параллельного порта. Это позволит вам взаимодействовать с вашими собственными устройствами, например, вы можете открыть / закрыть реле, которое питает двигатель, свет и т. Д .; или вы можете проверить, не был ли обрезан кабель (сигнал тревоги), или был ли активирован переключатель и т. д. Например, если вы хотите отслеживать состояние линии занятости LPT1 и активировать инициализацию, когда активирована занятость, вы можете сделать это с программой BASIC, подобной следующей, обратите внимание, что Занят использует обратную логику и Инициализирует прямую логику.

10 ПОКА 1: REM *** Бесконечная петля ***
20 BU = INP (& h0379) AND & h80: REM *** Чтение порта и бит маски для занятости ***
30 IF (BU <> 0) THEN GOTO 50: REM *** Проверить, низкий ли уровень занятости ***
40 ВЕНД
50 OUT & h037A, & h04: REM *** Установить высокий уровень инициализации ***
60 КОНЕЦ

Для получения информации о расширенных возможностях (двунаправленная, EPP, ECP) см .:

Порт джойстика

Вступление
В этом документе будут кратко описаны основы управления портом джойстика для упрощения взаимодействия.

Физический слой
Порт джойстика работает с уровнями TTL, поэтому он использует 0 вольт в качестве логического 0 и +5 вольт в качестве логического 1. Граница между логическим 0 и логической 1 составляет где-то около 2 вольт. Таким образом, чтобы обеспечить правильную работу порта, вы должны работать с сигналами от 0 до 1 В для логического 0 и от 3 до 6 В для логики 1. На всех входных линиях джойстика есть подтягивающие резисторы до +5 В. порт и так по умолчанию, т.е. без ввода они находятся в высоком состоянии (логическая единица).

Распиновка порта джойстика следующая:

DB-15S (женский)

8 7 6 5 4 3 2 1
__________________________
\ oooooooo /
\ ooooooo /
\ ____________________ /
15 14 13 12 11 10 9

Распиновка DB-15S
--------------------------------
(o) контакт 1 +5 Вольт
(i) контакт 2 Кнопка 1 джойстика A
(i) контакт 3 Положение X джойстика A
(-) контакт 4 Земля
(-) контакт 5 Земля
(i) контакт 6 Положение Y джойстика A
(i) контакт 7 Кнопка 2 джойстика A
(o) контакт 8 +5 Вольт
(o) вывод 9 +5 Вольт
(i) контакт 10 Кнопка 1 джойстика B
(i) контакт 11 Положение X джойстика B
(-) контакт 12 Земля
(i) контакт 13 Положение Y джойстика B
(i) контакт 14 Кнопка 2 джойстика B
(o) контакт 15 +5 Вольт

(o) = контакт для вывода
(i) = контакт для ввода
(-) = штифт является общей ссылкой

Примечание: приведенная выше распиновка является теоретической спецификацией, однако я обнаружил, что контакты с 9 по 15 (контакты джойстика B) не подключены к портам джойстика, которые я видел.

Предупреждение: я на собственном опыте знаю, что контакты +5 В не могут поддерживать высокие токи. Будьте осторожны при использовании этого источника в качестве источника питания.

Использование порта
Порт джойстика контролируется чтением с адреса порта 0201h. Значение его битов следующее, где бит 0 - младший бит, а бит 7 - самый старший бит.
  • Бит 0: положение X джойстика A.
  • Бит 1: Положение Y джойстика A.
  • Бит 2: положение X джойстика B.
  • Бит 3: Положение Y джойстика B.
  • Бит 4: кнопка 1 джойстика A.
  • Бит 5: кнопка 2 джойстика A.
  • Бит 6: кнопка 1 джойстика B.
  • Бит 7: кнопка 2 джойстика B.

Примечание: приведенное выше назначение является теоретической спецификацией, однако я обнаружил, что эти биты джойстика B всегда установлены на 1 в портах джойстика, которые я видел.

Используя команды и процедуры, которые каждый язык программирования должен считывать из портов, вы можете проверить состояние линий порта джойстика. Это позволит вам взаимодействовать с вашими собственными устройствами, например, вы можете проверить, не был ли обрезан кабель (сигнал тревоги), или был ли активирован переключатель и т. Д. Например, если вы хотите отслеживать состояние кнопки 1 джойстика A и распечатать сообщение, когда оно будет активировано, вы можете сделать это с помощью программы BASIC, подобной следующей:

10 ПОКА 1: REM *** Бесконечная петля ***
20 B1A = INP (& h0201) AND & h10: REM *** Чтение порта и бит маски для кнопки 1 джойстика A ***
30 IF (B1A = 0) THEN GOTO 50: REM *** Проверьте, находится ли кнопка 1 джойстика A на низком уровне ***
40 ВЕНД
50 ПЕЧАТЬ «Кнопка 1 джойстика A активирована».
60 КОНЕЦ

Мини-HOWTO по программированию портов ввода-вывода Linux
Автор: Рику Сайкконен <[email protected]>

Этот документ HOWTO описывает программирование аппаратных портов ввода-вывода и ожидание в течение коротких периодов времени в пользовательских программах Linux, работающих на архитектуре Intel x86.


1. Введение
2. Использование портов ввода-вывода в программах на языке C
3. Прерывания (IRQ) и доступ к DMA
4. Время с высоким разрешением.
5. Другие языки программирования.
6. Несколько полезных портов
7. Подсказки
8. Устранение неполадок
9. Пример кода
10. Кредиты
 
Top