Подключение к ПК устройств на базе DSP по шине USB 2.0
Появившийся в 2000 году стандарт USB 2.0 позволяет использовать шину USB для связи ПК с высокоскоростными системами сбора, обработки и хранения информации. В статье проводится анализ возможных способов подключения по шине USB устройств на базе DSP и описывается вариант решения этой задачи с использованием контроллера ISP1581 фирмы Philips Semiconductors.
Устройства сбора и обработки информации, подключаемые к персональным и промышленным компьютерам, постоянно развиваются и усложняются вслед за ростом возможностей компьютеров, системного и прикладного программного обеспечения. При этом речь идет не только о развитии функциональной части этих устройств. Рост требований ко всему устройству вызывает рост требований и к интерфейсу. Наблюдая за изменениями интерфейсной части, обеспечивающей связь устройства с компьютером, мы также видим лавинообразное нарастание сложности.
В настоящей статье авторами делается попытка анализа тенденций изменения интерфейса внешних устройств, а также предлагается эффективное схемотехническое решение, позволяющее разработчику выполнить на современном уровне задачу подключения устройств сбора и обработки информации к компьютеру.
Проблема усложнения интерфейсной части внешних устройств во многом определяется переходом с ОС типа CPM или MS-DOS на OC типа Windows или Linux. Современные ОС обеспечивают программисту и пользователю возможность адекватной работы с сетевыми ресурсами, мощные графические средства, безопасность многозадачного подхода к программированию. Но за эти и другие ставшие привычными удобства приходится расплачиваться утратой способности пользовательской программы обрабатывать сигналы в реальном времени. Даже на уровне драйвера ядра такие возможности сильно ограничены, не говоря уже о неоправданном возрастании сложности, а значит и стоимости программирования при перенесении функциональности прикладной задачи на уровень ядра ОС.
Эти обстоятельства привели к тому, что любое современное внешнее устройство, предназначенное для связи с реальным миром, в интерфейсной части содержит средства обработки и буферизации данных. Часто в качестве такого средства выступает цифровой сигнальный процессор (DSP), как дешевая реализация мощного вычислителя со встроенными интерфейсными средствами. Причем надо отметить, что в последнее время суть понятия «DSP» в ряде случаев сливается с содержанием термина «микроконтроллер», поскольку многие типы целочисленных DSP ориентированы на применение в типичных «микроконтроллерных» задачах. В то же время современные 32-разрядные микроконтроллеры, как правило, имеют некоторые архитектурные особенности, присущие DSP.
Еще одна важная причина усложнения интерфейсной части внешних устройств заключается в том, что конкурентоспособность изделия в огромной степени зависит от удобства его применения конечным потребителем. Последнее десятилетие в развитии методов подключения устройств к компьютерам наблюдается четкая тенденция к упрощению действий пользователя, необходимых для аппаратного и программного встраивания той или иной «периферии» в вычислительную систему. Сегодня кажется совершенно естественным, что при наращивании функциональности компьютера новой аппаратурой не требуются разборка его корпуса, выключение питания, перезагрузка ОС. Конечно, эти пользовательские удобства не обходятся даром разработчику периферийного оборудования.
В последнее время для подключения к ПК систем сбора и обработки информации широко используется шина USB — Universal Serial Bus. Первый стандарт шины USB 1.0 появился в 1996 году и обеспечивал скорость передачи данных до 12 Мбит/с (Full Speed USB). В 2000 году утвержден новый стандарт — USB 2.0 (Hi-Speed USB), позволяющий передавать данные со скоростью до 480 Мбит/с. Шина USB получила широкое распространение, портами USB оснащаются практически все современные ПК и ноутбуки.
Главное преимущество шины USB (особенно по сравнению с шинами PCI и ISA) — легкость подключения и отключения устройств. Для подключения нового устройства не нужно выключать питание компьютера и разбирать корпус ПК, не нужно настраивать прерывания и каналы DMA. Стандарт USB предоставляет пользователям реальную возможность работать с периферийными устройствами в режиме реального Plug & Play. Это означает, что стандартом USB предусмотрено «горячее» подключение устройства к работающему компьютеру, автоматическое его распознавание немедленно после подключения и последующая загрузка операционной системой соответствующих данному устройству драйверов.
Кроме того, стандарт USB предусматривает питание устройств непосредственно от шины USB, то есть позволяет в большинстве случаев обойтись без внешнего источника питания (в отличие от систем, подключенных к ПК через порт LPT или COM).
Особенно удобным оказывается использование шины USB при построении мобильных измерительных комплексов на базе ноутбуков, а также автономных (работающих без ПК) систем сбора, обработки и хранения информации, в которых USB используется для скачивания накопившихся данных.
Для программиста написание драйвера под USB-устройство представляется сравнительно несложной задачей. Это объясняется тем, что на низком программном уровне обслуживанием USB-устройств занимается ядро ОС (точнее говоря — входящие в него драйверы хост-контроллера и шины USB). Все низкоуровневые операции, включая буферизацию данных, определение очередности посылки пакетов данных и т. д., выполняются именно ядром ОС. А драйвер USB-устройства, по сути, должен только корректно транслировать на высоком уровне необходимые операции ядру ОС. При написании драйвера за основу можно взять штатные примеры, предоставляемые производителями ОС (например, пакет Driver Development Kit фирмы Microsoft).
Более сложной проблемой представляется разработка именно «железа» для устройства USB.
Если переход от интерфейса ISA на PCI в свое время был облегчен появлением микросхем «мостов», которые при правильном применении гарантировали преобразование PCI в шину, похожую на ISA, то переход на использование USB 1.0/1.1 вместо порта COM или LPT был сравнительно более трудоемкой задачей. Но, в конце концов, появились разнообразные микросхемы USB-интерфейсов, не требующие программирования, а аппаратный интерфейс на доступных для USB 1.0/1.1 скоростях передачи данных источником проблем не является.
Переход на использование USB 2.0 выглядит более сложной задачей. В основном это связано с тем, что USB 2.0 составляет конкуренцию не только традиционным «внешним» интерфейсам, но и внутренним, типа PCI, IDE, а также скоростному внутреннему или внешнему SCSI. Это значит, что от USB 2.0 требуется высокая пропускная способность, а в ряде случаев и достаточно сложная функциональность по управлению процессом передачи данных. Это требует реализации довольно сложных алгоритмов управления шиной USB. Кроме того, необходимы продуманные аппаратные решения для передачи данных со скоростями до 50 Мбайт/с, что требует применения быстрых ПЛИС или использования таких механизмов, как DMA, двухпортовая память и т. д. К этому прибавляются типичные конструктивные трудности, связанные с разработкой устройств, работающих на высоких частотах.
На первый взгляд, при создании подключаемой по USB системы сбора и обработки информации на базе DSP самый простой путь — использовать DSP со встроенным контроллером USB. Такие микросхемы уже выпускаются ведущими производителями: например, процессоры TMS320VC5509 от Texas Instruments и ADSP-BF535 от Analog Devices. Однако, по мнению авторов, такой подход имеет ряд недостатков.
Во-первых, существующие на данный момент встроенные USB-контроллеры по своим скоростным характеристикам совместимы только со стандартом Full Speed (12 Мбит/с), то есть применение подобных DSP не позволит в полной мере воспользоваться всеми возможностями высокоскоростной шины USB 2.0. Появление DSP со встроенным полноценным Hi-Speed USB-контроллером — дело, наверное, не очень далекого, но все-таки будущего.
Во-вторых, для управления встроенным USB-контроллером необходимо задействовать существенную часть ресурсов самого DSP. Процессор, помимо выполнения своих основных задач по сбору и обработке информации, должен постоянно «отвлекаться» на реализацию довольно сложного алгоритма управления своим USB-контроллером.
Кроме того, реализация такой схемы работы требует от программиста DSP детального изучения протокола USB.
В-третьих, зачастую перед разработчиком стоит задача не создания с нуля USB-устройства на базе DSP, а модернизации уже имеющегося решения. Например, перевод некоего уже давно отлаженного и успешно эксплуатировавшегося устройства с COM-порта на шину USB. В этом случае переход на новый тип DSP со встроенным USB-контроллером может повлечь за собой не только значительные схемотехнические доработки, но и, что самое важное, потребует полностью изменить программу DSP, которая помимо выполнения своих прежних задач должна будет управлять встроенным USB-контроллером. Внесение серьезных изменений в давно отлаженную программу, как известно, может сильно усложнить и затянуть процесс разработки. Кроме того, существуют устройства, использующие конкретный тип DSP, в которых смена типа DSP невозможна в принципе.
Проведенный выше анализ показал, что подключение устройств на базе DSP к современной скоростной шине USB 2.0 представляет собой довольно трудоемкую задачу. Приведем один из возможных вариантов решения этой задачи, основанный на следующих основных положениях.
Как было показано, применение DSP со встроенным контроллером USB в большинстве случаев оказывается нецелесообразным, поэтому авторы считают более предпочтительным решение с использованием контроллера USB на отдельной микросхеме.
В последнее время на рынке появились высокоскоростные контроллеры, поддерживающие стандарт USB 2.0, такие как ISP1581 фирмы Philips Semiconductors, NET2270 фирмы NetChip Technology, CY7C68013 фирмы Cypress Semiconductors и др. Такое решение хотя и кажется несколько более сложным, но, как будет показано ниже, обеспечивает гибкость подключения устройств к USB и удобство управления ими.
После проведенного анализа внешних контроллеров наиболее подходящим авторам показался контроллер ISP1581 фирмы Philips. Помимо того, что его функциональные возможности полностью соответствуют поставленной задаче, выяснилось, что эта микросхема наиболее доступна на российском рынке.
Основные возможности контроллера ISP1581:
- полная совместимость со стандартом USB 2.0;
- резервный режим — полная совместимость со стандартом USB 1.1;
- автоматическое распознавание Hi-Speed порта ПК;
- совместимость с требованиями по управлению питанием ACPI, OnNow, USB;
- встроенные SIE (Serial Interface Engine), приемопередатчик и стабилизатор 3,3 В;
- высокоскоростной DMA-интерфейс;
- 7 входных и 7 выходных конечных точек (endpoint) с двойной буферизацией для увеличения пропускной способности;
- встроенная конфигурируемая память FIFO емкостью 8 кбайт;
- программное подсоединение к шине USB (SoftConnect);
- низкочастотный кварцевый осциллятор (12 МГц) с интегрированным PLL для обеспечения ЭМС;
- внутренняя цепь сброса;
- питание от 5 и от 3,3 В (при этом все входы-выходы толерантны к напряжению 5 В);
- миниатюрный корпус LQFP64 —10^10^1,4 мм.
Алгоритм управления шиной USB достаточно сложен, поэтому для его реализации необходим микропроцессор, управляющий контроллером USB. Некоторые контроллеры (например, CY7C68013 фирмы Cypress) для этих целей имеют встроенное процессорное ядро.
Контроллер ISP1581 не имеет встроенного процессорного ядра (что положительно сказалось на цене микросхемы), поэтому для управления контроллером необходим внешний микропроцессор. Это обстоятельство упрощает процесс разработки устройства, так как разработчику не нужно вникать в тонкости программирования встроенного ядра, он может использовать практически любой удобный для себя микропроцессор.
Например, авторами был накоплен большой опыт работы с семейством AVR фирмы Atmel, и поэтому контроллер ISP1581 был подключен к хорошо знакомому авторам процессору Atmega8515-16AI.
Далее перед разработчиком встает основная задача: как обеспечить скоростную передачу данных между DSP и контроллером ISP1581? Рассмотрим решение этой задачи на примере некоего устройства на базе сигнального процессора ADSP-2185M фирмы Analog Devices, поскольку этот процессор является типичным представителем широко распространенного семейства ADSP-21ХХ.
Данный процессор имеет 16-разрядный Internal DMA (IDMA) Host Port для скоростного доступа к внутренней памяти DSP со стороны внешних устройств. Основное преимущество IDMA-порта — доступ к памяти осуществляется без вмешательства DSP и без остановки его работы, то есть процессор выполняет свою программу и «не знает», что в это время какое-то внешнее устройство читает данные из его памяти или пишет данные в его память. Еще одно преимущество IDMA-порта — автоматический инкремент адреса после каждой операции чтения-записи. Например, для того, чтобы вычитать из памяти DSP массив данных, внешнему устройству достаточно перед считыванием один раз выставить адрес начала массива и произвести нужное количество операций чтения — после каждой операции адрес автоматически увеличивается на единицу, и при следующей операции вычитывается следующая ячейка памяти DSP.
С другой стороны, контроллер ISP1581 имеет высокоскоростной 16-разрядный DMA-интерфейс, который может функционировать как в режиме Slave, так и в режиме Master — то есть контроллер ISP1581 может сам управлять передачей данных. Таким образом, DMA-интерфейс контроллера USB может быть легко подключен напрямую к IDMA-порту DSP.
Схема взаимодействия ADSP-2185M, ISP1581 и управляющего процессора Atmega8515 представлена на рис. 1.
Как видно из рисунка, в схему дополнительно введена ПЛИС, в которую зашита несложная логика, позволяющая управляющему процессору Atmega8515 получить доступ к IDMA-порту DSP. Таким образом, к IDMA-порту имеют доступ два внешних устройства.
Первое — контроллер ISP1581 (через свой DMA-интерфейс) — для скоростной передачи больших массивов данных между ПК и памятью DSP. Второе устройство — процессор Atmega8515 — для служебных задач, не требующих высокой скорости: выставления адреса в IDMA-порт (сигнал IAL), загрузки пользовательской программы в DSP, передачи различной управляющей информации.
Поясним принцип работы схемы на типичном примере: DSP собирает данные с АЦП и выполняет их предварительную обработку, параллельно с этим обработанные данные по шине USB передаются в ПК. При подключении кабеля USB процессор Atmega8515, управляя контроллером ISP1581, проводит так называемую «энумирацию» (enumeration) устройства — обрабатывает запросы от ПК, необходимые для распознавания компьютером устройства и загрузки необходимого драйвера.
После этого в память программ DSP из ПК через IDMA-порт загружается пользовательская программа: процессор Atmega8515 вычитывает код этой программы из памяти ISP1581 (по мере его поступления из ПК) и через ПЛИС записывает его в память программ DSP.
Далее, программа DSP начинает сбор данных с АЦП и их обработку. Обработанные данные DSP складывает в кольцевой FIFO-буфер в своей памяти данных. После того как первая половина буфера полностью заполнится готовыми данными, DSP инициирует прерывание в процессор Atmega8515, которое говорит о том, что пора отправлять первую половину буфера в ПК (в то же время DSP не прекращает складывать данные во вторую половину FIFO-буфера). По этому прерыванию Atmega8515 программирует DMA-интерфейс контроллера ISP1581 на скоростную передачу массива данных длиной в половину FIFO-буфера, выставляет сигналом IAL в IDMA-порт начальный адрес буфера в памяти DSP и дает DMA-интерфейсу ISP1581 команду на запуск. Таким образом, в то время, пока DSP складывает обработанные данные во вторую половину FIFO-буфера, контроллер ISP1581 самостоятельно с высокой скоростью вычитывает данные из первой половины буфера и передает их по шине USB в ПК.
После накопления данных во второй половине FIFO-буфера опять дается прерывание на их передачу в ПК и продолжается сбор данных уже в первую половину. И так до бесконечности по циклу, пока не придет команда из ПК на останов работы ввода данных.
Как видно из примера, подобная схема подключения DSP к шине USB имеет следующие преимущества:
- Ресурсы DSP не расходуются на управление обменом данными с ПК и полностью высвобождаются для задач пользователя — это обеспечивает уверенное выполнение требований жесткого реального времени в процессе сбора данных или управления объектом.
- Со стороны DSP данные, подлежащие отправке в компьютер или принятые из компьютера, выглядят как области памяти DSP — это позволяет программисту DSP создавать программы под любые задачи, не вникая в тонкости архитектуры и протокола USB.
- Загрузка программы в DSP осуществляется из компьютера через шину USB, что позволяет отказаться от использования дополнительных аппаратных средств (программатор, JTAG и т. д.). Радикально облегчается процесс отладки.
В качестве реализованного на практике примера этой схемы можно привести созданное авторами универсальное интерфейсное устройство USB2185 (рис. 2).
Устройство USB2185 представляет собой одноплатное интерфейсное устройство на шину USB (rev. 2.0, rev. 1.1) и предназначено для подключения пользовательских (прикладных) устройств, блоков или систем ввода-вывода к компьютерам под управлением ОС Winows2000/XP или Linux.
Устройство самостоятельно (без участия пользовательских аппаратных и программных решений) обеспечивает скоростной дуплексный обмен данными и передачу событий в обоих направлениях.
В то же время устройство обеспечивает гибкость при подключении пользовательской аппаратуры и позволяет вести первичную ЦОС (Цифровую Обработку Сигнала) при вводе и выводе. Помимо этого обеспечивается возможность выполнения алгоритмов управления объектом в жестком реальном времени, без использования ресурсов компьютера.
Структурно устройство USB2185 состоит из двух частей: интерфейсной и пользовательской.
Интерфейсная часть, обращенная к USB, состоит из контроллера ISP1581, процессора Atmega8515 и ПЛИС Altera EPM3128, включенных по приведенной выше схеме. Интерфейсная часть обеспечивает обмен данными между ПК и DSP в обоих направлениях.
Обращенная к пользователю часть состоит из сигнального процессора ADSP-2185M и внешнего разъема ВН-50, с контактами которого напрямую соединены выводы DSP, позволяющие задействовать 16-разрядную шину данных, два универсальных скоростных последовательных порта, несколько входных и выходных логических линий, входы прерываний. На внешний разъем изделия, кроме всех выводов DSP (за исключением линий, задействованных для обмена данными с ПК), выведены также питание 5 и 3,3 В, опорная частота 36 МГц — это позволяет пользователю создавать самые разнообразные устройства на базе изделия USB2185, подключая к нему различные модули расширения.
Основные технические характеристики устройства:
Тип DSP | ADSP-2185MKST-300 |
Рабочая частота DSP | 72 МГц |
Скорость передачи данных по USB | 112 Мбит/с |
Ток потребления, не более | 230 мА |
Рабочая температура | 10… 50 °С |
Основное назначение изделия USB2185 — служить базовым модулем для пользовательских устройств ввода-вывода и обработки информации. На базе изделия USB2185 могут быть созданы самые разнообразные устройства, подключаемые к ПК через современную высокоскоростную шину USB, в том числе:
- АЦП;
- ЦАП;
- логические анализаторы;
- системы хранения и обработки информации;
- концентраторы данных для АСУ ТП;
- мобильные измерительные комплексы на базе ноутбуков.
В настоящее время изделие USB2185 выпускается серийно и успешно используется в различных областях применения внешних устройств сбора, обработки и хранения информации.