В спецификациях Raspberry Pi RP2040 указан только один аппаратный интерфейс хоста/устройства USB 1.1, но разработчик Sekigon Gonnoc решил использовать программируемые вводы-выводы (PIO) микроконтроллера, чтобы добавить дополнительный USB-порт, который также работает в режиме хоста или устройства.
Хотя предполагается, что библиотека C все еще находится в стадии разработки, Sekigon реализовал полноскоростной (12 Мбит/с) и низкоскоростной (1,5 Мбит/с) хост, полноскоростное устройство, USB-концентратор и поддержку нескольких портов. Есть даже демонстрация с тремя клавиатурами «Pico Pico USB», действующими как концентраторы USB, и HID, а также беспроводной мышью, чтобы показать результаты.
Реализация использует один PIO для USB-передатчика с использованием 22 инструкций и одного конечного автомата, а другой PIO для USB-приемника с использованием 31 инструкции и двух конечных автоматов, а также один таймер цикла 1 мс для хоста и одно прерывание PIO для приемника.
Вы найдете код для реализации дополнительного USB-порта на микроконтроллере RP2040 через PIO в репозитории Pico-PIO-USB Github, включая два примера:
- Capture_hid_report.c Пример программы хоста USB, которая распечатывает отчеты HID, полученные от устройства.
- usb_device.c Образец устройства HID USB FS, который перемещает курсор мыши каждые 0,5 с.
Еще один более продвинутый образец — прошивка QMK для платы Pico Pico USB. Аппаратная клавиатура, похоже, также разработана Sekigon Gonnoc, но нам не удалось найти о ней никакой информации. Указывается, что ранее была разработана плату Pico Micro RP2040, продаваемая через Booth.pm , «creator market» для японского рынка, который, на наш взгляд, чем-то похож на Tindie, за исключением того, что он также работает для художников.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.