6. Последовательные устройства

6.1. Аппаратные адаптеры

Адреса ввода/вывода

Драйвер Dev.ser может поддерживать один или более последовательных портов. Аппаратный интерфейс в компьютере состоит из универсального асинхронного интерфейса для каждого последовательного порта. Драйвер поддерживает любой или все из семейств последовательных контроллеров 8250, 16450 или 16550. Каждый универсальный асинхронный интерфейс использует восемь последовательных адресов в массиве адресов ввода/вывода компьютера. Драйвер Dev.ser при запуске получает информацию о массиве адресов ввода/вывода для каждого универсального асинхронного интерфейса из аргументов командной строки.

Аппаратное прерывание

Таким же важным, как адрес ввода/вывода, будет аппаратное прерывание, генерируемое каждым универсальным асинхронным интерфейсом. Большинство микро-ЭВМ обеспечивают различные аппаратные сигналы прерывания на шине, обозначаемые от IRQ2 до IRQ15 (за исключением прерываний 0, 1, 8, 9 и 13, которые используются непосредственно в собственных платах Системы).

Многопортовые последовательные адаптеры

Вы можете сконфигурировать многопортовые последовательные адаптеры так, чтобы они соответствовали большому диапазону адресов ввода/вывода. Эти адаптеры могут также дать Вам широкую возможность выбора аппаратных прерываний.

Большой выбор адресов ввода/вывода находится в диапазоне от 280 до 3BF. Из-за ограниченного числа возможных аппаратных прерываний, эти платы будут преобразовывать набор линий с сигналами прерывания от индивидуального универсального асинхронного интерфейса посредством логического сложения (OR) в единственное прерывание, выдаваемое в шину. QNX допускает совместное использование одного и того же прерывания для множества последовательных портов, т.к. Dev.ser проверит каждый универсальный асинхронный интерфейс, который использует это прерывание.

ВНИМАНИЕ. В конкретном случае каждый последовательный канал должен иметь уникальный адрес ввода/вывода, и каждая адаптерная плата должна использовать уникальное аппаратное прерывание.

6.2. Выбор конфигурации последовательных портов

Утилита stty позволяет установить четыре основных параметра, которые определяют стык RS-232.

Биты данных

QNX поддерживает четыре размера для символа. Вы выбираете размер символа данных одной из следующих команд stty:

stty bits=5

stty bits=6

stty bits=7

stty bits=8 (значение по умолчанию)

Этот параметр определяет, сколько битов, следующих за стартовым битом, будет использоваться, чтобы сформировать минимальную порцию для приема символа.

Биты останова

Данные можно передать, если за ними следуют один или два бита останова. Два бита останова используются только для замедления всей передачи данных так, чтобы удаленный конец мог поддерживать связь. Используя stty, Вы определяете одну из следующих команд:

stty stopb=1 (значение по умолчанию)

stty stopb=2

Четность

Для того, чтобы заблокировать передачу битов четности и исключить проверку (в аппаратных средствах) принимаемых битов на четность, Вы задаете:

stty par=none (значение по умолчанию)

Если четность используется, Вы должны выдать одну из следующих команд:

stty par=odd

stty par=even

stty par=mark

stty par=space

Скорость передачи в бодах

Вы можете определить скорость передачи в бодах опцией baud=number утилиты stty:

stty baud=number

QNX определяет по умолчанию скорость передачи, равную 9600 бод.

6.3. Терминалы

Терминалы работают с управлением потоком данных или без управления и с фиксированной скоростью передачи. В отличие от принтеров терминалы могут работать синхронно с главным компьютером на поддерживаемой скорости передачи. Таким образом, достаточно трехпроводного кабеля, хотя Вы можете также использовать девятипроводной кабель. Подобно главному компьютеру, терминалы включены в конфигурацию, как Терминальное Оборудование Пользователя, так что обычно требуется кабель нуль-модема.

6.4. Выбор конфигурации последовательных линий для терминалов и пользователей

QNX может использоваться в качестве системы разделения времени с полным набором функциональных возможностей. Многие пользователи могут быть подключены к нескольким компьютерам в сети QNX через устройства типа терминала или через модемные линии к терминалам на удаленных вычислительных центрах. Предположим, что терминал/модем правильно включен в конфигурацию, Вам нужно обеспечить в системе механизм, позволяющий пользователям «входить в систему».

Простой пример

Рассмотрим терминал, правильно включенный в конфигурацию через последовательный порт /dev/ser1. Самый простой способ разрешить пользователю этого терминала войти в систему — использовать команду:

ontty /dev/ser1 login

Пользователь сможет войти в систему и выполнять команды. Однако после выхода из системы (то есть, как только пользователь завершит этот сеанс работы), он не сможет снова зарегистрироваться.

Автоматизированный вход

Для того, чтобы автоматизировать процесс входа, Вы можете использовать утилиту tinit. Эта утилита проследит за определенным устройством, ожидая нажатия любой клавиши на этом терминале. Затем login выполнится автоматически. Когда пользователь вошел в систему и затем вышел снова, tinit будет ждать нажатия другой клавиши. Для запуска login от нажатия клавиш данных на двух последовательных устройствах, названных /dev/ser1 и /dev/ser2, Вы можете использовать следующую команду:

tinit -T /dev/ser1 /dev/ser2 &

Допустим, взамен Вы захотели, чтобы login автоматически выполнялись без ожидания нажатия клавиши пользователем. Вам следует использовать опцию -t:

tinit -t /dev/ser1 /dev/ser2 &

6.5. Проблемы тестирования последовательных устройств

Следующая таблица предлагает Вам выполнить действия, если Вы встретите некоторые общие проблемы при подключении последовательных устройств.

Проблема Возможная причина Средство

Не распознаются символы данных Неправильно установлены скорость передачи или признак четности Используйте утилиту stty для установки правильной скорости передачи и/или признака четности

Некоторые символы отображаются хорошо, некоторые нет Неправильно установлен признак четности Попробуйте изменить признак четности, используя утилиту stty

Нельзя ни передать, ни принять данные Неисправен кабель Проверьте кабель

Неисправны порты Проверьте аппаратные установки и параметры Dev.ser ввода/вывода Конфликт прерываний Измените прерывание или адаптерную плату

Данные принимаются и передаются, только когда используется другой последовательный порт Конфликт прерываний Проверьте аппаратные прерывания и параметры запуска Dev.ser. Убедитесь, что два последовательных адаптера не используют одно и то же IRQ

Случайные потери данных Поддерживается управлением потоком, но оно отключено Определите тип управления потоком, поддерживаемого устройством и включите его утилитой stty (ihflow, ohflow, isflow и osflow)

Управление потоком не поддерживается Уменьшите скорость передачи и/или увеличьте количество стоп-битов; если теряются только принимаемые данные, увеличьте входной буфер для Dev.ser (опция -I)

Проблемы с кабелем Убедитесь, что кабель хорошо заземлен и не слишком длинный. Также убедитесь, что все провода стыка RS-232 подключены.