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

109 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "💀 Изменение VID/PID и имени устройста Arduino"
date: 2023-04-29T13:26:50+03:00
draft: false
tags: [arduino, hardware, hack, usb, tutorial]
---
Это руководство представляет из себя вольный
[перевод статьи](https://www.shellhacks.com/arduino-change-devices-vid-pid-name/)
с сайта shellhacks.com.
## Введение
Идентификаторы производителей устройств (_VID_)
и идентификаторы продуктов устройств (_PID_) — это 16-разрядные числа,
используемые для идентификации USB-устройств.
По этим номерам компьютер определяет какое USB-устройству подключено к нему
и какие драйверы использовать для работы с ним.
Если планируется разрабатывать какую-нибудь USB-клавиатуру HID на базе Arduino,
то возможно захочеться изменить VID, PID коды и название устройста
на свои, чтобы компьютер или любой другой хост распознавал её как стандартную клавиатуру.
В этой заметке я покажу, как изменить VID/PID и название устройства на базе Arduino
на примере Arduino Pro Micro.
## Изменение VID, PID и имени устройства Arduino
Для просмотра информации о подключенных USB-устройствах
в Linux можно использовать утилиту `lsusb`:
```sh
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` может находиться в нескольких местах, например:
```text
# 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` находился в следующей директории:
```sh
cd ~/.arduino15/packages/SparkFun/hardware/avr/1.1.13/
cp boards.txt boards.txt.orig
vi boards.txt
```
Чтобы подменить VID, PID и имя МК Arduino Pro, я внёс следующие изменения:
```sh
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:
```sh
lsusb
- sample output -
Bus 003 Device 016: ID 046d:c535 Logitech, Inc. Unifying Receiver
```