Научная статья на тему 'Высокоскоростные контроллеры USB производства компании Cypress'

Высокоскоростные контроллеры USB производства компании Cypress Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
524
185
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Долгушин Сергей

В продолжение статьи «Аппаратные мосты FTDI для интерфейса USB» [8], в которой было рассказано об аппаратной и программной реализации полноскоростного (full-speed) интерфейса USB, рассмотрим высокоскоростные (high-speed) контроллеры USB компании Cypress. На примере одного из режимов работы универсального контроллера USB CY7C68013 будут рассмотрены основные этапы работы с high-speed USB и необходимые для этого программные средства.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Высокоскоростные контроллеры USB производства компании Cypress»

Высокоскоростные контроллеры USB

производства компании Cypress

Сергей ДОЛГУШИН

dsa@efo.ru

В продолжение статьи «Аппаратные мосты FTDI для интерфейса USB» [8], в которой было рассказано об аппаратной и программной реализации полноскоростного (full-speed) интерфейса USB, рассмотрим высокоскоростные (high-speed) контроллеры USB компании Cypress. На примере одного из режимов работы универсального контроллера USB CY7C68013 будут рассмотрены основные этапы работы с high-speed USB и необходимые для этого программные средства.

В настоящее время наибольшей популярностью на российском рынке пользуются аппаратные мосты USB-UART и USB-FIFO компании FTDI, рассчитанные на работу в режиме full-speed. Ключевыми моментами, определившими их популярность, были наличие готовых драйверов верхнего уровня и библиотек для работы с ними, простой интерфейс для связи с внешним процессором и аппаратная реализация USB [8]. Эти микросхемы полностью удовлетворяют существующим задачам преобразования протоколов, но их пропускная способность не превышает 1 Мбайт/с.

В приложениях со скоростями обмена по USB более 1,5 Мбайт/с необходимо использовать микросхемы с возможностью работы в высокоскоростном режиме. Одним из наиболее популярных сегодня решений являются микросхемы USB компании Cypress.

Cypress Semiconductor является одним из основных мировых производителей специализированных микросхем USB. Предлагаемые компанией решения полностью «закрывают» все возможные сферы применения, начиная с HID-устройств (мыши, клавиатуры и т. п.) и заканчивая высокоскоростными контроллерами USB.

Все микросхемы Cypress с поддержкой высокоскоростного режима USB по их назначению можно условно разделить на четыре основные группы:

• Аппаратные мосты для устройств хранения данных — семейства EZ-USB AT2/ AT2LP (USB-ATA/ATAPI) и EZ-USB NX2LP (Flash drives).

• Концентраторы — семейство TetraHub.

• Аппаратные контроллеры — EZ-USB SX2 (USB — FIFO).

• Универсальные контроллеры — EZ-USB FX2LP (со встроенным ядром 8051).

Наибольшим интересом у разработчиков пользуется универсальный контроллер EZ-USB FX2LP — микросхема CY7C68013A. Она может быть использована в различных USB-приложениях, в том числе для реализации устройств хранения данных, передачи видео в реальном времени, передачи с возможностью фильтрации данных встроенным процессором и пр. Рабочая конфигурация контроллера определяется программой, загруженной во внутреннюю оперативную память. Именно эта возможность делает контроллер универсальным: в зависимости от задачи он может быть настроен для выполнения тех или иных функций или проводить обновление программного обеспечения готовых приборов пользователями в процессе эксплуатации. Программное обеспечение контроллера загружается в оперативную память по USB с компьютера или из внешней EEPROM, подключаемой по интерфейсу I2C.

Так же как и компания FTDI, Cypress предлагает разработчику законченный комплекс программных приложений и утилит, существенно снижающий трудоемкость разработки. Комплекс включает в себя собственно драйвер CyUSB для операционной системы Windows, утилиту CyConsole (рис. 1) для тестирования процесса обмена данными по USB и примеры приложений программного обеспечения верхнего и нижнего уровней с исходными кодами. Основной программный пакет, в который собственно и включены драйвер, утилита CyConsole, шаблоны и примеры приложений, называется «CY4604 — USB Developer's uStudio». Данный пакет распространяется свободно и его можно загрузить с сайта производителя w ww .cypress.c om.

Кроме USB Developer's uStudio рекомендуем также обратить внимание на пакет «CYStream — Streaming Over USB with Isochronous and Bulk Transfers». В него вхо-

дит приложение верхнего уровня и программа для контроллера, которые позволяют тестировать пропускную способность USB со всеми возможными вариантами настроек конечных точек в режимах bulk и isochronous. Приложение верхнего уровня может быть использовано также и для тестирования разработанной программы контроллера.

Единственный недостаток контроллера FX2LP Cypress по сравнению с микросхемами FTDI (не рассматриваем технические характеристики собственно микросхем, только программное обеспечение) — это необходимость написания программы контроллера (firmware). Но и эта задача не осталась без внимания компании Cypress. Для разработки программного обеспечения контроллера предлагается готовый шаблон EZ-USB Firmware FrameWorks, в который включены все необходимые функции для создания полностью

tv JJ -=$ ■ - :ы» I * 1 1'

**HfpiiW , i !HU

В 1 i , ■ j

]>**— 1—

BHCLlJul WIUI Htln. ИС1М1 % :

fiiMimi

—— l7^ ib^u-TJ

i::: ei it -1 и n m •§ in i* >i ■« и м >t м м

■ -II

И *ii ■>: К is «• И h «i Зч ti tl ihl tt К

«« И П Ц «■ fi

> .»•. a n u ii ii 1+ j* ntiiiM t* n u it л

144» Is П tP U 11 i+ If И tl ll it Й» El 1# H ll

■H« II N I* M 44 ft «■ I I N H M «4 M f* N 11

•f!t Tl Tl ft It If 1+ It H H ll M I* Tl II N Tl

IMP II M Rl П II H1 ■ ■ tl 14 «I HI II 14 I* |l II

Рис. 1. Утилита CyConsole

совместимого со спецификацией USB устройства. На базе шаблона можно за пару часов написать работоспособное приложение.

В качестве иллюстрации приведем пример реализации на базе контроллера FX2LP конечного устройства, функционально аналогичного аппаратному мосту USB — FIFO компании FTDI.

Рассмотрим основные этапы проектирования программного обеспечения верхнего и нижнего уровней для приложения, которое будет принимать данные от внешнего процессора, ПЛИС или любого другого устройства с 8/16-разрядной шиной данных и наличием 4 свободных выводов для формирования и контроля сигналов управления контроллером FX2LP.

В качестве рабочего режима контроллера выберем режим Slave FIFO, в котором процессом записи и чтения управляет внешнее устройство (процессор, ПЛИС и т. п.). Собственное ядро контроллера FX2LP в данном режиме может не использоваться, что позволит добиться от USB максимальной пропускной способности. Режим Slave FIFO потребует минимума усилий для реализации на базе контроллера CY7C68013A устройства, аналогичного аппаратному мосту USB — FIFO (рис. 2). Подробнее о подключении управляющего процессора к FX2LP можно узнать в разделе 9 документа Technical reference manual [1]. В данном разделе подробно рассмотрены все возможные варианты конфигурации контроллера в режиме Slave FIFO и приведены листинги программ для каждого случая. Все приведенные примеры программ реализованы на базе шаблона EZ-USB Firmware FrameWorks.

Выводы, используемые в данном режиме, имеют следующее назначение:

• IFCLK — выходной интерфейс FIFO может тактироваться от внешнего или внутреннего источника. При выборе внутреннего источника частота может быть равной 30 или 48 МГц; при тактировании от внешнего источника частота может быть любой в диапазоне от 5 до 48 МГц. Выбор режи-

„ IFCLK в

FLAGA в

FLAGB „

FLAGC „

EZ-USB FX2/FX2LP eFLAGD/CLKS#B

„ SLOE Процессор

режим Slave FIFO , SLRD

e SLWR

л PKTEND

„ FD Г 15:01 в

л FIFOADR Г1:01

ма полностью зависит от идеологии построения схемы взаимодействия внешнего мастера и контроллера USB.

FIFOADR[1:0] — выбор одного из четырех возможных FIFO. Практически выбираем конечную точку, с которой будем работать в данный момент. Направление обмена задается при конфигурировании конечной точки. Каждому FIFO соответствует только одна конечная точка.

FD[15:0]/FD[8:0] — двунаправленная шина данных. Может быть 8- или 16-разрядной.

FLAG A/B/D/C — флаги состояния FIFO. Могут показывать три состояния заполнения FIFO — «пустой», «полный» или уровень заполнения, заданный пользователем. В контроллере FX2LP реализованы два режима функционирования флагов А, B, C — индексированный и фиксированный. Флаг D работает только в фиксированном режиме. В индексированном режиме флаг A показывает пользовательский уровень заполнения FIFO, B — «полный», С — «пустой» для выбранного в данный момент FIFO с помощью адреса FIFOADR.

В фиксированном режиме, независимо от выставленного адреса FIFOADR, флаги привязаны к конкретному FIFO и показывают одно из трех состояний этого FIFO. Например: флаг A показывает статус «полный» для FIFO 2, флаг B — статус «полный» для FIFO 4.

SLRD, SLWR — стробы чтения, записи соответственно.

SLOE — строб разрешения чтения из FIFO. PKTEND — принудительная пересылка данных из FIFO в USB. Данный режим может быть полезен в тех случаях, когда необходимо передать короткий пакет — пакет меньшего размера, чем размер конечной точки в выбранном режиме. Например, размер конечной точки EP4 равен 512 байтам, внешний процессор передает в контроллер USB 513 байт. Первые 512 байт будут переданы в USB автоматически, последний байт посылки передан не будет.

Для того чтобы передать последний байт, управляющее устройство должно дополнить последний пакет нулевыми значениями, либо установкой сигнала PKTEND. Интуитивно понятный интерфейс не должен вызвать затруднений, как и программа для процессора (или ПЛИС). В общем случае, для тех, кто уже работал с микросхемами FTDI, здесь нет практически ничего нового. Единственное отличие — в данном случае может быть реализовано несколько конечных точек, и для реализации обмена между FIFO FX2LP и внешним процессором придется реализовать выбор необходимой нам в данный момент времени точки путем установки необходимого адреса на входах FIFOADR.

Непосредственную работу с контроллером CY7C68013A надо начинать с установки приложения USB Developer's uStudio. После этого на компьютере будут установлены все необходимые средства для работы: драйвер CyUSB с библиотеками для Microsoft Visual C++ версий 6 и 7, и Borland C++ Builder 6.0, утилита CyConsole для программирования контроллера и тестирования обмена между компьютером и контроллером FX2LP, а также исходные коды и библиотеки EZ-USB Firmware FrameWorks.

Установка драйвера потребует некоторых несложных манипуляций, связанных с тем, что по умолчанию в файле CyUSB.inf нет информации об идентификаторах VID и PID конечного устройства. Строки с идентификаторами должны быть добавлены вручную.

В общем случае, полное описание USB-устройства (VID, PID, дескрипторы, количество конечных точек, количество интерфейсов и некоторые другие параметры) может быть прочитано с помощью программы USBView (UVCView.x86) (рис. 3), которая доступна на сайте компании Microsoft. Программа не требует установки, имеет простой пользовательский интерфейс. С ее помощью можно посмотреть, сколько устройств USB подключено к компьютеру, и отобразить параметры подключенных устройств. На этапе установки драйвера нам потребуется посмотреть

Рис. 2. Внешний интерфейс в режиме «Slave FIFO»

Рис. 3. Окно программы USBView

информацию о VID и PID контроллера. До того, как будет «прошита» рабочая программа контроллера с персональными идентификаторами производителя, при определении (enumeration) подключенного устройства будут использованы VID и PID компании Cypress. Именно эти идентификаторы потребуются при установке драйвера. Дополнительно к ним можно сразу записать строчку с собственными идентификаторами создаваемого устройства.

По умолчанию, в CyUSB.inf присутствуют следующие разделы (в приведенном листинге условно отмечены фигурными скобками), в которые надо будет добавить необходимые строчки.

Начальное состояние:

[Manufacturer]

%Mf gName%=Cypress [Cypress]

;%VID_VVVV&PID_PPPP.DeviceDesc% = CyUsb, USB\VID_VVVV&PID_PPPP

{

}

[Strings]

CYPRESS=»Cypress»

MfgName=»Cypress»

CYUSB_INSTALL=»Cypress Generic USB Driver Installation Disk»

і

і

CyUsb.SvcDesc=»Cypress Generic USB Driver»

;-------Replace GUID below with custom GUID----;

CyUsb.GUШ=»{AE18AA60-7F6A-11d4-97DD-00010229B959}»

После редактирования:

[Manufacturer]

%MfgName%=Cypress

[Cypress]

;%VID_VVVV&PID_PPPP.DeviceDesc% = CyUsb, USB\VID_VVVV&PID_PPPP

%VID_04B4&PID_8613.DeviceDesc% = CyUsb, USB\VID_04B4&PID_8613

%VID_0547&PID_1002.DeviceDesc% = CyUsb, USB\VID_0547&PID_1002

[Strings]

CYPRESS=»Cypress»

MfgName=»Cypress»

CYUSB_INSTALL=»Cypress Generic USB Driver Installation Disk»

VID_04B4&PID_8613.DeviceDesc=»Cypress default» VID_0547&PID_1002.DeviceDesc=»Cypress myFIFO»

CyUsb.SvcDesc=»Cypress Generic USB Driver»

;--------Replace GUID below with custom GUID----------;

CyUsb.GUID=»{AE18AA60-7F6A-11d4-97DD-00010229B959}»

Добавленные строки: с VID_04B4 и PID_8613 — для определения устройства с настройками производителя; с VID_0547 и PID_1002 — для разрабатываемого устройства. Обе строчки необходимы только при разработке и отладке. Для установки на пользовательский компьютер понадобится только одна из них, в разобранном выше случае — вторая. Приведенный в кавычках текст «Cypress myFIFO» определяется разработчиком, и именно этот текст отображается в списке устройств панели управления Windows. Дальнейший процесс установки драйвера происходит в стандартном порядке.

Разработка программного обеспечения контроллера на базе EZ-USB FrameWorks

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

Стандартный проект, созданный с использованием EZ-USB FrameWorks, состоит из следующих файлов:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

• FW.C — основной файл, который содержит функцию main(), планировщик задач. Для большинства проектов изменять данный файл не требуется.

• PERIPH.C — файл содержит процедуру инициализации и функции планировщика задач, вызываемые из FW.C. В этом файле происходит настройка FrameWorks под текущую задачу и здесь же должны размещаться функции пользователя, если они необходимы. В частности, при использовании режима Slave FIFO в самом простом случае нет необходимости добавлять собственные функции.

• DSCR.A51 — содержит описание дескрипторов устройства.

• EZUSB.LIB — библиотека стандартных функций и описание всех регистров контроллера. Библиотека предоставляется в исходных кодах и в виде подключаемой библиотеки. Во втором случае Cypress рекомендует использовать компилятор фирмы Keil. Для разработки несложного приложения, например USB-FIFO, будет достаточно иметь демонстрационную версию компилятора Keil, имеющую ограничение на размер кода до 4 кбайт.

Для простого проекта, реализующего режим Slave FIFO, вмешательства потребуют два файла: DSCR.A51 и PERIPH.C. В первом необходимо будет изменить дескрипторы разрабатываемого устройства и задать конфигурацию конечных точек. Подробно на данном вопросе останавливаться не будем — дескрипторы были описаны в статьях Д. Чекунова, посвященных работе с контроллером FX2LP и опубликованных в журнале «Современная электроника» [6, 7].

В файле PERIPH.C описаны пользовательские функции. Для работы в режиме Slave FIFO изменения коснутся только функции TD_INIT() — инициализация переменных и установка режима работы контроллера. Функция TD_POLL() — основная функция, вызываемая периодически в процессе работы. Именно в ней должно быть описано поведение устройства. Пример реализации режима Slave FIFO с одной конечной точкой EP2IN приведен ниже:

IFCONFIG = 0xCB;

void TD_Init( void )

і // Called once at startup

REVCTL = 0x03; // must set REVCTL.0 and REVCTL.1 to 1

SYNCDELAY;

CPUCS = 0x10; // Биты 4 и 3 регистра: выбор тактовой

// частоты (48 МГц в примере),

// все остальные можно оставить

// по умолчанию.

EP2CFG = 0xE0;

// Биты 1 и0 регистра задают режим // работы: Slave FIFO, GPIF, порты // ввода-вывода (Slave FIFO в примере). // Бит 3 — синхронный или асинхрон // ный режим работы. Биты 7 и6 —

// выбор источника тактовых сигналов // и частоты для работы блоков FIFO // или GPIF.

// Конфигурационный регистр конеч // ной точки. В примере заданы следую // щие параметры: Конечная точка ак // тивна, направление обмена — IN,

// режим обмена — BULK, размер паке // та — 512 байт, 4-кратное резервиро // вание. (Направление обмена, режим // и размер пакета должны совпадать // с дескрипторами конечной точки,

// описанными в DSCR.A51)

SYNCDELAY;

// Сброс FIFO — сброс счетчика байтов и флагов в состояние по умолчанию. Значения 2, 4, 6, 8 — номера FIFO FIFORESET = 0x80;

SYNCDELAY;

FIFORESET = 0x02;

SYNCDELAY;

FIFORESET = 0x04;

SYNCDELAY;

FIFORESET = 0x06;

SYNCDELAY;

FIFORESET = 0x08;

SYNCDELAY;

FIFORESET = 0x00;

SYNCDELAY;

EP2FIFOCFG = 0x0C;

// Бит 3 — задан режим автоматического // формирования пакетов иих отправки, // бит 2 — разрешена отправка пакетов // нулевой длины при наличии сигнала // PKTEND, бит 0 — в качестве физичес // кого интерфейса используется порт // порт В (бит 0 = 1, 16 разрядная шина — // используются порты В иР)

// Регистры PINFLAGSAB, PINFLAGSCD отвечают за настройку флагов FIFO (стр. 15-19 Technical reference manual)

PINFLAGSAB = 0x00; // индексированный режим (описание

// режима см. выше)

SYNCDELAY;

PINFLAGSCD = 0x00; // индексированный режим

SYNCDELAY;

FIFOPINPOLAR = 0x00; // Выбор активных уровней сигналов // PKTEND, SLOE, SLRD, SLWR, EF и FF. // В примере — все сигналы имеют

SYNCDELAY;

і

void TD_Poll( void )

{

// ... в режиме Slave FIFO формирование и передача пакетов происходит автоматически

На этом можно считать задачу практически выполненной. Осталось загрузить программу в контроллер FX2LP c помощью утилиты CyConsole. После загрузки кода контроллер автоматически перезагрузится и произойдет переопределение (re-enumeration) USB-устройства с новыми параметрами. Если все было сделано правильно, то на вкладке Other Endpt Xfers программы CyConsole появится информация о конечной точке EP2IN (рис. 4). Активировав конечную точку в окне Select Endpoint и нажимая кнопку Transfer Data в нижнем окне приложения, можно наблюдать поступающие по USB данные.

Для разработки пользовательского приложения компания Cypress предлагает библиотеку CyAPI.lib, представляющую собой

программный интерфейс к драйверу USB. Некоторые из основных функций приведены ниже:

// открыть устройство

USBDevice = new CCyUSBDevice(); // конструктор класса CCyUSBDevice — осуществляет инициализацию членов класса и затем вызывает метод Open(0). Метод Open(0) открывает первое из списка подключенных USB устройств.

//

CString str;

int devices = USBDevice->DeviceCount( );

CCyUSBConfig cfg = USBDevice->GetUSBConfig(0); функция возвращает копию объекта CCyUSBConfig, содержащего информацию о конфигурации USB-устройства

If (USBDevice->BulkInEndPt)

status = USBDevice->BulkInEndPt->XferData(data,len); // в контексте метод XferData принимает len байт данных из буфера buf. Метод осуществляет блочный прием-передачу информации. Значение возвращается после окончания транзакции или наступления тайм-аута. Направление обмена определяется конечной точкой, в данном случае BulkInEndPt — прием данных.

Описанный в настоящей статье пример Slave FIFO не охватывает, конечно, всех возможностей USB-контроллера Cypress FX2LP. Тем не менее, на базе этого примера можно быстро реализовать типовую задачу обмена данными между периферийным устройством и компьютером по USB в высокоскоростном режиме. Затруднений не вызовет ни физическое подключение внешнего процессора к контроллеру FX2LP, ни собственно программное обеспечение контроллера FX2LP. Для реализации режима Slave FIFO можно также использовать аппаратный контроллер

Рис. 4. Окно CyConsole с информацией об устройстве после загрузки программы

Cypress SX2 (CY7C68001). В этом случае отпадает необходимость в написании программы для контроллера.

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

не подходит, можно рекомендовать для изучения серию статей Д. Чекунова.

В заключение отметим, что компания Cypress разработала и поставляет логически законченный набор доступных аппаратных и программных средств для создания высокоскоростных приложений USB. В большинстве случаев возможностей этого набора достаточно для освоения и последующей разработки собственных приложений на базе контроллеров FX2LP. ■

Литература

1. EZ-USB Technical Reference Manual. Cypress Semiconductor (ww w.cypress.c om).

2. CY7C68013A/CY7C68015A EZ-USB FX2LP™ USB Microcontroller High-Speed USB Peripheral Controller. Cypress Semiconductor (ww w.cypress.c om).

3. Cypress CyAPI Programmer's Reference. Cypress Semiconductor (ww w.cypress.c om).

4. Cypress USB Console Users' Guide. Cypress Semiconductor (w ww.cypress.c om).

5. Cypress CyUsb.sys Programmer's Reference. Cypress Semiconductor (ww w.cypress.c om).

6. Чекунов Д. Программисту USB-устройств // Современная электроника. 2004. № 1, 2. 2005. № 1.

7. Чекунов Д. Практикум программиста USB-устройств // Современная электроника. 2005. № 4, 6. 2006. № 1, 2.

8. Долгушин С. А. Аппаратные мосты FTDI для интерфейса USB // Компоненты и технологии. 2006.

№4.

i Надоели баннеры? Вы всегда можете отключить рекламу.