Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 35

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 168 >> Следующая

Поле ет описывает тип целевой конечной точки, с которой будет
производиться транзакция:
? 00 - управление;
? 01 - изохронная транзакция;
? 10 - передача массива данных;
? 11 - прерывание.
Контрольная сумма CRC вычисляется по полям от HubAddr до ет включительно.
SYNC РЮ[4] Check[4] HubAddr[7] CS[1] Port[7] S[1] E[1] ET[2]
CRC[5] EOP
Рис. 3.11. Формат пакета SPLIT
3.9. Контрольная сумма
Протокол USB использует циклический избыточный код (CRC, Cyclic
Redundancy Checksums) для защиты полей пакета. CRC-контроль является
более мощным методом обнаружения ошибок и используется для обнаружения
ошибок на уровне блоков данных. Он основан на делении и умножении
многочленов. В определенном смысле CRC-контроль является алгоритмом
хэширования, который отображает (хэширует) элементы большого набора на
элементы меньшего набора. Процесс хэширования приводит к потере
информации. Хотя каждый отдельный элемент набора данных отображается на
один и только один элемент хэш-набора - обратное не верно. При CRC-
контроле большой набор всех возможных двоичных чисел отображается на
меньший набор всех возможных CRC.
86
Часть II. Внутренняя организация USB
3.9.1. Алгоритм вычисления CRC
Вычисление и использование кода CRC производится в соответствии со
следующей последовательностью действий.
К содержимому кадра, описываемого полиномом F(x), добавляется набор
единиц
15
L(x)^xn =1111111111111111,
л=О
количество которых равно длине поля crc.
Образованное таким образом число х16 х F(x) + хк х L{x), где к - степень
Цх), делится на производящий полином g(x).
Остаток 0(х) от такого деления, определяемый из соотношения
Q(x) g(x) = х16 х F(x) + хк х L(x) + 0(х),
где Q(x) - частное от деления х16 х Цх) + хк х Цх) на Цх), в
инвертированном виде помещается в контрольное поле кадра.
На приемной стороне выполняется деление содержимого кадра с полем crc х(r)
х F\x) + хк х Цх) + 0{х) на полином Цх), где F*(x) = х16 х Цх) + + L(x) +
0(х) - передаваемая кодовая комбинация. Результат такого деления можно
привести к виду:
х16 х [х16 х Цх) + хк х L(x) + 0(х)\ / g(x) + х16 х L(x) / g(x) =
= х16 [Q(x) X ^-(х)I / g(x) + X16 X Цх) / g(x).
Числитель первого слагаемого делится на g(x), поэтому в приемнике, если
при передаче не было ошибок, остаток получается равным остатку от деления
постоянного числителя второго слагаемого (х16 х Цх) /g{x)) и имеет вид
х12 + хи + х10 + х8+х3+х2+х + 1 = 1110100001111.
Таким образом, если результат вычислений на приемной стороне равен
некоторому определенному числу (в некоторых системах нулю, либо другому
числу, не совпадающему с приведенным выше), то считается, что передача
выполнена без ошибок.
При выборе порождающего полинома руководствуются желаемой разрядностью
остатка и его способностью выявлять ошибки. Ряд порождающих полиномов
принят международными организациями. В протоколе USB используются два
порождающих полинома - один для пакетов маркеров и второй для пакетов
данных. Для маркеров используется полином х5 + х2 + х°, а для данных -
х16 + х15 + х2 + х°. Соответственно, получаемый контрольный код имеет
размерность 5 битов и 16 битов.
Алгоритм вычисления 16-разрядной контрольной суммы (ее более привычное
название - CRC16) выглядит следующим образом. В 16-битный регистр
Гпава 3. Внутренняя организация шины
87
crc предварительно загружается число $FFFF. Процесс начинается с
добавления байтов сообщения к текущему содержимому регистра. Для
генерации crc используются только 8 бит данных. Старт и стоп-биты, бит
паритета, если он используется, не учитываются в crc.
В процессе генерации crc каждый 8-битный символ складывается по
ИСКЛЮЧАЮЩЕМУ ИЛИ (xor) с содержимым регистра. Результат сдвигается в
направлении младшего бита с заполнением 0 старшего бита. Младший бит
извлекается и проверяется. Если младший бит равен 1, то содержимое
регистра складывается с определенной ранее фиксированной величиной по
ИСКЛЮЧАЮЩЕМУ ИЛИ. Если младший бит равен 0, то ИСКЛЮЧАЮЩЕЕ ИЛИ не
делается.
Этот процесс повторяется, пока не будет сделано 8 сдвигов. После
последнего (восьмого) сдвига следующий байт складывается с содержимым
регистра, и процесс повторяется снова. Финальное содержание регистра
после обработки всех байт сообщения и есть контрольная сумма crc.
Таким образом, алгоритм генерации crc выглядит так:
1. 16-битный регистр загружается числом $FFFF и используется далее как
регистр crc.
2. Первый байт сообщения складывается по ИСКЛЮЧАЮЩЕМУ ИЛИ с содержимым
регистра crc. Результат помещается в регистр crc.
3. Регистр crc сдвигается вправо (в направлении младшего бита) на 1 бит,
старший бит заполняется 0.
4. (Если младший бит 0): Повторяется шаг 3 (сдвиг).
5. (Если младший бит 1): Делается операция ИСКЛЮЧАЮЩЕЕ ИЛИ регистра crc и
полиномиального числа $А001.
6. Шаги 3 и 4 повторяются восемь раз.
7. Повторяются шаги со 2 по 5 для следующего сообщения. Это повторяется
до тех пор, пока все байты сообщения не будут обработаны.
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.