Перехват данных клавиатуры на микроконтроллере
Недавно я купил коммутационные платы USB-C с разъемами типа «папа» и «мама». Я собираюсь подключить разъем «папа» к клавиатуре, а разъем «мама» к компьютеру с помощью кабеля USB-C и соединить разъемы вместе с помощью макетной платы. Мне было интересно, можно ли с помощью микроконтроллера прочитать нажатия клавиш, передаваемые по линиям D- и D+.
Вот изображение того, как я сейчас настраиваю секционные платы
@Maxwell, 👍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
- Как преобразовать USB в PS/2?
- Можно ли создать устройство IP-to-USB HID (клавиатуру) с помощью Arduino?
- Keyboard.print() пропускает клавиши
- Разбудить компьютер из Uno
- STM32 в качестве клавиатуры
- Считать клавиши с обычной USB-клавиатуры
- Эмуляция клавиатуры
- Кнопка и поворотная ручка для отправки нажатия клавиши на ПК
Просто предложение: вам, вероятно, следует отредактировать свой вопрос и заменить микроконтроллер на Arduino, чтобы не отклоняться от темы., @st2000
Добро пожаловать в SE/Arduino! Пожалуйста, посетите [тур], чтобы узнать, как работает этот сайт, и прочитайте «[спросить]». -- Не могли бы вы [отредактировать] свой вопрос и уточнить причину, пожалуйста? -- Гораздо проще фиксировать нажатия клавиш в принимающей операционной системе или на клавиатуре перед передачей. USB довольно сложен «по проводу», однако вы можете попробовать то, что делают небольшие логические анализаторы. Обычно для этого используется специальное оборудование, простое устройство, такое как микроконтроллер Arduino, не может этого сделать., @the busybee
Возможно, вы захотите посмотреть [это видео](https://www.youtube.com/watch?v=wdgULBpRoXk). Автор декодирует протокол USB HID вручную, с помощью ручки и бумаги., @Edgar Bonet