@tkirsan4ik

Как подключить джойстик по USB к arduino через USB-HOST на чипе 376S?

Добрый день, уважаемые знатоки!
Уже второй день бьюсь над проблемой по подключению USB-джойстка к arduino.
Компоненты:
ARDUINO UNO на MEGA328P
USB-host на CH376S
Джойстк универсальный (Defender, вот такой: defender.ru/catalog/139/1452 )
Скорость порта: 9600
Задача: читать коды нажатия кнопок с этого джойстика (или любого другого, требуется только оси узнать и 4 основных кнопки).
По данному usb-host`у нашел только один мануал. Но это работа с флешкой. Как с ней работать я разобрался. Остался только вопрос, как получить данные от джойстика.

Я в этом деле полный новичок и даже не знаю с чего начать.

Откуда я могу узнать hex-коды, для инициализации и работы с USB-host (как в функциях в примере с флешкой)? Возможно ли вообще на данном usb-host реализовать мою задачу? Какими средствами пользоваться и что почитать (из официального описания чипа ch376s я практически не понял как ту информацию можно применить к arduino)?

Я уже понял, что для этого очень хорошо подходит (и много уже написанного кода) официальный USB-Host-Shield, но его у меня, к сожалению, нет.
Очень жду Вашей помощи!
  • Вопрос задан
  • 2528 просмотров
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
Джойстик это USB-HID устройство. Для работы с ним нужно получить его HID дескриптор, но перед этим надо опросить его как USB устройство и получить его входные и выходные ноды, затем опросить как HID получив дескриптор, построить по дискриптору формат пакетов. Затем обрабатывать каждый отправленный пакет с нужной ноды по заданному формату.
Вам надо разобраться как работает сам USB на низком уровне и как работает HID. Я как то смотрел как работает джойстик на Arduino Leonardo.
Грубо говоря надо сказать джойстику что все ок и он может слать данные, а затем парсить эти данные.
Возможно это вам поможет - тут подготовленные команды обмена и опроса:
https://gist.github.com/project-pp/3307da0145d515c...
Ответ написан
Комментировать
@esaulenka
Кажется мне, этот способ собрать все возможные грабли.
Документация на CH376 выглядит неидеально, вторую часть PDF'ки я вообще на английском языке не нашёл. Можно попробовать переписать официальный пример (см. ссылку выше) в ардуино-стиль но делать это, боюсь, придётся самостоятельно.
Требуемые навыки - знание наизусть USB in Nutshell. Дополнительное железо - простенький логический анализатор (чтобы сравнивать посылки этого поделия и нормальной операционки).

Вариант 2 - какой-нибудь более толстый контроллер с USB-хостом. Там хотя бы документация подробнее и есть примеры от производителя "как подключить USB-мышку". Другой вопрос, что USB-хост в STM32 отличается повышенной своеобразностью (и если их пример не взлетит, ковыряться там долго...). USB-хост в NXP LPC43xx хотя бы стандартный EHCI (но где недорого добыть отладочную плату, я понятия не имею).
Требования к дополнительному железу и дополнительным знаниям не снимаются, но есть хотя бы живые люди у которых это работает.

Вариант 3. Выкинуть это всё добро нафиг, купить самую дешёвую raspberri и радоваться жизни. USB стек там написан давно и написан хорошо. Дополнительные знания - умение писать скрипт вида "опросить /dev/что-то-там, подрыгать /dev/лампочка".
SYNC'и, ACK'и, PID'ы с низкого уровня USB перестают являться по ночам.

Вариант X. Я плохо знаю, что такое плейстейшн, но в Вашем джойстике заявлен некий интерфейс для неё. Фанаты подключают его к LPT (было такое в XX веке). 100% задачка для ардуины, если я ничего не напутал.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы