Устройство с последовательным интерфейсом usb

USB (англ. «Universal Serial Bus» – универсальная последовательная шина) является промышленным стандартом расширения архитектуры IBM PC, ориентированным на интеграцию с телефонией и устройствами бытовой электроники. Спецификация USB 2.0 предусматривает радикальный рост пропускной способности шины. Первоначально (в версиях 1.0 и 1.1) шина обеспечивала две скорости передачи информации: полную скорость (англ. «Full Speed», FS), 12 Мбит/с и низкую скорость (англ. «Low Speed», LS) 1,5 Мбит/с. В версии 2.0 определена еще и высокая скорость (англ. «High Speed», HS) 480 Мбит/с, что позволяет существенно расширить круг устройств, подключаемых к шине. В одной и той же системе могут присутствовать и одновременно работать устройства со всеми тремя скоростями. Шина позволяет с использованием промежуточных хабов соединять устройства, удаленные от компьютера на расстояние до 30 м.

Шина USB представляет собой хост-центрическую аппаратно-программную систему подключения множества периферийных устройств. Хост-центричность понимается в нескольких аспектах:

– хост отвечает за конфигурирование всех устройств;

– хост управляет всеми обменами (транзакциями) на шине;

– обмен информацией возможен только между хостом (его памятью) и устройствами – однорангового взаимодействия устройств шина USB не позволяет.

USB предполагает наличие следующих аппаратных составляющих:

– периферийные устройства USB – выполняют полезные функции;

– хост-контроллер обеспечивает связь шины с ядром компьютера. Хост котроллер объединяется с корневым хабом, организующим точки подключения устройств USB;

– хабы USB обеспечивают дополнительые точки подключения устройств;

– кабели USB соединяют устройства с хабами.

Ниже перечислены компоненты программной части USB:

– клиентское программное обеспечение (ПО) – это драйверы устройств USB, обеспечивающие доступ к устройствам со стороны прикладного ПО. Драйверы взаимодействуют с устройствами только через программный интерфейс с общим драйвером USB;

– драйвер USB – управляет всеми устройствами USB системы, их нумерацией, конфигурированием, предоставлением служб, распределением пропускной способности шины, мощности питания, и т.п.

– драйвер хост-контроллера преобразует запросы ввода-вывода в структуры данных, размещенные в коммуникационной области оперативной памяти, и обращается к регистрам хост-контроллера.

Протокол шины USB обеспечивает обмен данными между хостом и устройством. На протокольном уровне решаются такие задачи, как обеспечение достоверности и надежности передачи, управление потоком. Для достоверности применяется избыточное кодирование. Весь трафик на шине USB передается посредством транзакций, в каждой транзакции возможен обмен только между хостом и адресуемым устройством.

Кабель USB содержит две пары проводов: одну для сигнальных цепей (D+ и D-) и одну для схемной «земли» (GND) и питания +5 В (Vbus). Допустимая длина сегмента (кабеля от устройства до хаба) – до 5 м. Ограничения на длину сегмента диктуются затуханием сигнала и вносимыми задержками.

Физически интерфейс USB может быть организован с использованием пяти различных типов разъемов, в зависимости от области применения.

Высокопроизводительная последовательная шина (англ. «high performance serial bus») IEEE 1394 – FireWire создавалась как более дешевая и удобная альтернатива параллельным шинам (SCSI) для соединения равноранговых устройств. Шина без дополнительной аппаратуры (хабов) обеспечивает связь до 63 устройств. Устройства бытовой электроники – цифровые записывающие видеокамеры, камеры для видеоконференций, фотокамеры, приемники кабельного и спутникового телевидения, цифровые видеоплееры (CD и DVD), акустические системы, цифровые музыкальные инструменты, а также периферийные устройства компьютеров (принтеры, сканеры, устройства дисковой памяти) – и сами компьютеры могут объединяться в единую сеть. Шина не требует управления со стороны компьютера. Шина поддерживает динамическое реконфигурирование – возможность «горячего» подключения и отключения устройств.

Шина позиционируется как основа «домашней сети», объединяющей всю бытовую и компьютерную технику в комплекс. Эта сеть является одноранговой, чем существенно отличается от USB.

Стандарт IEEE 1394 описывает шину с последовательным интерфейсом, по которой информация передается пакетами. Источник пакетов должен получить право передачи пакета, используя механизм арбитража, в котором задействуются все устройства, подключенные к шине. Арбитраж предоставляет узлам право доступа в соответствии с запрошенным типом передачи. Для асинхронных транзакций арбитраж обеспечивает справедливое распределение полосы пропускания для каждого канала. Коллизии в исправной шине отсутствуют. Арбитраж в IEEE 1394 основан на прослушивании шины и определении зазора – покоя шины.

Устройства, подключаемые к шине, имеют один или несколько портов IEEE 1394, объединенных внутренним повторителем. Устройства соединяются друг с другом кабелями (сегментами), при этом допускается большая свобода выбора топологии физических соединений. Стандарт накладывает на топологию следующие ограничения:

– на шине может быть не более 63 узлов;

– между любой парой узлов может быть не более 16 кабельных сегментов;

– длина сегмента стандартного кабеля не должна превышать 4,5 м (в IEEE 1394b для ряда типов кабелей допустима длина до 100 м);

– суммарная длина кабеля не должна превышать 72 м;

– топология не должна иметь петель.

При этом логическая топология для передачи данных остается шинной – пакеты распространяются от источника ко всем узлам шины. Логическая топология для арбитража – древовидная иерархическая, «верховный арбитр» – корневой узел.

В первом варианте физического интерфейса (IEEE 1394 и 1394a) каждое кабельное соединение состоит из двух пар сигнальных электрических проводов и дополнительной пары проводов для подачи питания. Обе сигнальные пары используются для двунаправленной передачи сигналов, дифференциальных и линейных.

Разъемы, используемые в кабельной шине IEEE 1394, специально разработаны для обеспечения «горячего» подключения-отключения. Контакты цепей «земли» и питания длиннее других – они при подключении соединяются раньше, а при отключении разъединяются позже остальных. На портах устанавливаются гнезда, на кабелях – вилки. Экранирующий кожух применяется как дополнительный контакт. Миниатюрные 9-контактные разъемы имеют две различные модификации.

Стандартный 6-проводной кабель 1394 содержит две экранированные витые пары для передачи сигналов (TPA и TPB). Все эти провода помещаются в общий экран. Сигнальные пары проводников соединяются перекрестно.

Для питания узлов постоянным током в кабелях IEEE 1394 предусмотрена отдельная пара проводов – VG (GND) и VP (+) с напряжением 8– 40 В при токе до 1,5 А. Узлы могут быть источниками, потребителями питания или не пользоваться питанием от шины; их отношение к питанию сообщается в пакете самоидентификации.

Конфигурирование шины происходит автоматически при включении питания, по подключению-отключению устройств, по инициативе какого-либо узла. Весь процесс конфигурирования занимает доли секунды. На время сброса и конфигурирования передача полезного трафика останавливается, все ожидающие транзакции сбрасываются. После конфигурирования могут измениться номера узлов.

Шина IEEE 1394 поддерживает два типа передач данных:

– асинхронные передачи без каких-либо требований к скорости и задержке доставки. Целостность данных контролируется CRC-кодом, гарантированную доставку обеспечивает механизм квитирования и повторов;

– изохронные передачи с гарантированной пропускной способностью, но без обеспечения надежной доставки. Изохронные передачи ведутся широковещательно и адресуются через номер канала, передаваемый в каждом пакете. На шине может быть организовано до 64 изохронных каналов, передачи всех каналов «слышат» все устройства шины, но из всех пакетов принимают только данные интересующих их каналов. Целостность данных контролируется CRC-кодом, но квитирование и повторы не применяются.

Вопросы для подготовки

1. Укажите наиболее важные и часто используемые внешние интерфейсы ПЭВМ IBM PC. Для чего они применяются?

Читайте также:  Сколько антенн в телефоне

2. Опишите организацию и программную модель LPT-порта.

3. Опишите принципы организации последовательных интерфейсов RS-232, RS-422, RS 485. Какова область применения каждого из них?

4. Укажите область применения интерфейсов USB и FireWire, а также перспективы их развития.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Да какие ж вы математики, если запаролиться нормально не можете. 8556 – | 7410 – или читать все.

91.146.8.87 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

USB (англ. «Universal Serial Bus» – универсальная последовательная шина) является промышленным стандартом расширения архитектуры IBM PC, ориентированным на интеграцию с телефонией и устройствами бытовой электроники. Спецификация USB 2.0 предусматривает радикальный рост пропускной способности шины. Первоначально (в версиях 1.0 и 1.1) шина обеспечивала две скорости передачи информации: полную скорость (англ. «Full Speed», FS), 12 Мбит/с и низкую скорость (англ. «Low Speed», LS) 1,5 Мбит/с. В версии 2.0 определена еще и высокая скорость (англ. «High Speed», HS) 480 Мбит/с, что позволяет существенно расширить круг устройств, подключаемых к шине. В одной и той же системе могут присутствовать и одновременно работать устройства со всеми тремя скоростями. Шина позволяет с использованием промежуточных хабов соединять устройства, удаленные от компьютера на расстояние до 30 м.

Шина USB представляет собой хост-центрическую аппаратно-программную систему подключения множества периферийных устройств. Хост-центричность понимается в нескольких аспектах:

– хост отвечает за конфигурирование всех устройств;

– хост управляет всеми обменами (транзакциями) на шине;

– обмен информацией возможен только между хостом (его памятью) и устройствами – однорангового взаимодействия устройств шина USB не позволяет.

USB предполагает наличие следующих аппаратных составляющих:

– периферийные устройства USB – выполняют полезные функции;

– хост-контроллер обеспечивает связь шины с ядром компьютера. Хост котроллер объединяется с корневым хабом, организующим точки подключения устройств USB;

– хабы USB обеспечивают дополнительые точки подключения устройств;

– кабели USB соединяют устройства с хабами.

Ниже перечислены компоненты программной части USB:

– клиентское программное обеспечение (ПО) – это драйверы устройств USB, обеспечивающие доступ к устройствам со стороны прикладного ПО. Драйверы взаимодействуют с устройствами только через программный интерфейс с общим драйвером USB;

– драйвер USB – управляет всеми устройствами USB системы, их нумерацией, конфигурированием, предоставлением служб, распределением пропускной способности шины, мощности питания, и т.п.

– драйвер хост-контроллера преобразует запросы ввода-вывода в структуры данных, размещенные в коммуникационной области оперативной памяти, и обращается к регистрам хост-контроллера.

Протокол шины USB обеспечивает обмен данными между хостом и устройством. На протокольном уровне решаются такие задачи, как обеспечение достоверности и надежности передачи, управление потоком. Для достоверности применяется избыточное кодирование. Весь трафик на шине USB передается посредством транзакций, в каждой транзакции возможен обмен только между хостом и адресуемым устройством.

Кабель USB содержит две пары проводов: одну для сигнальных цепей (D+ и D-) и одну для схемной «земли» (GND) и питания +5 В (Vbus). Допустимая длина сегмента (кабеля от устройства до хаба) – до 5 м. Ограничения на длину сегмента диктуются затуханием сигнала и вносимыми задержками.

Физически интерфейс USB может быть организован с использованием пяти различных типов разъемов, в зависимости от области применения.

Высокопроизводительная последовательная шина (англ. «high performance serial bus») IEEE 1394 – FireWire создавалась как более дешевая и удобная альтернатива параллельным шинам (SCSI) для соединения равноранговых устройств. Шина без дополнительной аппаратуры (хабов) обеспечивает связь до 63 устройств. Устройства бытовой электроники – цифровые записывающие видеокамеры, камеры для видеоконференций, фотокамеры, приемники кабельного и спутникового телевидения, цифровые видеоплееры (CD и DVD), акустические системы, цифровые музыкальные инструменты, а также периферийные устройства компьютеров (принтеры, сканеры, устройства дисковой памяти) – и сами компьютеры могут объединяться в единую сеть. Шина не требует управления со стороны компьютера. Шина поддерживает динамическое реконфигурирование – возможность «горячего» подключения и отключения устройств.

Шина позиционируется как основа «домашней сети», объединяющей всю бытовую и компьютерную технику в комплекс. Эта сеть является одноранговой, чем существенно отличается от USB.

Стандарт IEEE 1394 описывает шину с последовательным интерфейсом, по которой информация передается пакетами. Источник пакетов должен получить право передачи пакета, используя механизм арбитража, в котором задействуются все устройства, подключенные к шине. Арбитраж предоставляет узлам право доступа в соответствии с запрошенным типом передачи. Для асинхронных транзакций арбитраж обеспечивает справедливое распределение полосы пропускания для каждого канала. Коллизии в исправной шине отсутствуют. Арбитраж в IEEE 1394 основан на прослушивании шины и определении зазора – покоя шины.

Устройства, подключаемые к шине, имеют один или несколько портов IEEE 1394, объединенных внутренним повторителем. Устройства соединяются друг с другом кабелями (сегментами), при этом допускается большая свобода выбора топологии физических соединений. Стандарт накладывает на топологию следующие ограничения:

– на шине может быть не более 63 узлов;

– между любой парой узлов может быть не более 16 кабельных сегментов;

– длина сегмента стандартного кабеля не должна превышать 4,5 м (в IEEE 1394b для ряда типов кабелей допустима длина до 100 м);

– суммарная длина кабеля не должна превышать 72 м;

– топология не должна иметь петель.

При этом логическая топология для передачи данных остается шинной – пакеты распространяются от источника ко всем узлам шины. Логическая топология для арбитража – древовидная иерархическая, «верховный арбитр» – корневой узел.

В первом варианте физического интерфейса (IEEE 1394 и 1394a) каждое кабельное соединение состоит из двух пар сигнальных электрических проводов и дополнительной пары проводов для подачи питания. Обе сигнальные пары используются для двунаправленной передачи сигналов, дифференциальных и линейных.

Разъемы, используемые в кабельной шине IEEE 1394, специально разработаны для обеспечения «горячего» подключения-отключения. Контакты цепей «земли» и питания длиннее других – они при подключении соединяются раньше, а при отключении разъединяются позже остальных. На портах устанавливаются гнезда, на кабелях – вилки. Экранирующий кожух применяется как дополнительный контакт. Миниатюрные 9-контактные разъемы имеют две различные модификации.

Стандартный 6-проводной кабель 1394 содержит две экранированные витые пары для передачи сигналов (TPA и TPB). Все эти провода помещаются в общий экран. Сигнальные пары проводников соединяются перекрестно.

Для питания узлов постоянным током в кабелях IEEE 1394 предусмотрена отдельная пара проводов – VG (GND) и VP (+) с напряжением 8– 40 В при токе до 1,5 А. Узлы могут быть источниками, потребителями питания или не пользоваться питанием от шины; их отношение к питанию сообщается в пакете самоидентификации.

Конфигурирование шины происходит автоматически при включении питания, по подключению-отключению устройств, по инициативе какого-либо узла. Весь процесс конфигурирования занимает доли секунды. На время сброса и конфигурирования передача полезного трафика останавливается, все ожидающие транзакции сбрасываются. После конфигурирования могут измениться номера узлов.

Читайте также:  Marvell 91xx config scsi processor device

Шина IEEE 1394 поддерживает два типа передач данных:

– асинхронные передачи без каких-либо требований к скорости и задержке доставки. Целостность данных контролируется CRC-кодом, гарантированную доставку обеспечивает механизм квитирования и повторов;

– изохронные передачи с гарантированной пропускной способностью, но без обеспечения надежной доставки. Изохронные передачи ведутся широковещательно и адресуются через номер канала, передаваемый в каждом пакете. На шине может быть организовано до 64 изохронных каналов, передачи всех каналов «слышат» все устройства шины, но из всех пакетов принимают только данные интересующих их каналов. Целостность данных контролируется CRC-кодом, но квитирование и повторы не применяются.

Вопросы для подготовки

1. Укажите наиболее важные и часто используемые внешние интерфейсы ПЭВМ IBM PC. Для чего они применяются?

2. Опишите организацию и программную модель LPT-порта.

3. Опишите принципы организации последовательных интерфейсов RS-232, RS-422, RS 485. Какова область применения каждого из них?

4. Укажите область применения интерфейсов USB и FireWire, а также перспективы их развития.

Не нашли то, что искали? Воспользуйтесь поиском:

USB устройство как последовательный порт (и USB ScratchBoard)

  • Печать
  • E-mail

Подробности Категория: Проекты Altera Quartus II для платы Марсоход Создано 25 Декабрь 2010 Автор: Николай Ковач Просмотров: 28070

Вот пришла мне такая мысль в голову.
Хотелось бы сделать наш сайт интересным даже детям. хотелось бы заинтересовать их электроникой, программированием, робототехникой!

Конечно, программирование ПЛИС – не очень простая задача, но может это им и не нужно? Есть замечательная среда программирования для детей – это Scratch . Эта среда программирования может использоваться со специальными ScratchBoard платами и к ним можно подключить датчики и моторчик.

Я уже писал раньше про Scratch. Более того, у меня даже был проект для платы Марсоход – ее можно было подключить к компьютеру как ScratchBoard . Правда был у того проекта недостаток – плата подключалась через последовательный порт. Поэтому кроме платы Марсоход нужно было еше паять дополнительную платку преобразователь уровней для RS232 – ведь последовательный порт компьютера использует уровни сигналов +12В и -12В. Кроме того, сейчас уже не у каждого компьютера есть последовательный порт. Поэтому иногда нужен еще кабель USB-Serial. В общем не очень просто.

Вот поэтому я подумал – нужно сделать новый проект для платы Марсоход.
Я сделал такую "прошивку", что теперь плата Марсоход работает как USB устройство, распознается компьютером как "последовательный порт" и посылает компьютеру данные в формате Scratch ! Все стало гораздо проще! Четыре кнопочки платы Марсоход действуют как датчики сопротивление-А, сопротивление-B, сопротивление-C, сопротивление-D в программе Scratch . Значения эти датчики правда дают не аналоговые я только 0 и 100. Моторчик коллекторный, небольшой мощности (ведь у нас все питается от USB) подключается к пинам F3 и F4.

Вот посмотрите: на языке Scratch "пишем" вот такую простую программу:

Смысл этой программы очень простой – моторчик включается, когда срабатывает датчик света. К ноутбуку или компьютеру через USB подключаем нашу плату Марсоход (прошитую моим новым проектом), к плате моторчик и опто-транзистор – это датчик света. Смотрим как это работает:

Конечно это только простой пример использования. Ну а дальше я думаю ваша фантазия и фантазия ваших детей. Творите и программируйте!

Дальше я расскажу о самой "прошивке" для платы Марсоход. Проект довольно сложный, но в принципе, те кто заинтересуются могут просто, не разбираясь в тонкостях проекта ПЛИС, один раз зашить плату и использовать ее как ScratchBoard .

Итак. Что нам нужно?
Исходная отправная точка – USB проект, уже опубликованный ранее на нашем сайте. К плате Марсоход нужно припаять кварцевый генератор на 24Мгц. Этот генератор нам нужен для стабильной работы устройства.

В нашем USB устройстве все дескрипторы USB записаны во встроенной флеш памяти ПЛИС EPM240T100C5 на плате Марсоход. Именно эти дескрипторы определяют тип или класс, к которому принадлежит устройство. Когда устройство USB подключается к компьютеру, то операционная система читает дескрипторы из устройства и определяет какой драйвер загружать. Таким образом, нам нужно записать во флеш "правильные" дескрипторы, которые описывают устройство как последовательный порт. Если мы правильно зададим все дескрипторы и сделаем поведение нашего устройства "стандартным", то нам даже не придется писать драйвер к нашему устройству – операционная система использует уже имеющийся у нее набор драйверов (хотелось бы верить).

Вообще-то существует специальный документ (на английском языке) – спецификация USB для коммуникационных устройств. Я положил этот документ в раздел для загрузки на нашем сайте:

Вы можете выкачать его и почитать. В нем все довольно подробно расписано (на английском), но, к сожалению, мало что понятно

Попробую дать некоторые пояснения.

Когда устройство подключено к порту USB компьютера, то первое, что делает операционная система компьютера – читает из устройства так называемый DeviceDescriptor – описатель устройства. Структура DeviceDescriptor, если описывать на языке С выглядит вот так:

// USB Standard Device Descriptor
unsigned char usb_device_descriptor[] = <
0x12, // bLength
USB_DEVICE_DESCRIPTOR_TYPE, // bDescriptorType = 1
0x10,
0x01, // bcdUSB = 1.10
0x02, // bDevice >
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
0x08, // bMaxPacketSize0
0xFB,
0x09, // >
0xA6,
0x60, // >
0x00,
0x01, // bcdDevice = 1.00
1, // Index of string descriptor describing manufacturer
2, // Index of string descriptor describing product
0, // Index of string descriptor describing the device’s serial number
0x01 // bNumConfigurations
>;

Мы делаем свое USB устройство и должны запулнить эту структуру. Нужно обязательно заполнить следующие поля:

  • idVendor – я пишу 0x09FB, это id компании Альтера (надеюсь они меня не побьют? ведь id по правилам я должен купить у USB.ORG за большие деньги, а я использую чужой, компании Альтера)
  • idProduct – берем с потолка, но помним, что у одного производителя все "продукты" пронумерованы, то есть на самом деле мы не можем взять число, уже использующееся компанией Альтера.
  • bDeviceClass – ставим число 2, это будет значить устройство типа COM порта, модема и т.д, тоесть коммуникационное устройство Communication Class Device
  • bMaxPacketSize0 – ставим 8, это обычная длина пакета для низко-скоростных устройств.

Вот у нас есть структура DeviceDescriptor длиной 18 байт. Мне нужно расположить ее во флеш микросхемы CPLD платы Марсоход по некоторому адресу. Но не все так просто. Дело в том, что USB транзакции сами по себе происходят за несколько довольно мудреных шагов, передача идет пакетами данных не более 8 байт и защищены контрольными суммами.

Поскольку мое USB устройство весьма примитивно, то я хочу во флеш разместить уже готовые пакеты, со всеми дополнительными байтами типа SYN, PID, CRC (зараннее посчитанные). Вот я это и сделал – содержимое флеш в чипе CPLD описывается файлом c с расширением *.mif (memory initialization file). Вот его фрагмент, который описывает DeviceDescriptor:

— Descriptor Device
0080 : 4B8D; — SYN&Len, PID
0081 : 0112; — Data..
0082 : 0110;
0083 : 0002;
0084 : 0800;
0085 : CF10; — CRC16
0086 : 0000;
0087 : 0000;

Читайте также:  Мощный и недорогой ноутбук для работы

0088 : C38D; — SYN&Len, PID
0089 : 09FB; — Data
008A : 60A6;
008B : 0100;
008C : 0201;
008D : 5C21; — CRC16
008E : 0000;
008F : 0000;

0090 : 4B87; — SYN&Len, PID
0091 : 0100; — Data
0092 : 8F3F; — CRC16
0093 : 0000;

Так, DeviceDescriptor будет прочитан за 3 передачи, две по 8 байт данных и одна короткая 2 байта данных.

Вообще, чтобы ощутить всю "прелесть" и "замороченность" USB протокола можете скачать программу USB анализатора с сайта http://www.ellisys.com/products/usbex260/download.php Эта программа к аппаратному анализатору USB протокола – это такая коробочка, которая ставится между исследуемым устройством и компьютером и записывает весь USB трафик между ними. Конечно, у вас такой коробочки нет, но, запустив программу анализатора, вы сможете посмотреть уже записанные примеры для устройств разных классов и вы сможете посмотреть какие пакеты там ходят.

Добавлю, что у меня есть этот анализатор, что делает разработку USB устройств гораздо проще и удобнее.

Кроме DeviceDescriptor еще очень нужный описатель – это ConfigurationDescriptor. Он описывает как операционная система должна обращаться с устройством, какие у устройства есть Endpoints – каналы передачи данных, их тип и так далее. Вот эти дескрипторы особенно сложны для понимания Особенно для класса CDC (Communication Device Class) – так я по правде мало что понимаю здесь. Ну вот привожу его как есть (я посмотрел множество разных примеров реализации CDC устройств и сделал свое подобное):

UCHAR usb_configuration_descriptor[] = <
/*Configuation Descriptor*/
0x09 , /* bLength: Configuation Descriptor size */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
VIRTUAL_COM_PORT_SIZE_CONFIG_DESC, /* wTotalLength:no of returned bytes */
0x00,
0x02, /* bNumInterfaces: 2 interface */
0x01, /* bConfigurationValue: Configuration value */
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
0x80, /* bmAttributes: self powered */
0x32, /* MaxPower 0 mA */
/*Interface Descriptor*/
0x09, /* bLength: Interface Descriptor size */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */
/* Interface descriptor type */
0x00, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
0x01, /* bNumEndpoints: One endpoints used */
0x02, /* bInterfaceClass: Communication Interface Class */
0x02, /* bInterfaceSubClass: Abstract Control Model */
0x01, /* bInterfaceProtocol: Common AT commands */
0x00, /* iInterface: */
/*Header Functional Descriptor*/
0x05, /* bLength: Endpoint Descriptor size */
0x24, /* bDescriptorType: CS_INTERFACE */
0x00, /* bDescriptorSubtype: Header Func Desc */
0x10, /* bcdCDC: spec release number */
0x01,
/*Call Managment Functional Descriptor*/
0x05, /* bFunctionLength */
0x24, /* bDescriptorType: CS_INTERFACE */
0x01, /* bDescriptorSubtype: Call Management Func Desc */
0x03, /* bmCapabilities: D0+D1 */
0x01, /* bDataInterface: 1 */
/*ACM Functional Descriptor*/
0x04, /* bFunctionLength */
0x24, /* bDescriptorType: CS_INTERFACE */
0x02, /* bDescriptorSubtype: Abstract Control Management desc */
0x0f, /* bmCapabilities */
/*Union Functional Descriptor*/
0x05, /* bFunctionLength */
0x24, /* bDescriptorType: CS_INTERFACE */
0x06, /* bDescriptorSubtype: Union func desc */
0x00, /* bMasterInterface: Communication class interface */
0x01, /* bSlaveInterface0: Data Class Interface */
/*Endpoint Descriptor*/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
0x82, /* bEndpointAddress: (IN2) */
0x03, /* bmAttributes: Interrupt */
VIRTUAL_COM_PORT_INT_SIZE, /* wMaxPacketSize: */
0x00,
0x20, /* bInterval: */
/*Data class interface descriptor*/
0x09, /* bLength: Endpoint Descriptor size */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */
0x01, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
0x02, /* bNumEndpoints: Two endpoints used */
0x0A, /* bInterfaceClass: CDC */
0x00, /* bInterfaceSubClass: */
0x00, /* bInterfaceProtocol: */
0x00, /* iInterface: */
/*Endpoint Descriptor*/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
0x03, /* bEndpointAddress: (OUT3)*/
0x02, /* bmAttributes: Bulk */
VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */
0x00,
0x00, /* bInterval: ignore for Bulk transfer */
/*Endpoint Descriptor*/
0x07, /* bLength: Endpoint Descriptor size */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
0x83, /* bEndpointAddress: (IN3)*/
0x02, /* bmAttributes: Bulk */
VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */
0x00,
0x00 /* bInterval: ignore for Bulk transfer */
>;

Этот описатель ОС читает после назначения устройству USB адреса. Конечно, эта структура тоже будет вписана специальным образом во флеш чипа CPLD.

Я написал программу на зыке С (Microsoft Visual Studio) которая формирует из этих структур те, что мне нужны в *.mif файле. Программа есть в архиве. Она разбивает длинные дескрипторы на пакеты USB, считает контрольные суммы пакетов и т.д. В общем остается только взять и вставить в *.mif файл.

Проект для платы Марсоход, INF файлы для установки драйверов, программу для формирования mif файла из дескрипторов можно взять здесь.

Сам проект я сделал довольно быстро. У меня уже был проект, который я взял за основу. Я только поменял модуль ls_usb_core.v (ведь теперь должен обрабатывать целых 3 Endpoints и посылать данные в формате Scratch ) и поменял mif файл, где теперь хранятся новые описатели USB пакетов.

Сказать по правде больше всего времени, почти неделю, я потерял на. драйвера.

Вообще-то сколько я примеров смотрел (как правило они реализованы на микроконтроллерах AVR), обычно люди говорят, что с драйверами никаких проблем нет, так как используются родные драйвера Windows. Для ОС Windows нужно только подсунуть некий *.INF файл описывающий CDC устройство, и в нем должна быть прописаны строки типа

[Devices]
%DESCRIPTION% = DriverInstall, USBVID_09FB&PID_60A6

Здесь VID_09FB – это наш id производителя, а PID_60A6 – это id устройства.

Так же в INF файле есть ссылка на драйвер Microsoft USBSER.SYS – именно он поддерживает Communication класс:

Вот я взял, сделал INF файл, подсунул своему Windows XP SP2 и – заработало! Уррра!

К сожалению я рано радовался. Всякие мои попытки запустить мое устройство на Windows 7 32bit оказывались безуспешними. Windows 7 мне говорил, что устройство не может быть запущено (ошибка 10). Уж чего я только не пробовал – не помогает и все. Однако, я нашел японский (!) сайт, где написано как бороться с этой проблемой. Там Osamu Tamura предлагает свой драйвер "фильтра", который и решает проблему. Вот я воспользовался этим драйвером и теперь работает и под Windows 7! Конечно, его INF файл я исправил, поставив мои idVendor и idProduct.

Вот теперь можно считать работу почти законченной. Поэтому я и выкладываю этот проект на всеобщее обозрение:

Что касается проблемы драйверов – я думаю проблема в том, что мое устройство низко-скоростное и по каким-то причинам Windows 7 считает, что оно по этому не может быть класса Communication. Эта версия нуждается в проверке. Может быть новую версию устройства я позже сделаю high-speed, посмотрим..

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector