Руководство FreeBSD
Пред. | Глава 24. Последовательные соединения | След.

# 24.2. Введение

## 24.2.1. Терминология

bps

  Бит в секунду (Bits per Second) — скорость передачи данных

DTE

  Терминальное оборудование (Data Terminal Equipment) — например, ваш компьютер

DCE

  Оборудование связи (Data Communications Equipment) — ваш модем

RS-232

  Стандарт EIA для аппаратных последовательных соединений

При упоминании скорости передачи данных, в этой главе не используется термин ''бод'' (''baud''). Бод означает количество электрических импульсов, которые могут быть переданы за период времени, а ''bps'' это корректный термин для использования (он хотя бы не создает столько проблем как предыдущий).

## 24.2.2. Кабели и порты

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

### 24.2.2.1. Кабели

Есть несколько различных видов последовательных кабелей. Два наиболее часто используемых в нашей ситуации типа это нуль-модемный и стандартный (''прямой'') RS-232 кабель. Документация на оборудование должна описывать тип требуемого кабеля.

#### 24.2.2.1.1. Нуль-модемные кабели

Нуль модемный кабель пропускает некоторые сигналы, такие как ''Signal Ground'', напрямую, а другие ''заворачивает''. Например, контакт ''Transmitted Data'' на одном конце соединяется с контактом ''Received Data'' на другом.

Вы можете сделать собственный кабель для использования с терминалами. Эта таблица показывает названия сигналов RS-232C и номера контактов на разъеме DB-25. Заметим, что стандарт описывает соединение контактов номер 1 как сигнал Protective Ground, но его часто не делают. Некоторым терминалам достаточно сигналов на контактах 2, 3 и 7; другим требуется большее число сигналов, как показано на примерах ниже:

Таблица 24-1. Нуль-модемный кабель DB-25 - DB-25

Сигнал | Контакт |  | Контакт | Сигнал
--- | --- | --- | --- | ---
SG | 7 | соединен с | 7 | SG
TD | 2 | соединен с | 3 | RD
RD | 3 | соединен с | 2 | TD
RTS | 4 | соединен с | 5 | CTS
CTS | 5 | соединен с | 4 | RTS
DTR | 20 | соединен с | 6 | DSR
DTR | 20 | соединен с | 8 | DCD
DSR | 6 | соединен с | 20 | DTR
DCD | 8 | соединен с | 20 | DTR

Вот еще две распространенные в настоящее время схемы.

Таблица 24-2. Нуль-модемный кабель DB-9 - DB-9

Сигнал | Контакт |  | Контакт | Сигнал
--- | --- | --- | --- | ---
RD | 2 | соединен с | 3 | TD
TD | 3 | соединен с | 2 | RD
DTR | 4 | соединен с | 6 | DSR
DTR | 4 | соединен с | 1 | DCD
SG | 5 | соединен с | 5 | SG
DSR | 6 | соединен с | 4 | DTR
DCD | 1 | соединен с | 4 | DTR
RTS | 7 | соединен с | 8 | CTS
CTS | 8 | соединен с | 7 | RTS

Таблица 24-3. Нуль-модемный кабель DB-9 - DB-25

Сигнал | Контакт |  | Контакт | Сигнал
--- | --- | --- | --- | ---
RD | 2 | соединен с | 2 | TD
TD | 3 | соединен с | 3 | RD
DTR | 4 | соединен с | 6 | DSR
DTR | 4 | соединен с | 8 | DCD
SG | 5 | соединен с | 7 | SG
DSR | 6 | соединен с | 20 | DTR
DCD | 1 | соединен с | 20 | DTR
RTS | 7 | соединен с | 5 | CTS
CTS | 8 | соединен с | 4 | RTS

> Замечание: Для соединения одного контакта с одной стороны с двумя контактами на другой обычно пару контактов на одной стороне соединяют коротким проводом, а затем один из них — длинным с единственным контактом на дальней стороне.

Приведенные диаграммы описывают наиболее популярные схемы распайки. В других вариантах (описанных в книге RS-232 Made Easy) SG соединяется с SG, TD соединяется с RD, RTS и CTS соединяются с DCD, DTR соединяется с DSR, и наоборот.

#### 24.2.2.1.2. Стандартные кабели RS-232C

Стандартный последовательный кабель пропускает все RS-232C сигналы напрямую. Так, ''send data'' на одном конце кабеля соединяется с контактом ''send data'' на другом конце. Этот тип кабеля предназначен для подсоединения модема, а также подходит для некоторых терминалов.

### 24.2.2.2. Порты

Последовательные порты это устройства, через которые данные передаются между компьютером с FreeBSD и терминалом. Этот раздел описывает типы существующих портов и их адресацию в FreeBSD.

#### 24.2.2.2.1. Типы портов

Существует несколько типов последовательных портов. Перед изготовлением кабеля, вам потребуется убедиться, что он подходит к портам терминала и системы FreeBSD.

Большинство терминалов используют порты DB25. Персональные компьютеры, включая PC под управлением FreeBSD, используют порты DB25 или DB9. Если у вас есть мультипортовая последовательная карта для PC, там могут быть RJ-12 или RJ-45 порты.

Обратитесь к сопровождающей документации на оборудование за информацией об используемых портах. Можно также определить тип используемых портов по их внешнему виду.

#### 24.2.2.2.2. Имена портов

В FreeBSD доступ к каждому последовательному порту может быть получен через файл в каталоге `/dev`. Есть два различных типа файлов:

- Порты входящих соединений (dial-in) называются `/dev/ttyd`N``, где `N` это номер порта начиная с нуля. Обычно, порты входящих соединений используются для терминалов. Для корректной работы этим портам требуется, чтобы последовательный кабель передавал сигнал data carrier detect (DCD).

- Порты исходящих соединений (call-out) называются `/dev/cuad`N``. Они обычно используются не для терминалов, а только для модемов. Вы можете использовать эти порты если последовательный кабель или терминал не поддерживает сигнал DCD.

  > Замечание: Call-out порты в FreeBSD 5.X и ранее именуются `/dev/cuaa`N``.

Если вы соединили терминал с первым последовательным портом (`COM1` в MS-DOS®), используйте `/dev/ttyd0` для доступа к терминалу. Если терминал соединен со вторым последовательным портом (известным также как `COM2`), используйте `/dev/ttyd1`, и так далее.

## 24.2.3. Настройка ядра

FreeBSD c настройками по умолчанию поддерживает последовательные порты. В мире MS-DOS они известны как `COM1`, `COM2`, `COM3`, и `COM4`. На данный момент в FreeBSD есть поддержка как ''простых'' мультипортовых карт с последовательными интерфейсами, таких как BocaBoard 1008 и 2016, так и более ''умных'' мультипортовых карт, например карт Digiboard и Stallion Technologies. Тем не менее, ядро по умолчанию определяет только стандартные COM порты.

Чтобы увидеть, как ядро определяет последовательные порты, просмотрите сообщения, выводимые во время загрузки ядра, или используйте команду `/sbin/dmesg` для вывода сообщений ядра еще раз. В частности, обратите внимание на сообщения, начинающиеся с символов `sio`.

> Подсказка: Для просмотра только тех сообщений, которые содержат слово `sio`, используйте команду:

>     # /sbin/dmesg | grep 'sio'

Например, в системе с четырьмя последовательными портами, появятся такие специфичные для последовательных портов сообщения:

    sio0 at 0x3f8-0x3ff irq 4 on isa
    sio0: type 16550A
    sio1 at 0x2f8-0x2ff irq 3 on isa
    sio1: type 16550A
    sio2 at 0x3e8-0x3ef irq 5 on isa
    sio2: type 16550A
    sio3 at 0x2e8-0x2ef irq 9 on isa
    sio3: type 16550A

Если ядро не распознает все последовательные порты, вам возможно потребуется настроить ядро FreeBSD, изменив файл `/boot/device.hints`. Вы можете также закомментировать или вовсе удалить строки, относящиеся к отсутствующим у вас устройствам.

Обратитесь к странице справочника sio(4) за дополнительной информацией о настройке последовательных портов и мультипортовых карт. Будьте осторожны при использовании настроек, которые работали в предыдущих версиях FreeBSD, поскольку флаги устройств и синтаксис изменились в новых версиях.

> Замечание: `port IO_COM1` это синоним для `port 0x3f8`, `IO_COM2` для `0x2f8`, `IO_COM3` для `0x3e8`, и `IO_COM4` для `0x2e8`. Это наиболее часто используемые для соответствующих последовательных портов адреса. Наиболее часто используемые прерывания 4, 3, 5, и 9. Имейте ввиду, что обычные последовательные порты не могут совместно использовать прерывания на ISA PC (на мультипортовых картах есть электроника, позволяющая всем чипам 16550A на плате совместно использовать одно или два IRQ).

## 24.2.4. Специальные файлы устройств

К большинству устройств ядра можно получить доступ через ''специальные файлы устройств'', расположенные в каталоге `/dev`. К устройствам `sio` можно получить доступ через `/dev/ttyd`N`` (устройства входящих вызовов, dial-in) и `/dev/cuad`N`` (устройства исходящих вызовов, call-out). FreeBSD предоставляет также устройства инициализации (`/dev/ttyd`N`.init` и `/dev/cuad`N`.init` в случае FreeBSD 6.X, `/dev/ttyid`N`` и `/dev/cuaia`N`` для FreeBSD 5.X), устройства блокировки (`/dev/ttyd`N`.lock` и `/dev/cuad`N`.lock` в случае FreeBSD 6.X, `/dev/ttyld`N`` и `/dev/cuala`N`` для FreeBSD 5.X). Первые используются для инициализации параметров порта при каждом его открытии (таких как `crtscts` для модемов, использующих сигналы `RTS/CTS` для управления потоком). Устройства блокировки используются для установки флага блокировки на порт и предотвращения изменения определенных параметров пользователями или программами; обратитесь к страницам справочника termios(4), sio(4) и stty(1) соответственно за информацией о параметрах терминала, блокировании и инициализации устройств и настройке терминала.

## 24.2.5. Настройка последовательных портов

Устройство `ttyd`N`` (или `cuad`N``) это обычное устройство, которое потребуется открыть для приложений. Когда процесс открывает устройство применяются настройки ввода/вывода терминала по умолчанию. Вы можете посмотреть эти настройки с помощью команды

    # stty -a -f /dev/ttyd1

Если вы измените настройки устройства, они будут действовать до его закрытия. После повторного открытия, оно вернется к настройкам по умолчанию. Для изменения настроек по умолчанию, вы можете открыть и изменить установки ''начального состояния'' устройства. Например, для включения по умолчанию режима `CLOCAL`, 8-битного соединения и контроля передачи `XON/XOFF` для `ttyd5`, выполните:

    # stty -f /dev/ttyd5.init clocal cs8 ixon ixoff

Инициализация последовательных устройств контролируется файлом `/etc/rc.d/serial`. Этот файл определяет настройки последовательных устройств по умолчанию.

Для предотвращения изменения программами отдельных установок, настройте ''состояние блокировки'' устройства. Например, для установки значения скорости `ttyd5` в 57600 bps, выполните:

    # stty -f /dev/ttyd5.lock 57600

Теперь приложение, открывающее `ttyd5` и пытающееся изменить скорость порта, получит скорость 57600 bps.

И конечно, сделайте запись начальных значений и состояния блокировки устройств доступной только учетной записи `root`.

Пред. | Начало | След.
Последовательные соединения | Уровень выше | Терминалы

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.