OSDev
http://osdev.su/

PS/2 контроллер клавиатуры
http://osdev.su/viewtopic.php?f=7&t=1490
Страница 1 из 1

Автор:  v.g.a. [ 07 июл 2017, 10:04 ]
Заголовок сообщения:  PS/2 контроллер клавиатуры

Смотрю код драйвера linux i8042.c. Там есть функция ожидания для чтения и другая для записи, которые в цикле читают порт 64h, анализируют биты OBF и IBF соответственно. В этих функциях реализован таймаут, если не ошибаюсь 500 мс. Таймаут реализован на функции udelay (тупая задержка на основе цикла).
На реальном железе, у меня время ожидания ответа контроллера максимальное получилось 24-25 мс (посылка команды AA self-test). Таймаут сделал ограничением количества чтений порта. Одно чтение порта 64h 1,6 мкс. Вообщем 50 мс таймаут.
У кого есть какие соображения насчёт времени таймаута?

Автор:  Himik [ 08 июл 2017, 00:32 ]
Заголовок сообщения:  Re: PS/2 контроллер клавиатуры

Да, примерно так. А лучше задействовать таймер, т.к. процессоры, чипсеты да ещё виртуалки сильно разные по скорости.

Автор:  pavia [ 08 июл 2017, 15:44 ]
Заголовок сообщения:  Re: PS/2 контроллер клавиатуры

Мкс путаете с мс.
Контролёр интерфейса путаете с контролёром клавиатуры.
Цитата:
Одно чтение порта 64h 1,6 мкс.

Одно чтение с ISA(LPC) составляет 0.125 мкс. Эта задержка обусловленна опорной частотой 8МГц. И её можно наблюдать при чтение со свободного адресса.
Посмотрел по интеловскому даташитам чтения с порта 64h составляет от 1,2 до 9,8 мкс. У других фирм может и быстрее работать.
http://radio-hobby.org/uploads/datashee ... 8042ah.pdf

Что касается паузы в 500 мкс. То это время чтения одного байта с контролёра клавиатуры. Один байт кодируется 11 бодами. Стартовый бод, затем 8 бод данных, бод чётности, и стоповый. Итого 11 бод. С паузой в 50 мкс. 50*11=550. мкс.
Это для старых контролёров 8042 у которых входной и выходной буфер был общим. Драйверу приходилось ждать пока он получит байт от клавиатуры. Потом этот аппоратный косяк 8042 исправели.

А AA-Self-test это тест контролёра интерфейса 8042, а не контролёра клавиатуры поэтому он отрабатывает быстрее.

Кстати ROM 8042 контролёра.
http://www.halicery.com/8042/8042_1503033.TXT
Можно посмотреть, что делает код самотестирования. И почему ответ на чтение длится несколько мкс.

А эмулятору вообще времена побоку. Хотя борщ вроде что-то симулирует.

По поводу пустого цикла. Если хочешь можешь сделать параллельное исполнение через прерывание таймера.

Автор:  v.g.a. [ 10 июл 2017, 08:58 ]
Заголовок сообщения:  Re: PS/2 контроллер клавиатуры

В linux задержка 500 мс. Таймаут для ps/2 устройства. Нет отдельного таймаута для контроллера.
Сам я хочу сделать отдельную задержку для контроллера 50 мс.
За документацию спасибо.

Автор:  v.g.a. [ 02 сен 2017, 19:14 ]
Заголовок сообщения:  Re: PS/2 контроллер клавиатуры

Вообщем не всё так просто с этим контроллером. Написал небольшую тестовую программу. Замысел был проверить работу контроллера при получении и одновременной отправке данных. Программа загружает в контроллер байт конфигурации 04h (запрет прерываний от клавиатуры и мыши, отключение трансляции скан кодов клавиатуры). Ну и в цикле читает порт 64h, если есть данные, читает их из порта 60h и выводит на экран данные и номер порта (бит AUX) статуса. В определённый момент программа отправляет команду контроллеру d4h, а затем команду мыши. В это же самое время приходят скан коды от клавиатуры и байты от мыши. От клавиатуры и мыши идут по три байта.
В общем в виртуалке vmware и на двух компьютерах всё работает. Но на другом компьютере иногда после отправки команды мыши, следующий скан код от клавиатуры приходит как будто от мыши (бит AUX равен 1). Что не есть хорошо.
Видимо такая особенность контроллера.
Думаю нужно отключать порт клавиатуры, перед отправкой данных мыши. После отправки данных, включать обратно. Аналогично при отправке данных клавиатуре. Как это будет работать, ещё не проверял.

Автор:  v.g.a. [ 06 сен 2017, 22:55 ]
Заголовок сообщения:  Re: PS/2 контроллер клавиатуры

Цитата:
Думаю нужно отключать порт клавиатуры, перед отправкой данных мыши. После отправки данных, включать обратно.

Проверил, глюки исчезли.
Цитата:
Аналогично при отправке данных клавиатуре.

Ещё не проверял.

Автор:  v.g.a. [ 13 сен 2017, 23:08 ]
Заголовок сообщения:  Re: PS/2 контроллер клавиатуры

pavia писал(а):
Кстати ROM 8042 контролёра.
http://www.halicery.com/8042/8042_1503033.TXT

Посмотрел код, многие вопросы прояснились.
Только контроллер для AT, не для PS/2. Но сам принцип работы контроллера понятен - опрос в цикле битов IBF и OBF. И соответственно либо исполнение команды/отправка данных клавиатуре, либо чтение байта из клавиатуры (в случае готовности клавиатуры к отправке скан-кодов).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/