Пакеты запросов и ответов асинхронных передач для различных транзакций имеют форматы. Пакет состоит из заголовка и необя зательно блока данных. Ниже перечислено назначение полей, используемых в заголовках пакетов различных типов:
Блок данных 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. Всё по делу и ничего лишнего.