Шина IEEE 1394 — FireWire

Типы транзакций

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

Транзакции чтения в пакете запроса несут полный адрес назначения, длину запрашиваемого блока и идентификатор источника. Запрашиваемая длина определяется кодом типа транзакции (чтение квадлета или блока), а для чтения блока — полем длины. Пакет ответа чтения несет код результата выполнения и собственно данные чтения.

Блокированные транзакции чтения-модификации-записи в пакете запроса кроме адреса назначения несут значения аргумента и данных транзакции. Эти значения могут быть как 32, так и 64-битными (одинаковой длины), аргумент может и отсутствовать. Расширенный код транзакции задает тип выполняемой операции (таблица) и, соответственно, наличие или отсутствие аргумента. Поле длины определяет разрядность аргумента и данных и может принимать значение 4 (только 4-байтные данные), 8 (аргумент и данные по 4 байта или только данные размером 8 байт) или 16 (аргумент и данные по 8 байт). Пакет ответа по формату аналогичен ответу на чтение блока, где в поле данных возвращаются старые данные (считанные перед модификацией). Длина блока данных ответа может составлять 4 или 8 байт.

Расширенный код транзакции Имя Назначение
0000h Резерв Резерв
0001h mask_swap Биты целевой ячейки, которым соответствуют единичные значения в arg_value, заменяются на биты из data_value
0002h compare_swap Содержимое целевой ячейки заменяется на data_value, если ее прежнее значение совпадает с arg_value
0003h fetch_add Содержимое целевой ячейки складывается с data_value; числа рассматриваются как целые, целевой адрес указывает на самый старший байт числа (big endian)
0004h litle_add То же, но целевой адрес указывает на самый младший байт числа (litle endian)
0005h bounded_add Если содержимое целевой ячейки не равно arg_value, то она заменяется на сумму прежнего и data_value; иначе целевая ячейка не изменяется
0006h wrap_add Если содержимое целевой ячейки не равно arg_value, то она заменяется на сумму прежнего и data_value; иначе она заменяется на data_value
0007h vendor Назначение определяется разработчиком
0008-FFFFh Резерв Резерв

 

Яндекс.Метрика