| СОПРЯЖЕНИЕ КОМПЬЮТЕРОВ С ВНЕШНИМИ УСТРОЙСТВАМИ |
|
Синхронный режим работы порта PORTBВ этой статье мы познакомимся с синхронным режимом работы модуля 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 Параметры синхронного режима при внутреннем тактировании
Таблица 1.2 Параметры синхронного режима при внешнем тактировании
2. Синхронный режим. Запись данных в модуль внешним устройством
Таблица 2.1 Параметры синхронного режима при внутреннем тактировании
Таблица 2.2 Параметры синхронного режима при внешнем тактировании
Как видим синхронный режим заметно сложнее с точки зрения предъявляемых требований к внешнему устройству по быстродействию. Следует также упомянуть что представленные значения параметров на временной диаграмме являются "рекомендованными" для применения самим производителем чипа (Cypress). К слову, с некоторыми из этих параметров можно попробовать поэксперементировать, в первую очередь с временем предустановки сигнала чтения/записи. Безусловно, было бы гораздо удобнее если бы величина этого параметра равнялась бы ровно половине периода тактового сигнала. В своих опытах я получал стабильную работу модуля при значении времни предустановки до 10.4 нс, т.е. ровно полпериода от 48 МГц. Однако следует понимать, что при таких превышениях параметров при определенных условиях модуль может перейти в нестабильный режим. Теперь давайте проведем небольшой тест, иллюстрирующий потенциальные скорости передачи в синхронном режиме. Идеологию оставим как в прошлой статье - сами данные реально не обрабатываем, генерируем только сигналы чтения/записи и в данном режиме еще и тактового сигнала. Также давайте определимся в каком из подвидов синхронного режима будем работать. Предлагаю использовать с вутренним тактированием на 48 МГц, поскольку с внешним все сложнее, необходимо соблюдать довольно жесткие требования по временным характеристикам. Схема тестового устройства показана ниже. Как видно из рисунка сигналы управления чтения/записи совпадают с тактовым сигналом, который в режиме внутреннего тактирования выводится "наружу" модуля по линии CLK.
Программу используем из прошлой статьи. Единственное изменение которое необходимо сделать так это вызвать функцию WUSB_SetupPortB() с параметром SYNC_MODE_INTERNAL_CLK_48MHZ. Скриншоты результатов тестов показаны ниже.
Я думаю Вы согласитесь, что результаты весьма не плохие. Итого можно сказать что синхронный режим заметно сложнее по аппаратной реализации чем асинхронный но его использование позволяет получать максимальные скорости передачи данных. Сложность аппаратной реализации обусловлена тем, что в реальности для передачи данных необходимо анализировать состояния буферов во избежание потерь данных при их переполнении это раз, затем необходимо сделать поправку на то что внешнее устройство должно быть достатчно быстродейситвующим, чтобы обеспечивать заданные временные характеристики генерации сигналов управления и их синхрони- зации с тактовым сигналом. © Иванов Д. В. |
| Контакты | | | Гостевая книга |
| © 2005-2010 сопряжение компьютеров с внешними устройствами PCPORTS.RU © Иванов Д.В. | ||||||||||||||