реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F4 и PS/2 мышь
hd44780
сообщение Feb 24 2014, 19:13
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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. Все мыши рабочие. Проверены в компе.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
megajohn
сообщение Feb 24 2014, 19:51
Сообщение #2


Профессионал
*****

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



нынче все PS2-мыши это совмещенные с USB. То есть по сигналам от хоста понимают что им работать в режиме USB или PS/2


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 25 2014, 05:12
Сообщение #3


Профессионал
*****

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



Не скажите.
Я пытался подключать 2 свои USB мыши к компу через переходник на PS/2 - не работают.
Logitech RX250 не в счёт, она изначально с двойным интерфейсом.
Так что, это, по-моему - "территория заблуждений" sm.gif .

Да даже если б и работало, подключить её к USB хосту я не могу, у меня там флэшка.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 25 2014, 07:16
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



не к усб надо подключать, а с мышой договорится что она к пс/2 подключается. А как это делать хрен знает
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 25 2014, 07:26
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 25 2014, 08:07
Сообщение #6


Профессионал
*****

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



Цитата(Golikov A. @ Feb 25 2014, 09:16) *
не к усб надо подключать, а с мышой договорится что она к пс/2 подключается. А как это делать хрен знает

Я пытаюсь работать с мышами, которые изначально имеют PS2 разъём. А что из себя представляют те или иные переходники - пока что совершенно не волнует. 4 провода в них там или какая-то микросхема, переделывающая USB в PS2 - по идее всё равно.



--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
megajohn
сообщение Feb 25 2014, 08:10
Сообщение #7


Профессионал
*****

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



Цитата(hd44780 @ Feb 25 2014, 12:07) *
Я пытаюсь работать с мышами, которые изначально имеют PS2 разъём


в порядке бреда предложу посмотреть частоту синхроимпульса при работе от компа.

то есть интерфейс SD-карт тоже синхронный, но по иннициализации нужно ведь работать на 200кГц


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 25 2014, 08:18
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 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в надо?
У меня сейчас не подтянуто. Идут непосредственно на процессор.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 25 2014, 08:33
Сообщение #9


Гуру
******

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



Цитата(hd44780 @ Feb 25 2014, 10:18) *
Кстати, проверил его оригинальный драйвер на работающей мыше - инициализация проходит только один раз.
Далее лезет тот самый 0xF8.
Значит в этом драйвере ошибка. Надо разобраться как работает интерфейс и найти ее. Возможно на этапе изучения описания интерфейса отпадет вопрос "нужны ли подтяжки".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
megajohn
сообщение Feb 25 2014, 08:42
Сообщение #10


Профессионал
*****

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



Цитата(hd44780 @ Feb 25 2014, 12:18) *
А кстати, DATA и CLK подтягивать резюками к +5в надо?
У меня сейчас не подтянуто. Идут непосредственно на процессор.


ну я ставил 10 ком

ADD: вот по ссылке тоже указано о необходимости ставить pullup


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 25 2014, 12:44
Сообщение #11


Профессионал
*****

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



Цитата(megajohn @ Feb 25 2014, 10:42) *
ADD: вот по ссылке тоже указано о необходимости ставить pullup


Спасибо. Вечером постараюсь добавить их. Тогда отпишусь.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 26 2014, 05:14
Сообщение #12


Профессионал
*****

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



Pull-upы в +5в не помогли sad.gif
Придётся колупаться в протоколе sm.gif ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 28 2014, 08:18
Сообщение #13


Профессионал
*****

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



На 95% работает. Инициализация всех мышей проходит нормально, координаты считываются и прочее.
Единственная проблема на текущий момент - какие-то баги с определением типа мыши.
Есть команда 0xF2 - Get Id - считать типа мыши.

Здесь написано, что ответ мыши - 2 байта - подтверждение 0xFA и код типа.
А вот здесь утверждается, что ответ - один байт - код типа.

Бардак натуральный.
Не инициализируется только старая PS2 мыша. Она без колеса, т.е. Standard mouse. Команду 0xF2 она не понимает. С ней ещё не возился.
Тут тоже вопрос - как она должна себя вести? Игнорировать команду вообще? Слать ошибку 0xFC?
Может она и глючит на этой 0xF2.

По ходу выяснил, что заявление о том, что по умолчанию в мыше включён потоковый режим - мягко говоря, неправда. На старых мышах это так.
А новые мыши без явной подачи команды 0xEA - включить потоковый режим просто ни фига не шлют. Проверено.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 28 2014, 08:57
Сообщение #14


Гуру
******

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



Не, ну так не честно...
Проблема-то в чем была?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
hd44780
сообщение Feb 28 2014, 09:21
Сообщение #15


Профессионал
*****

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



Да в принципе всё просто.
Основной баг немца -для инициации обмена с мышью надо дрыгать и DATA и CLK. Он дрыгал только DATA. А это далеко не на всех мышах пашет.

Чтение неверных кодов из мыши были связаны с "самогенерацией" прерывания по CLK при его дёргании. При этом, естественно, сбивались управляющие переменные и последующий приём байта проходил неверно.
Когда выключил прерывания перед ногодрыгом, бред мгновенно исчез.

Проблема сейчас одна - 0xF2.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016