| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Драйвер USB устройства |
| Автор: PILOT 21.5.2005, 14:31 |
| Кто-нить может объяснить как написать драйверок к устройству (собранному мною на контроллере) под WinXP? Вопрос очень общий, но честно говоря я не знаю ничего об этом кроме того что: 1) это делается в DDK (на базе примеров) 2) это делается на С 3) представляю себе USB аппаратно СУВ. ЗЫ. До сих пор я знаю только одного человека который сделал это и оно работало. Но к сожалению он теперь в другом городе.... |
| Автор: En_t_end 21.5.2005, 18:33 |
| Если в инете нет конкретно по USB, то теория создания драверов под COM есть точно, почитай-подумай. ИМХО Ведь основная черта USB - это высокоскоростной канал и надежность + хорошая запитка электронного приложения. Если я не ошибаюсь, то принцип везде один - обработка прерываний - а это по сути примитивнейшая вещь. Но все равно х.з. |
| Автор: cardinal 21.5.2005, 22:07 | ||
Я тоже. 1. Что за устройство? Совсем низкоскоростное или хотя бы несколько Kb/Sec? Со стороны микроконтроллера что-то реализовано или еще нет ничего? Реализовано программно или стоит отдельный USB контроллер? USB 1.1 или USB 2.0? Если USB 2.0, то low, full или high speed? 2. По какому протоколу с ним надо общаться? Bulk или Isochronous? Когда объяснишь, тогда можно будет чего-то посоветовать. С приветом |
| Автор: PILOT 21.5.2005, 22:56 |
| Ага!!! Итак, есть AVR с USB интерфейсом (т.е. все в одном ,раньше пробовал на USBN9603, но проект замяли, теперь делаю на AVR). Скорость full (12Mb, т.е. 1.1). В принципе Isochronous не нужен (слишком быстрой реакции не требуется), требуется передавать около 300байт от контроллера в компьютер раз 20 в секунду. СУВ. |
| Автор: cardinal 22.5.2005, 01:48 |
| Вот последующий ответ sergeeff'a (кстати он пару раз на форуме кое-что поспрашивал http://forum.vingrad.ru/index.php?showtopic=20027 http://forum.vingrad.ru/index.php?showtopic=1062 и понял что ему никто из присутствующих помочь не может, форумом с того времени он не пользовался): Порядок действий таков. 1. Необходимо, чтобы твой AVR полностью обеспечил стандартный протокол USB в соответствии с главой 9. Если ты зайдешь на www.usb.org там есть специальная тестовая программа, которая обеспечивает тестирование твоего устройства. Тонкости этого тестирования - на твоем компере должен быть hi-speed USB2.0 hub. Если его нет, надо ставить карту с hi-speed USB. И в нее втыкать внешний hi-speed USB hub, а уже в него твое устройство. 2. Дальше берешь DDK для XP (лучше последний sp1). Там в разделе примеров в wdm есть образцы драйверов для USB. Выбираешь тот, который bulk. 3. В DDK есть срециальная программа, которая генерит уникальный GUID. Сгенери с ее помощью себе этот длиннющий номер. Этот номер вставишь в DDK'ашный пример драйвера. Там он прописан через define. 4. Генеришь драйвер обычным образом. 5. Берешь образец inf файла для USB. В нем подправляешь GUID и прописываешь те же VID и PID, которые прописаны в device descriptor твоего AVR USB. 6. Если твое железо работает правильно, то при его подключении к комперу сработает механизм PNP и компер потребует указать откуда установить драйвер. Всякие красивые штучки типа USB Monitor что-то полезное показывают, только если система подцепляет правильно твое устройство. Теперь остается разобраться с тем, как написать стандартные вызовы типа CteateFile, ReadFile, WriteFile и CloseFile. Это в Inet'e можно разыскать, хотя это делается несовсем тривиально. Тогда сможешь читать-писать туда-сюда. Ну вот и все. Успехов. Я в этом деле полный лох и лично ничего подсказать не могу. Ты это... Успехов! |
| Автор: PILOT 22.5.2005, 11:00 |
| Спасибо. Значится так: 1) скачал: USBCV R1.2.1 (only for hi-speed USB hubs) действительно требует именно высокоскоростной хаб. 2) DDK есть только для 2000. На сайте Microsoft DDK для XP не нашел. Или его на горбушке купить проще? 3) Это понял. 4) Вот видимо с этим пунктом придется еще позадавать вопросы, когда появится DDK. 5) inf файл нужно создавать для каждого устройства USB? Т.е. писать драйвер для каждого устройства USB с соотв. inf файлом? с CreateFile WriteFile ReadFile видимо несколько позже придется возиться. Главное чтобы под Delphi можно было это делать, т.к. я на С пишу только для контроллеров. СУВ. |
| Автор: bel_nikita 22.5.2005, 11:30 |
| PILOT Есть пример, драйвера USB устройства (Bulk). Не знаю, поможет или нет, но могу скинуть. http://club.shelek.com/viewfiles.php?id=2 |
| Автор: cardinal 22.5.2005, 14:45 | ||||||
Пойдет и 2000.
Да. Но на самом деле там только PID, VID и GUID поменять надо. Ну и прописать название своей фирмы (твой ник
Ну и тут писать это громко сказано. Там только GUID соответствующий подставить надо и имя .sys файла поменять. А насчет Delphi - это все стандартные функции открытия файла поэтому без разницы. Кое что из описанного можно сделать по другому, но у меня не дошли до этого руки Это был не я. |
| Автор: cardinal 22.5.2005, 17:05 | ||
Нет, стоп! Этот DDK не пойдет. Нужен XP'шный! |
| Автор: PILOT 23.5.2005, 00:22 |
| Скачал DDK, скачал тестовые программы для USB. Не могу узнать максимальную скорость USB (т.е. поддерживает ли моя плата hi-speed) в спецификации на материнку написано USB 2.0, но не факт что hi-speed. Теперь я так думаю нужна ссылка (информация) по форматам передачи, по последовательности выполняемых операций при включении устройства (последовательности запросов-ответов). СУВ. |
| Автор: cardinal 23.5.2005, 00:43 |
| Ну, помоему, на www.usb.org вся остальная инфа должны быть... Или тут например: http://www.usb.org/developers/usbfaq/ |
| Автор: PILOT 23.5.2005, 01:00 |
| Узнал. Hi-speed (400 c лишним Мб\с) присутствует... это радует. Использую микросхему AT43USB355. Скачал спецификации (пока на 1.1, чтобы не знать лишнего о 2.0). Вспоминаю что к чему... СУВ. |
| Автор: ManiaK 29.5.2005, 23:41 |
| PILOT а можно полюбопытствовать, что сподвигло на такой подвиг? Раз ты говоришь, что тебе скорость большая не нужна, то почему не обойтись простым 232-ым?.. Сам полгода назад подумывал над подобной заварухой, но решил, что незачем пока что. |
| Автор: PILOT 30.5.2005, 00:04 |
| RS-232 отсутствует в ноутбуках. СУВ. |
| Автор: ManiaK 30.5.2005, 07:15 | ||
ВО-как! Странно, но у нас личности ходят с ноутбукам по производствам, в том числе и мои программы на них работают... |
| Автор: PILOT 30.5.2005, 07:17 |
| Ну может только на старых ноутах. Потому что на новых бывает и нет. А использование FTDI хоть и привлекает своей простотой но требует установки стороннего драйвера. Да и стоимость около 10-11 долларов тоже не нравится. СУВ. |
| Автор: Guest 15.6.2005, 16:41 |
| Видимо старый ноутбук. В последних в основном нет ни КОМ пи ЛПТ, есть толеко несколько ЮСБ ну и выход на моник, сетевуха модемем и блютус. |
| Автор: PILOT 15.6.2005, 20:49 | ||
А я как сказал? СУВ. |
| Автор: Cheshuya 1.7.2005, 12:39 |
| получил роотовый хаб с помощью QueryDosDevice USB#ROOT_HUB#4&293b228e&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8} Подскажите как его подставить в CreateFile Спасибо. |