UPDATE: Есть сдвиги, народ!! У меня вопрос к тому, кто реализовывал устройство, способное взаимодействовать с USB. Например писал для микроконтроллера такую программу, чтобы он через две своих ноги мог общаться с USB устройствами или хостами. В общем какова сложность физической реализации протокола по ощущениям, недосыпу, недоеду? Мне НАДО сделать устройство, которое было бы USB-девайсом, способным обмениваться данными с любой виндой. Какое же принять рещения - писать два драйвера - NT и Win9x или под всеми виндами есть Api соответствующее? Если окажется, что под всеми виндами есть API, которое позволяет обойтись без драйвера, то у меня будет больше времени на создание металла, а не софта для компа.
на этом ww.ineltek.ru ресурсе есть статья "Рекомендации по переходу с RS-232 на USB", не смотря на название она тебе очень поможет. Если у тебя что-то законченное получится, если это не представляет коммерческой ценности - поделись.
Ничего не понял. Сделать всю реализацию низкоуровневой USB самому или запрограммировать микроконтроллер который уже поддерживает USB? У них обоих вся работа с USB идет только через 2 ноги ну и обвязку соответствующую Я сам пытался делать первое и успешно делал второе. Сложность протокола шины умеренная (хотя от у-ва зависит, можно и наворотить такого...). За 2 месяца я почти с нуля освоил большинство премудростей этой шины. Из нюансов можно отметить, что корневой хаб игнорирует некорректные пакеты, кроме того их нельзя "поймать" на нем программно, поэтому отладку вел запоминающим осцилографом. Когда вел отладку под windows выяснил, что она не точно соблюдает протокол начальной идентификации (опрос идет 2 раза и windows игнорирует доп. дескрипторы в описателе у-ва). Никакого "стандартного" API для работы с USB нет (за исключением сырой посылки и приема разных пакетов). Если Ваше у-во будет принадлежать к какому-либо классу (HID, Mass Storage, etc.) - то Вы сможете использовать "красивое" api высокоуровневого драйвера, если нет - придется написать этот высокоуровневый драйвер самому. Впрочем, в драйверах для windows я не силен, т.к. сам писал драйвер под embedded linux (это еще веселее, как я понял)...
Nothing Ну как это ты ничего не понял - я же написал "через две ноги" но при этом о поддержке контроллером USB не писал. Откуды ты взял про поддержку USB в контроллере? Правильно - придумал. Контроллеры такие есть, я о том, что ты придумал, что я в сообщении писал про поддержку USB. Я пишу просто про две ноги простейшего контроллера, который не знает, что такое USB. Что значит "сырая посылка и прием пакетов"? Блин, чувак, ты под кайфом там чтоли?
FastSoft Если я что-то не так понял - можно спокойно объяснить. А не писать что я что-то там сам придумал. "Сырая посылка и прием" означает что в системе (windows начиная с 95 osr2) есть api для выдачи пакетов в линию и приема их с последующей обработке другими драйверами. Это и есть все доступное низкоуровневое api. Блин, чувак, ты под кайфом там чтоли? А вам не кажется что хамить невежливо? Вам не нужны мои ответы - больше отвечать не буду. Могли бы и повежливей об этом сообщить... И впредь попрошу на вы.
FastSoft сам что-то принимает. наверняка. хамить некрасиво. 2Nothing у меня тот же вопрос (почти). в образовательных целях начал копать стандарт USB, начал смотреть USB in nutshell и прочее. одно пока не дает покоя и не пускает дальше. я дилетант и необразованный в плане электроники (опять же почти): как при своей частоте в 10..20МГц чип работает с перепадами уровней на этих, блин, 2-х ногах при частоте, пусть, 1.5МГц (USB 1.1)
Nothing Извините, стиль не подошел. Разные на этом форуме стили применяются, в основном - такой неформальный, на котором я по дефолту с вами и законнектился. Извините, очень мне неприятно, что так вышло. Работаю я над созданием девайса, уже выполненного мной на микроконтроллере Atmega128 у которого нет поддержки USB. Хочу забрать пару ног под USB, реализовав его программно. Передавать немного и небыстро, лишь бы это был истинный USB ( 1.1 хотя-бы ). Второй вопрос с которым мне надо разобраться - с меня требуют понимания моего устройства виндами 98 и XP. Как с быть тут? Можно ли написать универсальный драйвер для этих операционных систем? Если что - писать буду на фасме. Не в этом дело. Фопросы пока философские, с английским у меня все нормально, с электроникой я дружу, но usb.org несмотря на это после моего первого взора невзрулил. Скачал все, что там дают скачать, получилось много, но все это "не рулит". Вот пока и все новости. Насчет секретности - проект секретный, но USB-шная часть не будет представлять собой какого-то секрета и ее я выложу, если что-то получится. Мое мыло: Borlandmaster@mail.ru - три года назад любил так си
Ты не ответил на вопрос "...Ваше у-во будет принадлежать к какому-либо классу (HID, Mass Storage, etc.)" ?
FastSoft Извините, стиль не подошел. Разные на этом форуме стили применяются, в основном - такой неформальный Вы уж чересчур с неформальностью переборщили. Спокойнее надо все обсуждать, без нападок и оскроблений. Я не против неформального общения (форум все-таки, а не светский раут), но не таким же тоном... Ладно, извинения принимаются. По поводу usb. Я начинал свою реализацию с того, что написал "слушалку" фреймов (а потом и декодер пакетов). Если контроллер хилый, лучше поставить простенький аппаратный NRZ-кодер/декодер - сильно сэкономит время, иначе придется опрашивать вход с оверсэмплингом в 10-16 раз, чтобы точно определить старт фрейма и дальнейшие отдельные биты, но мой мне позволял действовать в лоб. Если с железом разбираетесь - то надо соорудить обвязку для дифференциальных входов/выходов usb с программируемой утяжкой к питанию и к земле (чтобы корректно на состояния шины откликаться, хотя бы на idle и connect). Обвязка там не совсем простая и зависит от вашего контроллера. Понимаю, что все это общие слова, но вопросы у вам тоже достаточно общие. Все зависит от вашей задачи, может вам, например, ФАПЧ понадобится для подстройки, а может и нет... После того как физический уровень приема освоите, можно попытаться что-то ответить в линию. Ну формат всех пакетов известен, сложности там только с времянкой могут быть, но опять же если котроллер мощный - может получиться. Я сам до посылки пакетов так и не дошел, измучился с этим делом, и решил использовать готовый дешевый контроллер со встроенным usb. Ну в про windows это отдельная песня. Разберитесь сначала с usb на контроллере и если выдержите все мучения и реализуете минимальную подержку - то тогда драйвера вам покажутся просто развлечением... Atremy У чипов со встроенной поддержкой есть, например, NRZI-декодеры и вся "грязная" скоростная работа на физическом уровне ложится на них. Обычно в сам контроллер только поступают декодированные данные (сырые), где он сам уже вырезает битстаффинг, разбирает их на пакеты и т.д. Управление шиной тоже сделано аппаратно и не отнимает ресурсов. А реальные данные-то идут достаточно медленно - для их обработки мощные контроллеры не нужны... Ну согласитесь, странный вопрос: ведь чтобы, например, выдать звук частотой 20Кгц можно 20000 раз в секунду щелкать ногами конроллера, а можно включить генератор и все
задумка была изначально USB реализовать на кр1878ве1, а в нем, сами понимаете, встроенная поддержка только арифметических операций. и логических ) микропроект этот помер (времени сейчас нет). хотя желание разобраться в сабже осталось. за любые ссылки в сторону USB была бы принародно объявлена благодарность ) /*---*/ c NRZI вроде разобрался. давно еще. вот после этого и возник вопрос. как же это железка успевает делать "грязную" скоростную работу при условии отсутствия 'built-in support'. и вроде есть такие схемы на pic'ах. если без аппаратной поддержки совсем никак - подскажите, выкину эту идею из головы и сэкономлю время/деньги.
как же это железка успевает делать "грязную" скоростную работу при условии отсутствия 'built-in support'. Ну так сложного-то там ничего нет. Да и шина не такая уж и скоростная, тем более что многие чипы не поддерживают самую сложную изохронную передачу. Короче говоря, при нынешних способах разработки аппаратную поддержку usb можно сделать хоть на ПЛИС, было бы желание. А младшие pic'и плохо поддерживают usb (зато дешевые), например 16c7x5 - только передачу по прерываниям (8 байт в 1 мсек - ну что за скорость скажите!)... если без аппаратной поддержки совсем никак - подскажите, выкину эту идею из головы и сэкономлю время/деньги. Это вам решать. Я в итоге выкинул эту идею и сделал нормальное usb на чипе с аппаратной поддержкой. Достаточно дешево и сэкономил кучу времени. А повозиться с шиной живьем - это занятие на любителя, раньше (лет 5-7 назад) когда чипы были редки, а usb - экзотикой, еще можно было бы самому с нуля что-то делать, а сейчас не вижу смысла...
Да, Nothing, смысла похоже нет. Надо поискать у Atmel USB-шные микросхемы. Что такое NRZI я не знаю, надо покурить доков. В итоге лучше было бы к моей плате через интерфейс "две ноги" подрубить другую плату с USB-передатчиком/приемником. Все-таки, когда я доберусь до Windows - можно ли написать универсальный драйвер моего USB-девайса для win9x и XP? Если выяснится, что можно использовать только XP, то в ней ведь есть дрова разных-там-всяких флешек. Что если мое устройство будет вести себя как флешка с файлом 123.TXT из которого можно будет читать мои данные. Ну да, не все так просто - там ведь файловая система, на этой влешке, контролируемая осью. И еще вопрос - никто не знает, что имеется ввиду под "драйвером LPT-порта под XP", который якобы позоляет работать простым программам с LPT из под винды XP, где он закрыт для обычных программ, по причине того, что это стратегически-важный принтерный порт? Что этот драйвер добавляет новые API или как-то отрубает защиту в винде?
Есть библиотечка inpout32.dll для работы с LPT из под NT (под 98 тоже работает). Экспортирует всего 2е функции- Inp32 и Out32. Я использовал (на свое времени не было), работает нормально, хотя скорость не проверял.
Знать бы еще, что такое "библиотека" и что такое "экспортирует". А можно этот DLL подулючить к фасмовой программе, чтобы из нее вызывать эти две функции?
"библиотека" это и есть dll dinamic link library подрулить довольно просто используя push offset dllname call LoadLibrary push offset funcname push eax call GetProcAddress mov [funcaddress],eax ... дальше где надо call [funcaddress] ну или что-то в этом духе насчёт синтаксиса fasm не уверен , что всё правильно
>я же написал "через две ноги" но при этом о поддержке контроллером USB не писал. Из этой оперы, и к тому ж для avr: http://rifer.narod.ru/usblcd.html
letopisecх! Это самая ссыльная ссылка в моей жизни! СЛушайте, а ведь реально все это работает у них.. Скачал я исходнЯк, посмотрел - тыща строк где-то (я про AVR-ную сторону). Какие-то струкруты.. Не пойму - они через UART сделали USB-интерфейс? А какой бук лучше курить? И по таймингам да пожелезу, как я понял, лучше курить USB.ORG ? Да.. Под винду я писать не спец - всего одну прогу в жизни на фасме написал с MessageBox. Где бы почитать еще о хорошем таком, упитанном кодинге под винду на фасм? Можно на англисйком.