Дренаж здания и водопонижение участка. Палочки для мороженого купить на сайте:https://magnumnn.ru/.
Транслятор транзакций, входящий в хаб USB 2.0, служит для преобразования скоростей обмена по шине: высокой (HS) на стороне восходящего порта в полную или низкую (FS/LS) на стороне нисходящих портов, к которым подключены устройства USB 1.x. Транслятор выполняет расщепленные транзакции ввода/вывода и транслирует маркеры микрокадров в маркеры кадров, передаваемые в порты FS.
Расщепление транзакций организуется хостом, который знает текущую топологию шины (к портам каких хабов USB 2.0 подключены устройства или хабы 1.x). Расщепленные транзакции выполняются в два-три этапа, в зависимости от типа и направления передачи:
Во всех этих транзакциях используется обычная «молчаливая» реакция на прием поврежденных пакетов и механизм тайм-аутов.
Каждый нулевой маркер микрокадра хаб транслирует в виде полноскоростного маркера кадра SOF. Расщепленные транзакции на стороне FS/LS выполняются внутри этих кадров. Старт расщепленных транзакций хост планирует на нулевой микрокадр, чтобы к концу последнего (седьмого) микрокадра расщепленная транзакция могла быть завершена и все данные оказались бы переданы (чтобы не накапливать переходящих остатков). Временные соотношения между транзакциями на обеих сторонах транслятора иллюстрирует рисунок, где в качестве примера рассмотрено расщепление транзакции ввода.
Общая структура транслятора транзакций приведена на следующем рисунке. HS-обработчик (HS Handler) помещает информацию расщепленных запусков в свои буферы, а по запросам завершений выбирает из буферов результаты и передает их в виде пакетов хосту. Этот обработчик отрабатывает все обычные функции протокола USB, включая генерацию и проверку CRC, посылку хосту подтверждений и т. п. F/LSобработчик (F/LS-Handler) по выбранным из буферов запросам запусков формирует обычные транзакции USB, начинающиеся с маркеров IN, OUT, SETUP (а для LSпортов и с преамбулы PRE). Результаты этих транзакций (данные и подтверждения) он помещает в буферы. Транслятор транзакций обладает буферами, в которых размещаются все необходимые данные о текущих выполняемых расщепленных транзакциях. По завершении транзакции (на обеих сторонах) буфер освобождается для обслуживания следующих расщепленных транзакций.
Периодические транзакции (изохронные и прерывания), критичные к времени выполнения, транслятором обрабатываются по конвейерной схеме. Данные запусков периодических транзакций помещаются в SS-буфер, из которого они выбираются F/LS-обработчиком (буфер реализует дисциплину FIFO) и запускаются в виде транзакций на вторичную шину. Результаты этих транзакций помещаются в CS-буфер (тоже FIFO), откуда их извлекает хост. За порядок наполнения и опустошения этих буферов отвечает хост — он планирует транзакции SS и CS. Транзакции запусков проходят без подтверждений со стороны транслятора; хост узнает о судьбе транзакции только в фазе завершения.
Непериодические транзакции (управление и передача массивов) обрабатываются иначе: у транслятора имеется два или более буфера B/C In/Out, каждый из которых обслуживает по одной транзакции, от начала и до конца. Здесь транзакции запусков подтверждаются транслятором: ответ NAK означает невозможность приема транзакции к исполнению (нет свободных буферов), то есть хосту следует повторить попытку запуска. Ответ ACK означает, что транзакция принята к исполнению и через некоторое время следует забрать результат, выполнив транзакцию завершения.
Спецификация предусматривает два варианта реализации транслятора; какой именно применяется, можно узнать из кода протокола интерфейса хаба:
В расщепленных транзакциях фаза маркера, определяющая продолжение транзакции, состоит из двух пакетов-маркеров: специального маркера SPLIT, формат которого приведен в таблице, за которым следует маркер обычной транзакции (IN, OUT, SETUP). Пакет-преамбула PRE в расщепленных транзакциях не используется — скорость целевого устройства задается в маркере SPLIT, что позволяет хабу провести транзакцию на нужной скорости. Транслятор сам генерирует преамбулу, если вторичный порт, через который обращаются к LS-устройству, опознал FSподключение (это означает, что между хабом, транслирующим транзакцию, и целевым устройством есть хаб USB 1.x). Маркер SPLIT адресуется к порту хаба (номера в полях HubAddr и PortAddr), а следующий за ним обычный маркер адресует конечную точку целевого устройства. Маркеры SPLIT, используемые для запуска (SS) и завершения (CS) расщепленных транзакций, различаются полем SC: 0 — для SS, 1 — для CS. Поле ET описывает тип целевой конечной точки, с которой будет производиться транзакция (00 — Control, 01 — Isochronous, 10 — Bulk, 11 — Interrupt). Поля S и E трактуются по-разному. Для управляющих транзакций и прерываний поле S определяет скорость (0 — FS, 1 — LS), E = 0. Для остальных транзакций, кроме запуска изохронного вывода, поля S и E содержат нули. В транзакциях запуска изохронного вывода поля S и E трактуются как признаки начала и конца данных соответственно.
Поле | Sync | PID | Check | Hub Addr | SC | Port Addr | S | E | ET | SRC | EOP |
Длина, бит | 32 | 4 | 74 | 7 | 1 | 7 | 1 | 1 | 2 | 5 | 8 |