Перехват данных клавиатуры на микроконтроллере

Недавно я купил коммутационные платы USB-C с разъемами типа «папа» и «мама». Я собираюсь подключить разъем «папа» к клавиатуре, а разъем «мама» к компьютеру с помощью кабеля USB-C и соединить разъемы вместе с помощью макетной платы. Мне было интересно, можно ли с помощью микроконтроллера прочитать нажатия клавиш, передаваемые по линиям D- и D+.

Вот изображение того, как я сейчас настраиваю секционные платы

, 👍1

Обсуждение

Просто предложение: вам, вероятно, следует отредактировать свой вопрос и заменить микроконтроллер на Arduino, чтобы не отклоняться от темы., @st2000

Добро пожаловать в SE/Arduino! Пожалуйста, посетите [тур], чтобы узнать, как работает этот сайт, и прочитайте «[спросить]». -- Не могли бы вы [отредактировать] свой вопрос и уточнить причину, пожалуйста? -- Гораздо проще фиксировать нажатия клавиш в принимающей операционной системе или на клавиатуре перед передачей. USB довольно сложен «по проводу», однако вы можете попробовать то, что делают небольшие логические анализаторы. Обычно для этого используется специальное оборудование, простое устройство, такое как микроконтроллер Arduino, не может этого сделать., @the busybee

Возможно, вы захотите посмотреть [это видео](https://www.youtube.com/watch?v=wdgULBpRoXk). Автор декодирует протокол USB HID вручную, с помощью ручки и бумаги., @Edgar Bonet


1 ответ


1

Было бы намного проще подключить Arduino к старой клавиатуре PS2.

USB — это сложно. Вам нужно будет понять протокол USB, а затем понять Протокол HID (Human Interface Device) внутри протокола USB. Поскольку HID может взаимодействовать с множеством устройств, таких как мыши и клавиатуры, вам, возможно, придется понять клавиатурную часть протокола HID.

Например, коммерческие USB-анализаторы стоят сотни долларов. Этот USB-анализатор стоит около 500 долларов.

Рассматриваете ли вы в качестве альтернативы полностью программный USB-монитор? Обычно они находятся на том же компьютере, к которому подключено USB-устройство. Wireshark должен уметь это делать.

Кроме того, если на клавиатуре используется Pro Micro, рассмотрите возможность добавления кода в его процессор Atmel для отправки активность клавиатуры на неиспользуемом контакте. Этот подход может оказаться намного проще, чем мониторинг клавиатуры после того, как ее данные были включены в протокол USB.

,

Я не хочу вас обескураживать. Я лишь хочу отметить трудности создания USB-интерфейса. Особенно тот, который не является USB-устройством или USB-хостом (т. е. тот, который может отслеживать, но не перечисляет или пытается взять под контроль USB)., @st2000

[Это действительно старая тема, в которой обсуждается USB-сниффер](https://forum.arduino.cc/t/decoding-the-nzri-data-usb-sniffer/55302). Даже тогда (вероятно, в то время существовал только USB 3.0) это считалось действительно сложной задачей., @st2000

ОП не нужен обычный USB-сниффер. только клавиатура, @Juraj

Кстати, вы можете использовать Wireshark для перехвата USB-соединения непосредственно в системе. Его вопрос больше похож на проблему XY. Если у него есть все, что на фото, он мог бы просто запрограммировать это прямо в этот встроенный в клавиатуру MCU (похоже на Pro Micro с USB-C?), @KIIV

@Юрай, я думаю, как только ты начнешь использовать USB для связи, тебе придется купить весь протокол USB. Но, пожалуйста, следите за ссылками на проект, который контролирует только USB/HID/клавиатуру. Мне было бы интересно узнать, как они это сделали!, @st2000

Хорошие моменты @KIIV. Я забыл про Wireshark. И вы правы: Pro Micro должен иметь возможность отслеживать и определять активность клавиатуры намного проще, чем анализировать сигнал USB., @st2000

Итак, я считаю, что есть проекты Arduino с клавиатурой в качестве входных данных, а есть проекты, в которых Arduino является клавиатурой. поэтому этого должно быть достаточно, чтобы скопировать ключи с входа на выход. но конечно с клавиатурой на фото клавиатура уже ардуино., @Juraj

Понятно, я надеялся на простой способ заставить микроконтроллер (например, другой Pro-Micro) считывать вводимые ключи, передаваемые через USB. Кажется, что создание USB-интерфейса сейчас выходит за рамки моей компетенции., @Maxwell

Вы можете попробовать идею @Juraj. Но у вас не может быть 2 клавиатур. Ну, возможно, вы и сможете... но вам не нужны две клавиатуры. Вам нужна одна клавиатура и что-то, что будет слушать. Поэтому вам нужно, чтобы новая клавиатура не перечислялась USB-хостом. Но вам все равно нужно его слушать. Здесь я в неизвестных водах. Это почти похоже на то, что вам нужно, чтобы слушатель действовал как первая клавиатура, за исключением того, что он не может отвечать. Это не только выходит за рамки вашей компетенции, это выходит за рамки большинства наших возможностей!, @st2000

Micro не может быть USB-хостом. Для чтения USB-клавиатуры необходимо использовать USB-хост-экран. но опять же. здесь клавиатура уже ардуино., @Juraj