User Tag List

Показано с 1 по 10 из 85

Тема: Протокол PS/2

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,213
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,643
    Поблагодарили
    572 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Протокол PS/2

    Хочу в своём эмуляторе задействовать PS/2 клавиатуру, подключенную к GPIO пинам Raspberry Pi. Подключается элементарнейше 4-мя проводами:


    • +5В
    • CLOCK
    • DATA
    • GND


    Но так как Raspberry Pi рассчитана на сигналы 3.3В, а клавиатура выдаёт 5В, которые запросто могут спалить GPIO, то сигналы CLOCK и DATA подключаются через делители, выполненные на резисторах:



    Код:
    /*
     *  kbdtest.c      basic PS/2 keyboard input test
     *
     *  Test operation of a PS/2 keyboard wired to P1 on
     *  the Raspberry Pi.
     *
     *  PS/2 CLK line goes to P1-16 through voltage divider
     *  PS/2 DATA line goes to P1-18 through voltage divider
     *  PS/2 5 VDC line goes to P1-2 or P1-4
     *  PS/2 GND line goes to P1-6
     *
     *  You MUST use a voltage divider between the PS/2 CLK
     *  or DATA lines and the RasPi P1 connector!  The RasPi
     *  cannot handle 5 VDC logic signals.  If you don't
     *  divide the PS/2 signals down to 3.3 VDC, you will
     *  damage the RasPi!
     *
     *  Building this code will yield a kernel.img file.  Copy
     *  this file to the root directory in a RasPi boot SD card,
     *  install the card into your RasPi, power it up, and the
     *  video display should show the test results.
     *
     *  Note that you will have to set the display parameters
     *  in your SD card's config.txt file to match those of
     *  the console display parameters.  For example, if your
     *  console library is built to use 800 x 600 pixel display,
     *  you will need to edit your SD card's config.txt to
     *  show a framebuffer_width of 800 and a framebuffer_height
     *  of 600.
     *
     *  Karl Lunt   7 Aug 2015
     */
    Код:
    /*
     *  ps2kbd.c      PS/2 keyboard support for the Raspberry Pi
     *
     *  This code is based on the work by Paul Stoffregen, L. Abraham Smith,
     *  and others.  I've retained Paul's copyright notice below.
     *
     *  This code assumes a connection to the Raspberry Pi's expansion
     *  connector (P1).  Two connections are required, one for the
     *  DATA signal and one for the CLK signal.
     *
     *  WARNING!  The Raspberry Pi GPIO inputs are NOT 5 VDC tolerant!
     *  You can use the 5 VDC supply on the RasPi to drive your keyboard,
     *  but you MUST use voltage dividers on the CLK and DATA lines when
     *  you wire them to your RasPi, or you will damage your RasPi.
     *
     *  Here is a diagram for suitable voltage dividers:
     *
     *  KBD DATA <---------[ 2.2K ]------+-------[ 3.3K ]---------> GND
     *                                   |
     *                                   +------------------------> RasPi GPIO
     *
     *  KBD CLK  <---------[ 2.2K ]------+-------[ 3.3K ]---------> GND
     *                                   |
     *                                   +------------------------> RasPi GPIO
     *
     *  Karl Lunt (10 Aug 2015)
     */
    
    /*
    Протокол обмена простейший:



    Смотрим на сигнал CLOCK и по его спаду получаем последовательно биты с сигнала DATA. Всё просто и элементарно.

    И вот я всё подключил и начал разбираться c сигналами и писать драйвер на ассемблере. Всё вслепую, потому что на тот момент не нашёл ни одной готовой программы, которая обслуживает такой тип подключения. То есть у меня не было уверенности, что я всё подключил корректно, хотя ошибиться там сложно, а я всё прозвонил и проверил не один раз.

    А потом я отыскал таки готовую, скомпилированную программу, которая работает с таким типом подключения. Там изображение сбито, но оно изменяется с каждой нажатой клавишей. То есть гарантированно подключение верное и программа на клавиатуру реагирует. Бился я бился с драйвером, какие-то данные из DATA я получаю, но они нестабильные и хаотичные. Но совершенно точно это реакция на нажатие клавиш. Перед тем как пойти спать до меня таки дошло, что я ошибочно полагал (по аналогии с геймпадом NES!), что это я должен передавать сигнал CLOCK, в ответ на который клавиатура будет слать мне данные. Но на деле оба сигнала должна выдавать клавиатура. С этим я и лёг спать, рассчитывая, что теперь-то уж я точно всё сделаю. На следующий день снова ничего не получилось. И даже как-то хуже стало. Вообще пропала какая-либо реакция. Я решил запустить ту же самую программу, которая выступала индикатором правильности подключения. Но и она перестала что-либо выдавать. Причём я ничего не переподключал, ничего не менял и вообще никаких изменений не делал. И вот вчера оно работало, а сегодня при тех же условиях перестало. Первая мысль - сгорели порты GPIO. Проверил - порты исправны: принимают и передают данные, как и раньше. Прозвонил схему - всё везде ОК. Клавиатуру втыкал в два разных устройства - в обоих работает без нареканий и гарантированно в режиме PS/2. Перепаял схему, всё заизолировал и проверил - всё ОК. Нашёл другую программу, собрал её из исходников - клавиатуру она не видит. Подключил клавиатуру на другие пины, пересобрал программу - ноль эмоций. Проверил питание клавиатуры - 5В без просадок. В общем, всё по отдельности работает, а вместе не хочет. Хотя вчера работало, а сегодня уже не работает. Я думал, что может я своими экспериментами порты как-то пожёг. Но опять же на тех же портах на Rasberry Pi другие устройства работают, а клавиатура тоже работает с другими устройствами. Не могу гарантировать, но мне кажется, что почему-то CLOCK не тикает. Осциллографа у меня нет, поэтому проверить не могу.

    К сожалению, у меня только одна клавиатура PS/2 и проверить другую я пока не могу. Но может быть кто-нибудь что-нибудь посоветует?

    Если что, вот здесь описание и программа, которой я тестировал (в конце статьи есть архив с исходниками, и в недрах в одной из папок лежит скомпилированный кернель): http://www.deater.net/weave/vmwprod/hardware/pi-ps2/
    Вот здесь bare-metal OS с поддержкой такого типа подключения: https://github.com/deater/vmwos/tree/master (я смог собрать и запустить, но клавиатуру она не видит)
    А вот короткий исходник на Си, которым можно быстро скомпилировать и опробовать: https://github.com/deater/vmw-meter/tree/master/pi-ps2 (клавиатуру не видит ни на этих пинах, ни на других)

    Прошу любой помощи!
    С уважением, Станислав.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Протокол HX - имитация блочного устройства с последовательным интерфейсом.
    от Patron в разделе Эмуляторы отечественных компьютеров
    Ответов: 287
    Последнее: 25.07.2023, 09:38

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •