link840 link841 link842 link843 link844 link845 link846 link847 link848 link849 link850 link851 link852 link853 link854 link855 link856 link857 link858 link859 link860 link861 link862 link863 link864 link865 link866 link867 link868 link869 link870 link871 link872 link873 link874 link875 link876 link877 link878 link879 link880 link881 link882 link883 link884 link885 link886 link887 link888 link889 link890 link891 link892 link893 link894 link895 link896 link897 link898 link899 link900 link901 link902 link903 link904 link905 link906 link907 link908 link909 link910 link911 link912 link913 link914 link915 link916 link917 link918 link919 link920 link921 link922 link923 link924 link925 link926 link927 link928 link929 link930 link931 link932 link933 link934 link935 link936 link937 link938 link939 link940 link941 link942 link943 link944 link945 link946 link947 link948 link949 link950 link951 link952 link953 link954 link955 link956 link957 link958 link959 link960 link961 link962 link963 link964 link965 link966 link967 link968 link969 link970 link971 link972 link973 link974 link975 link976 link977 link978 link979

PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Шина IEEE 1394 — FireWire

Пакеты асинхронных транзакций

Пакеты запросов и ответов асинхронных передач для различных транзакций имеют форматы. Пакет состоит из заголовка и необя зательно блока данных. Ниже перечислено назначение полей, используемых в заголовках пакетов различных типов:

  • 64-битный адрес назначения (состоящий из полей destination_ID (10-битный номер шины и 6-битный номер узла) и destination_Offset (48-битный адрес в пространстве целевого узла);
  • метка транзакции tl (Transaction Label, 6 бит), с помощью которой запросчик определяет, к какому его запросу относится полученный ответ. Если метка используется, то ответчик помещает в пакет ответа метку, полученную запросчиком (аналогично тегам на PCI-X);
  • код повтора rt (Retry Code, 2 бита), по которому определяется, является ли данный пакет первой попыткой транзакции; для повторной попытки значение поля задается в зависимости от кода квитирования, полученного от целевого устройства: rt = 00 — первая попытка, rt = 01 — Retry_x, rt = 10 — Retry_A, rt = 11 — Retry_B;
  • поле типа транзакции (субакции) tcode (4 бита), определяющий назначение пакета и его формат в соответствии с табл. 18.2;
  • поле приоритета pri (Priority, 4 бита, используется только для кросс-шины), в кабельных сетях не используется;
  • поле rcode (4 бита) содержит код результата выполнения операции;
  • поле data_length (16 бит) содержит длину блока (в байтах);
  • поле расширенного кода транзакции extended_tcode (16 бит) уточняет выполняемую операцию (используется не для всех операций);
  • проверочный код header_CRC контролирует целостность заголовка.

Блок данных data_block, следующий за заголовком, и его проверочный код data_CRC присутствуют в пакетах с tcode = 1, 7, 9, A. Блок содержит целое число квадлетов; при необходимости остаток последнего квадлета заполняется нулями. Максимальный размер блока определяется скоростью передачи.

Таблица. Типы пакетов асинхронных транзакций

tcode Транзакция (субакция)
0 Запрос записи квадлета данных (Write Request)
1 Запрос записи блока данных (Write Request)
2 Ответ записи (Write Response)
3, C, D, F Резерв
4 Запрос чтения квадлета данных (Read Request)
5 Запрос чтения блока данных (Read Request)
6 Ответ чтения квадлета данных (Read Response)
7 Ответ чтения блока данных (Read Response)
8 Начало цикла (Cycle Start)
9 Запрос блокированной транзакции (Lock Request)
A Пакет асинхронного потока (Asynchronous Streaming Packet)
B Ответ блокированной транзакции (Lock Response)
E Не стандартизован

Допустимый размер блока данных, передаваемых в одном пакете, зависит от скорости (см. следующую таблицу).

Таблица. Допустимый размер блока данных пакета

Скорость Максимальный размер для асинхронных передач, байт Максимальный размер для изохронных передач, байт
S100 512 1024
S200 1024 2048
S400 2048 4096
S800 4096 8192
S1600 4096 16384
S3200 4096 32768

 

Таблица. Коды результата выполнения

rcode Результат
0 resp_comlete, успешное выполнение запроса
1-3 резерв
4 resp_conflict_error, отвечающий агент обнаружил конфликт ресурсов (запрос можно повторить позже)
5 resp_data_error, аппаратная ошибка, данные недоступны
6 resp_type_error, недопустимое значение полей в пакете запроса
7 resp_address_error, указанные адрес недоступен
8...Fh резерв

Пакет квитирования имеет длину всего 1 байт (cм. следующий рисунок), в нем содержится 4-битный код квитирования ack_code (см. следующую таблицу), достоверность которого проверяется по его двоичному дополнению ack_parity.

 

Таблица. Коды квитирования

ack_code Имя Значение
0 Резерв Резерв
1 ack_complete Пакет успешно принят. Если это квитанция пакета запроса, то пакет ответа не предполагается
2 ack_pending Пакет запроса успешно принят, пакет ответа будет послан (для пакетов ответа не используется)
3 Резерв Резерв
4 ack_busy_x Пакет не принят из-за занятости узла (возможен успех при повторной попытке)
5 ack_busy_A Пакет не принят из-за занятости узла. Данные будут приняты при следующем повторе (фаза A), когда узел освободится
6 ack_busy_B Пакет не принят из-за занятости узла. Данные будут приняты при следующем повторе (фаза В), когда узел освободится
7-Ah Резерв Резерв
Bh ack_tardy Пакет не принят из-за неготовности узла, находящегося в состоянии standby; попытку можно повторить через некоторое время (1394a)
Ch ack_conflict_error Пакет не принят из-за конфликта ресурсов (1394a)
Dh ack_data_error Пакет не принят из-за ошибки данных (CRC или несоответствие длины пакета заявленной)
Eh ack_type_error Пакет не принят из-за недопустимого типа (неверные параметры, неподдерживаемый тип транзакции)
Fh ack_address_error Пакет не принят из-за недоступности указанного адреса (Dest_Offset) в целевом узле(1394a)

 

Обработка ошибок и механизм повторов


Успешному выполнению асинхронных транзакций может помешать ряд причин:

  • занятость целевого узла (заполнение его входных и выходных очередей);
  • заблокированность целевого узла (он находится в процессе выполнения блокированной транзакции от другого узла);
  • ошибки при передаче пакетов.

Уровень транзакций предоставляет драйверам надежные сервисы, уведомляющие драйвер об успехе или неуспехе транзакции. Однако средства IEEE 1394 (уровень транзакций) обеспечивают автоматические повторы только для случая занятости целевого узла.

 

ПОСТОВОЙ: Советую обратить внимание на бесплатный видеокурс по Windows 7. Всё по делу и ничего лишнего.