Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F4 и PS/2 мышь
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
hd44780
Сейчас пользуюсь драйвером немца - http://mikrocontroller.bplaced.net/word ... age_id=744
Один "странный" косяк я исправил - если мышь не понимает команду 0xF2 (идентификация мыши) он тупо вываливается с ошибкой, хотя весь дальнейший алгоритм прекрасно понимает оба типа мыши (стандартная и Intellimouse).

Но обнаружилась странная вещь - на старых мышах он работает, а на большинстве новых - нет.
Есть 2 мыши Logitech RX250, одна белая, 2-я чёрная. Белая работает достаточно стабильно, хоть и не без приколов, Чёрная - труп трупом. Кроме фэн-шуя в голову ничего не приходит..
Уже 3 дня читаю разные мануалы, примеры кода под авры и прочее - по фиг. Если надо, дам все ссылки и свой код.
Всё чего удалось добиться - команды нормально передаются в мышь. На драйвере немца мышь вообще не генерит синхронизацию. Он вначале притягивает к земле только данные, а синхру - нет.

Дальше странности - многие команды дают либо код ошибки 0xFC, либо какой-то недокументированный код - 0xF8.
Даже команда сброса 0xFF корректно отрабатывает только один раз, в ответ на все остальные летит некий бред типа 0xF8.

Вопрос - кто-нибудь работал с мышей, каковы результаты и есть ли у кого нормальный драйвер?

Спасибо.

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

Да даже если б и работало, подключить её к USB хосту я не могу, у меня там флэшка.
Golikov A.
не к усб надо подключать, а с мышой договорится что она к пс/2 подключается. А как это делать хрен знает
Сергей Борщ
Работал с мышами когда-то очень давно, все забыл.
Цитата(hd44780 @ Feb 24 2014, 21:13) *
либо код ошибки 0xFC, либо какой-то недокументированный код - 0xF8.

Код 0xF8 очень похож на 0xFC сдвинутый на один бит влево. Возможно какая-то проблема в синхронизации? Не по тому фронту читаете? Дребезг на фронтах захватываете? В общем я бы вывел принимаемый бит на свободную ногу порта, зарядил в цикле команду сброса и осциллографом сравнивал все три сигнала (такт, данные и принятые данные) с учебником.
hd44780
Цитата(Golikov A. @ Feb 25 2014, 09:16) *
не к усб надо подключать, а с мышой договорится что она к пс/2 подключается. А как это делать хрен знает

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

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


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

то есть интерфейс SD-карт тоже синхронный, но по иннициализации нужно ведь работать на 200кГц
hd44780
Цитата(Сергей Борщ @ 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в надо?
У меня сейчас не подтянуто. Идут непосредственно на процессор.
Сергей Борщ
Цитата(hd44780 @ Feb 25 2014, 10:18) *
Кстати, проверил его оригинальный драйвер на работающей мыше - инициализация проходит только один раз.
Далее лезет тот самый 0xF8.
Значит в этом драйвере ошибка. Надо разобраться как работает интерфейс и найти ее. Возможно на этапе изучения описания интерфейса отпадет вопрос "нужны ли подтяжки".
megajohn
Цитата(hd44780 @ Feb 25 2014, 12:18) *
А кстати, DATA и CLK подтягивать резюками к +5в надо?
У меня сейчас не подтянуто. Идут непосредственно на процессор.


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

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


Спасибо. Вечером постараюсь добавить их. Тогда отпишусь.
hd44780
Pull-upы в +5в не помогли sad.gif
Придётся колупаться в протоколе sm.gif ...
hd44780
На 95% работает. Инициализация всех мышей проходит нормально, координаты считываются и прочее.
Единственная проблема на текущий момент - какие-то баги с определением типа мыши.
Есть команда 0xF2 - Get Id - считать типа мыши.

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

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

По ходу выяснил, что заявление о том, что по умолчанию в мыше включён потоковый режим - мягко говоря, неправда. На старых мышах это так.
А новые мыши без явной подачи команды 0xEA - включить потоковый режим просто ни фига не шлют. Проверено.
Сергей Борщ
Не, ну так не честно...
Проблема-то в чем была?
hd44780
Да в принципе всё просто.
Основной баг немца -для инициации обмена с мышью надо дрыгать и DATA и CLK. Он дрыгал только DATA. А это далеко не на всех мышах пашет.

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

Проблема сейчас одна - 0xF2.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.