|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Программная реализацияПротокол USB-приема и дешифрации полностью реализован программно. Программа вначале принимает битовый поток USB в один USB-пакет во внутреннем буфере. Начало приема инициируется по внешнему прерыванию INT0, которое отвечает за образцовую синхронизацию. В процессе приема проверяется только сигнал конца пакета (определяется только EOP). Это необходимо ввиду очень высокой скорости передачи данных по шине USB. После успешного приема программа дешифрирует пакеты данных и анализирует их. Во-первых, с помощью адреса анализируется, что принятый пакет относится к данному устройству. Адрес передается при каждой USB-транзакции и, следовательно, устройство знает, что переданные данные относятся именно к нему. Дешифрация USB-адреса должна выполнятся очень быстро, поскольку, в случае определения действительного пакета с заданным адресом, устройство должно ответить компьютеру подтверждающим пакетом ACK. Таким образом, дешифрация адреса является критичной частью USB-ответа. После приема битового потока мы получаем последовательность, закодированную в коде NRZI, путем поразрядного заполнения входного буфера. В процессе дешифрации мы вначале удаляем поразрядное заполнение, а затем NRZI-кодирование. Все данные изменения выполняются во втором буфере (копия приемного буфера). После дешифрация текущего пакета может приниматься новый пакет. Для данной точки, скорость дешифрации не так важна, т.к. устройство может задержать свой ответ. Если компьютер запрашивает ответ в процессе дешифрации, то устройство должно ответить незамедлительно NAK (нет подтверждения), исходя из чего компьютер поймет о неготовности устройства. Таким образом, микроконтроллер должен быть способен принимать пакеты от компьютера в процессе дешифрации, определить относится ли транзакция к устройству, а затем отправить пакет NAK, если дешифрация еще находится в процессе выполнения. В этом случае компьютер отправит запрос снова. Микроконтроллер также дешифрирует основную USB-транзакцию и выполняет запрашиваемое действие; например, отправка символа по линии RS232 и ожидание завершения транзакции, а также подготовка соответствующего ответа. При выполнении данного процесса устройство будет прерываться некоторыми пакетами, поступающих от компьютера, обычно пакты IN для получения ответа от устройства. На данные пакеты IN устройство должно ответить пакетами NAK. Если ответ готов и устройство выполнило требуемое действие, ответ должен вначале пройти через функцию вычисления и присоединения CRC, затем выполняется NRZI-кодирование, а затем поразрядное заполнение. Теперь, когда компьютер запрашивает ответ, данный битовый поток передается по линиям данных в соответствии с требованиями стандарта USB. Рассмотрим основы программирования USB-устройств на примере модуля ЛА-20USB предназначенного для ввода и вывода аналоговых и дискретных сигналов рис.62. Устройство содержит следующие независимые узлы: аналогово-цифровой канал (АЦК), опорный кварцевый генератор, цифровой порт ввода/вывода, внутренний интерфейс управления и конфигурации, интерфейс USB 2.0 и вторичный источник питания. Рис. 62 Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |