Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 37. WoodmanUSB. Синхронный режим работы порта PORTB

Дмитрий Иванов, 10 Декабря 2013

В этой статье мы познакомимся с синхронным режимом работы модуля WoodmanUSB. Имено в нем можно получить максимальные скорости пеередачи данных. В чем принципиальное отличие этого режима от асинхронного, который мы рассматривали ранее? В синхронном режиме помимо линии чтения/записи также должна применяться отдельная линия тактирования (CLK), причем управляющие сигналы для чтения и записи должны быть довольно точно привязаны по времени к сигналу тактирования. Благодаря такой синхронизации WoodmanUSB позволяет получать скорости передачи данных до 220 МБит/с.

Начнем с основ. Существует несколько вариантов синхронного режима. В первую очередь необходимо выделить режим с внутренним и внешним тактированием. При внешнем тактировании тактовый сигнал подается на линию CLK модуля (работает на вход) от внешнего устройства. При внутреннем тактировании модуль сам генерирует тактовый сигнал и выдает его на линию CLK (работает на выход). Внешнее устройство тактируется по этому сигналу. Модуль может генерировать две частоты тактового сигнала: 30 и 48 МГц.

Теперь рассмотрим, что необходимо сделать на программном уровне, чтобы работать с портом PORTB модуля в синхронном режиме. Сдесь все очень просто. Необходимо только передать нужную констатну в функцию WUSB_SetupPortB() - и можно как раньше пользоваться функциями чтения/записи без каких-либо изменений. В библиотеке WUSBdrv.dll определены три константы для синхронного режима: SYNC_MODE_EXTERNAL_CLK - тактовый сигнал будет внешним относительно модуля (подается внешним устройством на линию CLK модуля), SYNC_MODE_INTERNAL_CLK_30MHZ - внутренний сигнал тактирования с частотой 30 МГц (выдается наружу через линию CLK) и SYNC_MODE_INTERNAL_CLK_48MHZ - тоже самое, только частота 48 МГц.

//SYNC_MODE_EXTERNAL_CLK	0x0C
//SYNC_MODE_INTERNAL_CLK_30MHZ	0x14
//SYNC_MODE_INTERNAL_CLK_48MHZ	0x1C


WUSB_SetupPortB(SYNC_MODE_INTERNAL_CLK_30MHZ);

Еще раз повоторю, что работа с функциями чтения/записи в синхронном режиме ни как не отличается от рассмотренной ранее в асинхронном режиме.


А теперь давайте рассмотрим временные диаграммы, илюстрирующее "взаимоотношения" между сигналом тактирования и управляющими сигналами чтения/записи.

1. Синхронный режим. Чтение данных из модуля внешним устройством

Таблица 1.1 Параметры синхронного режима при внутреннем тактировании

Параметр Описание Min Max

tIFCLK

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

20.83 нс

-

tSRD

Время предустановки сигнала чтения

18.7 нс

-

tRDH

Время удержания сигнала чтения

0

-



Таблица 1.2 Параметры синхронного режима при внешнем тактировании

Параметр Описание Min Max

tIFCLK

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

20.83 нс

200 нс

tSRD

Время предустановки сигнала чтения

12.7 нс

-

tRDH

Время удержания сигнала чтения

3.7 нс

-




2. Синхронный режим. Запись данных в модуль внешним устройством

Таблица 2.1 Параметры синхронного режима при внутреннем тактировании

Параметр Описание Min Max

tIFCLK

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

20.83 нс

-

tSWR

Время предустановки сигнала чтения

18.1 нс

-

tWRH

Время удержания сигнала чтения

0

-

tSFD

Время предустановки данных на линиях порта PORTB

9.2 нс

-

tFDH

Время удержания данных на линиях порта PORTB

0

-



Таблица 2.2 Параметры синхронного режима при внешнем тактировании

Параметр Описание Min Max

tIFCLK

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

20.83 нс

200 нс

tSWR

Время предустановки сигнала чтения

12.1 нс

-

tWRH

Время удержания сигнала чтения

3.6 нс

-

tSFD

Время предустановки данных на линиях порта PORTB

3.2 нс

-

tFDH

Время удержания данных на линиях порта PORTB

4.5 нс

-



Некоторые наблюдения по временным диаграммам и таблицам:

  • максимальная частота тактового сигнала равна 48 МГц
  • минимальная частота тактового сигнала при внешнем тактировании равна 5 МГц
  • моменты генерации сигналов чтения/записи привязаны к тактовому сигналу и определяются величинами tSRD, tRDH для чтения данных из модуля и tSWR, tWRH, tSFD, tFDH для записи данных в модуль

Теперь давайте проведем небольшой тест, иллюстрирующий потенциальные скорости передачи в синхронном режиме. Идеологию оставим как в прошлой статье - сами данные реально не обрабатываем, генерируем только сигналы чтения/записи и в данном режиме еще и тактового сигнала. Также давайте определимся в каком из подвидов синхронного режима будем работать. Предлагаю использовать с вутренним тактированием на 48 МГц, поскольку с внешним все сложнее, необходимо соблюдать довольно жесткие требования по временным характеристикам. Схема тестового устройства показана ниже. Как видно из рисунка сигналы управления чтения/записи совпадают с тактовым сигналом, который в режиме внутреннего тактирования выводится "наружу" модуля по линии CLK.

Программу используем из прошлой статьи. Единственное изменение которое необходимо сделать так это вызвать функцию WUSB_SetupPortB() с параметром SYNC_MODE_INTERNAL_CLK_48MHZ. Скриншоты результатов тестов показаны ниже.


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


© Дмитрий Иванов
09 Декабря 2013 года
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2017