Описание интерфейса PS2

Несмотря на то, что USB клавиатур и мышей становится все больше и больше, компьютеры со «старым» PS2 интерфейсом все еще выпускаются. Посмотрите на системный блок Вашего компьютера сзади. Вы видите два небольших шестиконтактных разъемчика, один над другим, зеленый и фиолетовый? Это они. Они служат для подключения мыши и клавиатуры стандарта PS2.

Для начала, немного технической информации.

Как работает интерфейс PS2?
Порывшись в интернете находим наиболее достоверную информацию о PS2 здесь: http://www.computer-engineering.org/, автор Adam Chapweske, за что мы ему крайне признательны. Статья эта большая и на английском языке, поэтому попробуем перевести на русский самое необходимое.

Первое – это описание контактов разъема PS2.
В разъеме MINIDIN 6 контактов, но используются только 4 из них.

описание разъема PS2

Слева нарисован разъем, который вставляется. Он устанавлявается на шнур мыши или клавиатуры. Справа нарисован разъем устанавливаемый на материнскую плату компьютера. Нумерация контактов у них, естественно зеркальная, потому, что при вставлянии одного разъема в другой сигналы одного имени должны совпадать.

Сигналы интерфейса:

  1. Data (передаваемые данные)
  2. Not Implemented (не используетя)
  3. Ground (Земля)
  4. VCC (+5V) (Питание)
  5. Clock (сигнал синхронизации передаваемых данных)
  6. Not Implemented (не используется).

Второе – это электрический интерфейс.
Клавиатура (или мышь) подключена к контроллеру на материнской плате по схеме «открытый коллектор». Что это такое? Схему можно нарисовать примерно так:

подключение клавиатуры к ПК по схеме с открытым коллектором

Схема «открытый коллектор» используется когда одним сигналом могут управлять несколько устройств. В нашем случае это контроллер на материнской плате и контроллер внутри клавиатуры. Они могут передавать данные навстречу друг другу. Например Клавиатура посылает коды нажатых клавиш, а компьютер посылает в клавиатуру команду зажечь светодиоды CAPS/NUM/SCROLL LOCK.
В исходном состоянии, когда данные не передаются, оба сигнала Data и Clock находятся в логической единице (на них напряжение +5В). Такое состояние будет если оба контроллера снимут управляющее напряжение с транзисторов (ClockOut и DataOut) и они закрыты. Так как транзисторы закрыты, то сигналы «подтянуты вверх» к напряжению питания резисторами. Читать текущее состояние сигналов оба контроллера могут прямо с контактов DataIn и ClockIn. Управлять линией очень легко. Контроллер подает управляющее напряжение на базу транзистора (сигналы DataOut и ClockOut), он открывается, через него течет ток и соответствующий сигнал Data или Clock получается «притянут к земле», на нем получается логический ноль. Что делать если оба контроллера захотят одновременно передать навстречу друг другу? Ну во-первых, ничего страшного на физическом уровне не случится, ведь «притянутый к земле» сигнал «притянуть» еще раз не получится. Во-вторых, конечно это проблема для уровня передачи данных. Оба контроллера, как два вежливых собеседника, должны уметь слушать друг друга и дослушать до конца. Это обеспечивается специальным протоколом. Например контроллер, перед передачей своих данных не должен начинать передачу данных если состояние сигналов недавно менялось.

Третье - это протокол.
При передаче от устройства (PS2 клавиатуры или PS2 мыши) к компьютеру используется следующий протокол. Устройство не начинает передачу, если Clock не находился в «1» по крайней мере 50 микросекунд. Устройство передает последовательно:

  1. старт бит – всегда ноль;
  2. 8 бит данных;
  3. бит четности;
  4. стоп бит – всегда единица.

Устройство устанавливает/меняет сигнал Data когда Clock находится в логической единице. Контроллер на материнской плате читает данные, когда Clock находится в логическом нуле. Примерно так:

wave1
Частота сигнала Clock примерно 10-16.7кГц. Время от фронта сигнала Clock до момента изменения сигнала Data не менее 5 микросекунд. Так написано в той статье, на которую я сделал ссылку в начале. Четно говоря я очень сомневаюсь, что производители придерживаются этих значений.
Контроллер материнской платы может сигнализировать устройству о невозможности приема опустив сигнал Clock в логический ноль. На практике этого по моему тоже никто не делает.
При передаче в обратную сторону команд от контроллера на материнской плате компьютера к клавиатуре или мыши протокол отличается от описанного выше.
Последовательность передаваемых бит здесь хитрее:

  1. хост контроллер опускает сигнал Clock в ноль на время примерно 100 микросекунд;
  2. хост контроллер опускает сигнал Data в ноль формируя старт бит;
  3. хост контроллер отпускает сигнал Clock в логическую единицу, клавиатура фиксирует старт бит;
  4. далее клавиатура генерирует сигнал Clock, а хост контроллер подает передаваемые биты;
  5. после того, как хост контроллер передал все свои биты, включая бит четности и стоп бит, клавиатура посылает последний бит «ноль», который является подтверждением приема.

wave2

Поскольку одним сигналом управляют два устройства, то довольно трудно понять, кто в данный момент времени управляет сигналом. Именно по этому диаграмма нарисована двумя цветами. Красный цвет – сигнал управляется хост контроллером, а синий – сигнал управляется клавиатурой.

Четвертое - это коды и команды, которые посылают мыши, клавиатуры и контроллер компьютера. Это довольно сложная тема... Пожалуй опишу все это в следующей статье.

Ну и конечно, мы собираемся сделать из платы Марсоход какой-то прототип клавиатуры. Уже скоро! Tongue out

Добавить комментарий