Управление USB от Windows - PullRequest
2 голосов
/ 15 июня 2010

Я знаю, что это, вероятно, не самая простая вещь, но я пытаюсь соединить микроконтроллер и ПК через USB.Я не хочу использовать встроенный USART микроконтроллера или преобразованный USB в RS232, его проект предназначен для того, чтобы помочь мне понять различные принципы.

Итак, установление связи со стороны микроконтроллера - это простоЯ знаю его протокол, его относительно легко реализовать на Micro, потому что я непосредственно контролирую все, даже точное время.

Но это не тот случай, что ПК.Я не очень знаком с концепцией Windows, обращающейся с подключенными устройствами.В одном из моих предыдущих вопросов я спрашиваю о том, как Windows работает с устройствами через драйверы.Я понял, что для внутреннего использования Windows драйверы должны иметь некоторый набор функций по умолчанию, доступных для ОС.Я имею в виду, что когда ОС хочет получить доступ к жесткому диску, она вызывает драйвер жесткого диска (который, вероятно, является внутренним в ОС) с конкретными «вопросами», так что это означает, что драйвер жесткого диска должен быть написан для взаимодействия с Windows, чтобы иметь функцию записи в соответствующемместо для вызова ОС.Что-то похожее на GPU, даже DirectX, я имею в виду, что DirectX должен вызывать определенные функции из драйверов, поэтому драйверы должны быть написаны для работы с DX.Я знаю, что многие функции из WinAPI работают сами по себе, но в конце концов даже «простое» окно должно быть записано в фрейм-буфер, используя MMIO для адресации, указанной драйверами.Я прав?

Итак, я ожидал, что в Windows есть внутренние функции, части WinAPI, предназначенные для работы с некоторыми обычно используемыми вещами.Для вызова разработанных производителем драйверов.Но это, кажется, не совсем верно, потому что Windows не имеет возможности общаться через порт Paralel.Я имею в виду, что в WinAPI нет функции для работы с последовательным портом, но есть функции для работы с жестким диском, графическим процессором и т. Д.

Но теперь наступает момент, когда я очень теряюсь.Итак, я думаю, что Windows должна иметь некоторые встроенные функции для связи через USB, потому что, например, она обрабатывает флэш-память USB.Итак, есть ли какая-либо функция WinAPI, предназначенная для того, чтобы пользователь мог управлять USB через эту функцию, или когда я хочу использовать USB сам, мне нужно самому вызывать нужную функцию USB-драйвера?Поскольку все, что вам нужно отправить на USB-контроллер, это адрес устройства и информация, верно?Я имею в виду, мне не нужно писать никаких новых драйверов, я прав?Просто вызвать функцию WinAPI, если она есть, или напрямую вызвать оригинальный драйвер USB.Есть ли в этом смысл?

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Чтобы упростить свою жизнь и избежать написания собственного драйвера, попробуйте использовать API-интерфейс HID (Human Interface Device) поверх USB. Хотя он говорит «Human Interface», на самом деле он не должен быть для устройств, которые контролирует человек. Преимущество состоит в том, что современные операционные системы уже поставляются с драйвером HID, и вы можете использовать пример кода, такой как то, что вы можете найти здесь , чтобы начать. Многие производители микроконтроллеров предоставляют подходящий код для встроенного протокола.

Поскольку операционные системы уже понимают HID, если вы создадите устройство с использованием интерфейса HID, вы обнаружите, что вы можете не только читать с него из любой операционной системы, но и обнаружить, что многие приложения уже могут общаться с вашим устройством, если его связь ограничено достаточно небольшим подмножеством HID. (Например, я создал устройство ввода для музыкального приложения, но удивительным образом обнаружил, что могу буквально подключить его прямо к 3D-анимационному приложению, которое мы используем на работе, работающему в другой ОС, и заставить его работать сразу, не написав ни единого дополнительная строка кода!)

0 голосов
/ 15 июня 2010

USB включает в себя набор стандартных функций, аналогично поддержке USB-накопителей (класс USB Mass Storage). Двумя наиболее интересными для взаимодействия микроконтроллеров являются HID и CDC. CDC проще всего использовать, поскольку он напрямую эмулирует старомодный последовательный порт.

Если вы сконфигурируете микроконтроллер для работы в качестве устройства CDC, Windows перечислит его как последовательный порт, и все старые последовательные API будут работать на нем.

0 голосов
/ 15 июня 2010

Этот ответ может нацелить вас в правильном направлении.

Первый ответ здесь также может быть полезным.

Theответы на этот содержат некоторый фактический код и ссылки на другие ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...