Blog/content/posts/2023/arduino/change-devices-vid-pid-name.md

4.5 KiB
Raw Permalink Blame History

title date draft tags
💀 Изменение VID/PID и имени устройста Arduino 2023-04-29T13:26:50+03:00 false
arduino
hardware
hack
usb
tutorial

Это руководство представляет из себя вольный перевод статьи с сайта shellhacks.com.

Введение

Идентификаторы производителей устройств (VID) и идентификаторы продуктов устройств (PID) — это 16-разрядные числа, используемые для идентификации USB-устройств.

По этим номерам компьютер определяет какое USB-устройству подключено к нему и какие драйверы использовать для работы с ним.

Если планируется разрабатывать какую-нибудь USB-клавиатуру HID на базе Arduino, то возможно захочеться изменить VID, PID коды и название устройста на свои, чтобы компьютер или любой другой хост распознавал её как стандартную клавиатуру.

В этой заметке я покажу, как изменить VID/PID и название устройства на базе Arduino на примере Arduino Pro Micro.

Изменение VID, PID и имени устройства Arduino

Для просмотра информации о подключенных USB-устройствах в Linux можно использовать утилиту lsusb:

lsusb
- sample output -
Bus 003 Device 008: ID 1b4f:9207 SparkFun SparkFun Pro Micro
  • 1b4f — ID производителя (VID)
  • 9207 — ID продукта (PID)
  • SparkFun — Имя производителя
  • SparkFun Pro Micro — Имя продукта

Чтобы просмотреть USB-устройства в Windows, необходимо нажать клавишу ⊞ Win и найти «Диспетчер устройств» в меню «Пуск».

Каждый раз, когда на Arduino загружается скетч, VID, PID и идентификаторы также загружаются на устройство.

Эти значения определены в файле boards.txt.

Файл boards.txt может находиться в нескольких местах, например:

# Windows
C:\Program Files (x85)\Arduino\hardware\arduino\avr\
C:\Users\<user>\AppData\Local\Arduino15\packages\SparkFun\hardware\avr\<version>\

# Linux
/opt/arduino-<version>/hardware/arduino/avr/
/home/<user>/.arduino15/packages/SparkFun/hardware/avr/<version>/

В моем случае файл boards.txt находился в следующей директории:

cd ~/.arduino15/packages/SparkFun/hardware/avr/1.1.13/
cp boards.txt boards.txt.orig
vi boards.txt

Чтобы подменить VID, PID и имя МК Arduino Pro, я внёс следующие изменения:

diff -Nur boards.txt.orig boards.txt
--- boards.txt.orig 2022-01-17 14:04:41.248786790 +0100
+++ boards.txt  2022-01-17 15:28:07.863530923 +0100
@@ -94,8 +94,9 @@
 promicro.build.core=arduino:arduino
 promicro.build.variant=promicro
 promicro.build.mcu=atmega32u4
-promicro.build.usb_product="SparkFun Pro Micro"
-promicro.build.vid=0x1b4f
+promicro.build.usb_manufacturer="Logitech, Inc."
+promicro.build.usb_product="Unifying Receiver"
+promicro.build.vid=0x046d
 promicro.build.extra_flags={build.usb_flags}
 
 ######################### Pro Micro 3.3V / 8MHz ################################
@@ -115,7 +116,7 @@
 
 promicro.menu.cpu.16MHzatmega32U4.build.pid.0=0x9206
 promicro.menu.cpu.16MHzatmega32U4.build.pid.1=0x9207
-promicro.menu.cpu.16MHzatmega32U4.build.pid=0x9207
+promicro.menu.cpu.16MHzatmega32U4.build.pid=0xc535
 promicro.menu.cpu.16MHzatmega32U4.build.f_cpu=16000000L
 
 promicro.menu.cpu.16MHzatmega32U4.bootloader.extended_fuses=0xCB

Затем, после того как я перезапустил Arduino IDE и загрузил скетч на устройство, МК Arduino Pro была распознана компьютером как стандартная USB-клавиатура Logitech:

lsusb
- sample output -
Bus 003 Device 016: ID 046d:c535 Logitech, Inc. Unifying Receiver