Важная информация

User Tag List

Страница 1 из 9 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 85

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

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 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
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если только принимаешь то надо да, оба слушать. Если хочешь помигать лампочками, то надо передавать. Для этого зажимается CLK в 0 на некоторое время и после этого передаётся команда управления лампочками. Не вижу никакой сложности с управлением, а тебе надо подключить LA и посмотреть, что именно происходит на интерфейсе. Может у тебя драйвер не в критикал тайминге работает и теряет биты?

    PS Я подключал PS/2 клаву к порту джойстика сеги и работал с ней в командной строке лет 15+ назад. Никаких проблем с этим интерфейсом вообще не видел.

  4. #3
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    а тебе надо подключить LA и посмотреть, что именно происходит на интерфейсе
    Вот нет его у меня! И поэтому приходится вслепую что-то налаживать.

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Никаких проблем с этим интерфейсом вообще не видел.
    Я это прекрасно понимаю. Но у меня почему-то всё резко перестало работать. И даже сторонний софт, который как-то работал. В этом и есть проблема. И я пытаюсь хотя бы понять, что же произошло и как это устранить.
    С уважением, Станислав.

  5. #4
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вместо LA можно и осциллографом. Благо, частоты не большие и можно триггером выделять посылку и в ждущем режиме записывать. Осциллографом даже лучше: можно проконтроллировать логические уровни, вдруг что-то не так?

  6. #5
    Veteran Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,004
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    250
    Поблагодарили
    230 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Прошу любой помощи!
    пара моментов -
    - CLK и DATA со стороны клавиатуры надо подтянуть к +5В
    - иногда попадаются клавы которым строго необходима инициализация со стороны хоста, иначе не работает

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  7. Эти 2 пользователя(ей) поблагодарили Serg6845 за это полезное сообщение:

    CityAceE (13.10.2023), MM (13.10.2023)

  8. #6
    Activist Аватар для ALS
    Регистрация
    14.09.2012
    Адрес
    г.Севастополь
    Сообщений
    427
    Спасибо Благодарностей отдано 
    234
    Спасибо Благодарностей получено 
    67
    Поблагодарили
    47 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Вот нет его у меня! И поэтому приходится вслепую что-то налаживать.
    Я тут подсуетился...

  9. Эти 2 пользователя(ей) поблагодарили ALS за это полезное сообщение:

    CityAceE (13.10.2023), HardWareMan (13.10.2023)

  10. #7
    Activist
    Регистрация
    17.03.2009
    Адрес
    Moscow
    Сообщений
    464
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    48
    Поблагодарили
    32 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serg6845 Посмотреть сообщение
    - CLK и DATA со стороны клавиатуры надо подтянуть к +5В
    можно и к 3.3 (и никаких делителей!), наверняка заработает
    и вдоль ом по 300..500, на всякий
    Profi v3.2 512K+color; Profi 6.2B; МС-0511

  11. #8
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,405
    Спасибо Благодарностей отдано 
    320
    Спасибо Благодарностей получено 
    598
    Поблагодарили
    444 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALS Посмотреть сообщение
    Да, для данной и ещё кучи задач его идеально будет.

  12. #9
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serg6845 Посмотреть сообщение
    пара моментов
    Спасибо за предположения!

    Из предложенного могу попробовать инициализацию клавиатуры. А что она из себя представляет? Не попадалась такая информация. Буду гуглить. Но к вопросу смогу вернуться только через неделю.

    Смущает, что работало же ведь и без инициализации, и без подтяжки. И за ночь перестало. Я бы мог ещё поверить, что или Raspberry Pi какие-то параметры запоминает в недрах SoC, или клавиатура. Так ведь нет же.

    Цитата Сообщение от ALS Посмотреть сообщение
    Я тут подсуетился...
    Спасибо! Заказал, правда в другом месте - чуть дороже, но с доставкой. Но ещё предстоит разобраться как с ним работать - никогда прежде не сталкивался.
    Последний раз редактировалось CityAceE; 13.10.2023 в 23:02.
    С уважением, Станислав.

  13. #10
    Activist
    Регистрация
    17.03.2009
    Адрес
    Moscow
    Сообщений
    464
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    48
    Поблагодарили
    32 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Смущает, что работало же ведь
    Подтяжка в клавиатуре слабенькая (10..20к) и м.б. не особо стабильная, в результате до малины после делителя вместо нормальной единицы доходят невнятные крохи.
    вообще я бы попробовал клаву просто от 3.3в запитать, народ пишет - частенько они прекрасно работают при таком питании.
    Profi v3.2 512K+color; Profi 6.2B; МС-0511

Страница 1 из 9 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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