|
|
  |
STM32F4 и PS/2 мышь |
|
|
|
Feb 24 2014, 19:13
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Сейчас пользуюсь драйвером немца - http://mikrocontroller.bplaced.net/word ... age_id=744 Один "странный" косяк я исправил - если мышь не понимает команду 0xF2 (идентификация мыши) он тупо вываливается с ошибкой, хотя весь дальнейший алгоритм прекрасно понимает оба типа мыши (стандартная и Intellimouse). Но обнаружилась странная вещь - на старых мышах он работает, а на большинстве новых - нет. Есть 2 мыши Logitech RX250, одна белая, 2-я чёрная. Белая работает достаточно стабильно, хоть и не без приколов, Чёрная - труп трупом. Кроме фэн-шуя в голову ничего не приходит.. Уже 3 дня читаю разные мануалы, примеры кода под авры и прочее - по фиг. Если надо, дам все ссылки и свой код. Всё чего удалось добиться - команды нормально передаются в мышь. На драйвере немца мышь вообще не генерит синхронизацию. Он вначале притягивает к земле только данные, а синхру - нет. Дальше странности - многие команды дают либо код ошибки 0xFC, либо какой-то недокументированный код - 0xF8. Даже команда сброса 0xFF корректно отрабатывает только один раз, в ответ на все остальные летит некий бред типа 0xF8. Вопрос - кто-нибудь работал с мышей, каковы результаты и есть ли у кого нормальный драйвер? Спасибо. PS. Все мыши рабочие. Проверены в компе.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Feb 25 2014, 05:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Не скажите. Я пытался подключать 2 свои USB мыши к компу через переходник на PS/2 - не работают. Logitech RX250 не в счёт, она изначально с двойным интерфейсом. Так что, это, по-моему - "территория заблуждений"  . Да даже если б и работало, подключить её к USB хосту я не могу, у меня там флэшка.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Feb 25 2014, 07:26
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Работал с мышами когда-то очень давно, все забыл. Цитата(hd44780 @ Feb 24 2014, 21:13)  либо код ошибки 0xFC, либо какой-то недокументированный код - 0xF8. Код 0xF8 очень похож на 0xFC сдвинутый на один бит влево. Возможно какая-то проблема в синхронизации? Не по тому фронту читаете? Дребезг на фронтах захватываете? В общем я бы вывел принимаемый бит на свободную ногу порта, зарядил в цикле команду сброса и осциллографом сравнивал все три сигнала (такт, данные и принятые данные) с учебником.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 25 2014, 08:18
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Цитата(Сергей Борщ @ Feb 25 2014, 09:26)  Код 0xF8 очень похож на 0xFC сдвинутый на один бит влево. Возможно какая-то проблема в синхронизации? Не по тому фронту читаете? Дребезг на фронтах захватываете? В общем я бы вывел принимаемый бит на свободную ногу порта, зарядил в цикле команду сброса и осциллографом сравнивал все три сигнала (такт, данные и принятые данные) с учебником. Прерывание одно и то же, программа одна и та же. CODE // 0xFF - Сброс - 3 раза st = P_PS2_Mouse_Send ( PS2_MOUSE_CMD_RESET ); P_PS2_Mouse_Timeout_RX ( 50000 ); // checks PS2_MOUSE_VAR.receive_code P_PS2_Mouse_Timeout_RX ( 50000 ); P_PS2_Mouse_Timeout_RX ( 50000 );
st = P_PS2_Mouse_Send ( PS2_MOUSE_CMD_RESET ); P_PS2_Mouse_Timeout_RX ( 50000 ); P_PS2_Mouse_Timeout_RX ( 50000 ); P_PS2_Mouse_Timeout_RX ( 50000 );
st = P_PS2_Mouse_Send ( PS2_MOUSE_CMD_RESET ); P_PS2_Mouse_Timeout_RX ( 50000 ); P_PS2_Mouse_Timeout_RX ( 50000 ); P_PS2_Mouse_Timeout_RX ( 50000 );
PS2_MOUSE_VAR.receive_code - принятый из мыши байт. Первый раз там 0xFA - это правильно. 2 и 3-й - бред. Проверю, может где-то у немца какие-то флажки не сбрасываются ... Кстати, проверил его оригинальный драйвер на работающей мыше - инициализация проходит только один раз. Далее лезет тот самый 0xF8. Цитата(megajohn @ Feb 25 2014, 10:10)  в порядке бреда предложу посмотреть частоту синхроимпульса при работе от компа. Можно .. Когда исчерпаю другие варианты - проверю .. Придётся спаять некий "переходник" для доступа к контактам. А кстати, DATA и CLK подтягивать резюками к +5в надо? У меня сейчас не подтянуто. Идут непосредственно на процессор.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Feb 25 2014, 08:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143

|
Цитата(hd44780 @ Feb 25 2014, 12:18)  А кстати, DATA и CLK подтягивать резюками к +5в надо? У меня сейчас не подтянуто. Идут непосредственно на процессор. ну я ставил 10 комADD: вот по ссылке тоже указано о необходимости ставить pullup
--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
|
|
|
|
|
Feb 28 2014, 08:18
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
На 95% работает. Инициализация всех мышей проходит нормально, координаты считываются и прочее. Единственная проблема на текущий момент - какие-то баги с определением типа мыши. Есть команда 0xF2 - Get Id - считать типа мыши. Здесь написано, что ответ мыши - 2 байта - подтверждение 0xFA и код типа. А вот здесь утверждается, что ответ - один байт - код типа. Бардак натуральный. Не инициализируется только старая PS2 мыша. Она без колеса, т.е. Standard mouse. Команду 0xF2 она не понимает. С ней ещё не возился. Тут тоже вопрос - как она должна себя вести? Игнорировать команду вообще? Слать ошибку 0xFC? Может она и глючит на этой 0xF2. По ходу выяснил, что заявление о том, что по умолчанию в мыше включён потоковый режим - мягко говоря, неправда. На старых мышах это так. А новые мыши без явной подачи команды 0xEA - включить потоковый режим просто ни фига не шлют. Проверено.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|