Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
1

[РЕШЕНО] STM32F4 и PS/2 мышь

23.02.2014, 23:55. Просмотров 4867. Ответов 4
Метки нет (Все метки)

Сейчас пользуюсь драйвером немца - http://mykrosontroller.bplosid.net/word ... age_id=744
Один "странный" косяк я исправил - если мышь не понимает команду 0xF2 (идентификация мыши) он тупо вываливается с ошибкой, хотя весь дальнейший алгоритм прекрасно понимает оба типа мыши (стандартная и Intellimouse).

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

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

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

Спасибо.
PS. Все мыши рабочие. Проверены в компе.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 23:55
Ответы с готовыми решениями:

STM32F4+внешний генератор (решено)
Плата при включении не запускается от внешнего генератора, вижу это по...

[решено]usart на stm32f4-discovery
портирую rtems на сабжевую платку. накидал драйвер pottyng усарта, консолька...

[Решено] STM32F4 приём CAN сообщений
На F4Dyscovery принимаю CAN сообщения. Иногда часть сообщений пропускаю....

STM32F4 + EXTI0 завсисание [РЕШЕНО]
Собственно я уже устал искать ошибку. Суть проблемы следующая: Кнопкой на...

[Решено] STM32F4 и CAN сообщения (приём)
Добрый день. Собираю на контроллере STM32F407Dyscovery сниффер CAN шины....

4
pvo125
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 1
06.02.2016, 08:35 2
Прошло 2 года с твоей темы и вот я созрел до мыши тоже. В общем все печально. Думал за день все получится и жестко обломался.Неделя уже прошла но так и нет нормального результата. Контроллер 429 использую выводы как GPIO (PB7 - clk PB6-data).Оба вывода в режиме open drain с внутренней подтяжкой к 3 вольтам. На PB7 еще используется контроллер EXTI для регистрации спада на тактовом. Сначала делал чтоб еще и в прерывание уходил по спаду такта (EXTI9_5_IRQHomdler) но потом совсем запутался так как даже отправка не шла нормально. Затем сделал просто чтоб проверялся флаг
while(!(EXTI->PR&EXTI_PR_PR7)) {} и далее выставление на data нужного бита. С этим вроде разобрался отправка байта стала уходить верно. Но проблема в том что мышь постоянно отвечает только одним байтом. Те на FF приходит ответ не FA AA 00 а просто FE или FC. Единственная команда которая более менее часто выполняется успешно это set default F6.
Пробовал переводить мышь в remote mode и читать командой EB но ничего. Саму команду перехода (F0) мышь иногда воспринимает и отвечает FA но вот команду чтения ни разу верно не ответила и опять же самое главное что в ответ присылает один байт хотя должна один на подтверждение и 3 в ответ. Конечно может если мышь нормально будет воспринимать команды ответом FA то и в ответ начнет слать по 3 байта. Но пока у меня не получается.
Не понятно почему некоторые команды выполняются успешно а на другие все время вместо подтверждения приходят ошибочные байты.
Может как то связано с режимом отладки. Я запускаю в отладчике проект и после инициализации системы начинаю слать команды мышки. Если ошибки то заново перезапускаю отладчиком проц и по новой шлю.
Еще один сомнительный вопрос. В моих мышках (в 3 ) стоит контроллер PAW3401 и он работает от 5 вольт хотя логические уровни для data и clock находятся ниже и выше 2 вольт.
Так же читал статьи про мышки и было сказано что мышь при 3 вольт работает стабильно.
Не совсем понятно со схемотехникой. Если я сделаю выводы stm просто open drain затем подтяну их резисторами по 10к к 5 вольтам и запитаю мыщь от 5 вольт. то как быть с диодами которые подключены к портам контроллера. Или может оставить подтяжку внутренними к 3 вольтам а запитать мышь от 5 вольт?

Подскажите пожалуйста кто знает. Буду рад любой идее!

Подскажите пожалуйста
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
06.02.2016, 12:23 3
Привет.
К F4x9 я PS2 мыши не подключал, хотя мне кажется, что всё будет также, как и на F407, на котором я это делал.

Что касается F407, то те проблемы давным-давно удалось побороть, и у меня и у знакомого, который пустил драйвер, так сказать, в серию и пока не жаловался.

Я уже с трудом припоминаю все нюансы, но основные моменты следующие:
1. Схемотехника:
а) Питание мыши 5в, как и положено.
б) обе интерфейсные ноги мыши подключать в лоб к процу. У него все ноги 5в toterant, ничего не погорит.
в) никакие pull-up резисторы не нужны вообще. Я видел их во многих схемах и на STM32, и на AVR, но у меня с этими резисторами вообще не работало ничего, более того, переставали работать даже те мыши, которые без них прекрасно работали. Почему - не знаю :)
2. Драйвер немца. При всём объёме работы, которую он сделал, написав данный драйвер, он там достаточно серъёзно накосячил либо просто поленился. По PS2 протоколу, если хост хочет передать байт в мышь, он должен дрыгать обеими ногами. Немец дрыгает только одной ногой. По моим наблюдениям, процентов 90 мышей такого обращения не понимают и, соответственно, ничего не пашет. Хотя у меня есть одна Kimius мыша, которая нормально работает с немецким оригиналом и его одноногим дрыганьем.

Конфиги ног проца сами посмотрите в моём драйвере :) Деталей не помню, тем более, что сам PS/2 протокол полудуплексный и ноги кое-где периодически переконфигурируются.
В завершение прилагаю мой работающий на F407 драйвер. По сути - тот же драйвер немца, только немного починенный :) .

Подключение мыши:
PA3 - DATA
PA4 - CLK

Ответы мыши я практически не анализировал, нужды не было, т.к. когда я сделал 2-ногое дрыганье как положено по протоколу, всё нормально заработало

PS.
Драйвер на SPL, если религия не позволяет, можете не смотреть :).

[6.89 Кб]
0
pvo125
0 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 1
06.02.2016, 20:10 4
Спасибо большое за развернутый ответ!!! Пока еще детально не смотрел Ваш драйвер. Я когда написал сегодня про свои проблемы нашел у себя ошибку (надо было раньше спросить). Я до конца не понимал про четность числа и бит четности. Я считал что если число четное но бит parity ставится в 1 если не четное то в 0. Где то даже код видел что проверяют остаток от деления на 2. А оказалось что это количество единичных битов в числе. Отсюда и такие глюки что число 0xFF само по себе не четное но число единиц 8 значит бит parity надо ставить. Ну и так далее у меня проходили команды 0xF6 0xF0 но не 0xEB 0xFF 0xF2.
Короче исправил мышь стала правильно отвечать и подтверждать команды. Теперь хотел спросить как Вы ее использовали в GUI(если использовали). У меня был настроен тачскрин и раз 30 в секунду запускал чтения данных с него. Здесь же я так понял можно читать по команде или в стрим моде просто мышь будет гнать данные как только будет перемещение или нажатие кнопок. Как лучше сделать? Попытался просто перевести мышь в ремот моде и в прерывании от таймера где раньше читал координаты тача там же запускать чтение с мыши. Но что то с ходу не вышло. Зависает на принятии одного из трех байт. А мышь в ответ пишет не 0xFA а 0xE8.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
06.02.2016, 22:16 5
Рад, что получилось.

Смысл бита чётности прост - сделать так, чтобы кол-во единиц в посылке (с учётом этого бита) было чётным.
Несколько простых примеров из википедии:
Число 10111101 содержит 6 1 битов. Бит чётности будет 0, получаем кодовое слово 101111010.
Число 01110011 содержит 5 1 битов. Бит чётности будет 1, получаем кодовое слово 011100111.
Число 00000000 содержит 0 1 битов. Бит чётности будет 0, получаем кодовое слово 000000000.
Никакого отношения к чётности самого числа, как Вы уже поняли, этот бит не имеет.
Основная и единственная цель этого бита - примитивный контроль целостности данных.

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

Почему систик - хз, такова концепция STemWin - крутить фоновые задачи в систике. На моё ИМХО это фигня полная, ну да ладно....
Варианты с разновсякими там FriiRTOS я не анализировал и не использовал.

Сколько раз в секунду это делается - данному алгоритму совершенно всё равно, т.к. он просто перегоняет переменные драйвера в гуй. И всё. Больше ничего от него не требуется. На форумах читал, что период опроса должен быть не более 10 мс (иначе будут заметны рывки в движении курсора). Но лично подтвердить/опровергнуть это я не могу.
Лирическое отступление - Вы можете брать координаты откуда угодно. Гую всё равно. У нас с товарищем в итоге получились одновременно мышь, ИК пульт и тач. Делали туда ещё клавиатуру, но по ряду причин (не относящихся к гую) отказались.

Посмотрите пример - http://rusfolder.com/44361151
Это стандартное STemWin Dimo с PS/2 мышью. Тача никого нет. Период перегонки координат в гуй - 1мс (просто частота прерываний систика без каких-либо пересчётов).
Если чего будет непонятно - спрашивайте.
0
06.02.2016, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2016, 22:16

[РЕШЕНО]STM32F4 и BackUp SRAM
Не могу заставить stm32f429 сохранять данные в домене BackUp SROM, который 4кб...

[РЕШЕНО] STM32F4 HardFault и CooCox
Добрый вечер! Как найти причину HordFault в STM32F4? Среда отладки CooCox

[решено]stm32f4 ethernet phy вопросы
прицепил физику KSZ8051. пытаюсь завести пример с сайта стм -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru