МАРСОХОД

Open Source Hardware Project

Описание интерфейса 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

Комментарии  

-1 #9 Александр862 10.01.2016 16:09
А кто тактирует клок при передаче от устройства к компьютеру?
-2 #8 a 16.10.2013 10:40
:-x
+1 #7 nckm_ 03.05.2011 19:31
Цитирую Андрей:
Объясните мне, пожалуйста, где в этом протоколе биты нажатия и отпуска клавиш, и бит нажатия спец клавиши?
Или таких вовсе нет, а программы высокого уровня их генерируют исходя из поведения клавиатуры?

вот тут посмотрите: https://marsohod.org/11-blog/57-ps2proto
описание именно протокола, там же есть ссылка на коды нажатия-отпуска ния у клавиатуры
-1 #6 Андрей 03.05.2011 18:19
Объясните мне, пожалуйста, где в этом протоколе биты нажатия и отпуска клавиш, и бит нажатия спец клавиши?
Или таких вовсе нет, а программы высокого уровня их генерируют исходя из поведения клавиатуры?
-2 #5 nckm 19.01.2011 09:21
Цитирую 3ABXO3:
в контроллере i8051 вся подтяжка выполнена на GND резюками 10кОм.(Специально просмотрел не сколько мамок) Сигналы DataIn(Out) и ClockIn(Out) после разъема Mini DIN (РС/2) поступают на индуктивности, а далее на подтяжку....
Хм.. странно все это.. может резистор подтягивающий к +5В внутри контроллера? посмотрю как нибудь
0 #4 3ABXO3 17.01.2011 16:12
"Клавиатура (или мышь) подключена к контроллеру на материнской плате по схеме «открытый коллектор». Что это такое? Схему можно нарисовать примерно так:"
в контроллере i8051 вся подтяжка выполнена на GND резюками 10кОм.(Специаль но просмотрел не сколько мамок) Сигналы DataIn(Out) и ClockIn(Out) после разъема Mini DIN (РС/2) поступают на индуктивности, а далее на подтяжку....
-1 #3 3ABXO3 15.01.2011 05:36
проект не работает в винде после перезагрузки (причем отключвается мк 8051)... в linux все ок
-1 #2 Kolobokk 30.10.2010 06:58
Может пригодится тому, кому попалась клавиатура с неправильным разъёмом: http://oldoctober.com/forum/viewtopic.php?f=16&t=19&start=0&hilit=%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D1%80%D0%B0
+1 #1 JKQ 21.04.2010 07:30
Спс огромное. Ждем!

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



facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Статьи о разном Описание интерфейса PS2