Рис. 6.15. Протокол LPC
В поле START
возможны следующие коды:
♦ 0000 — начало цикла обращения хоста к устройству;
♦ 0010 — предоставление доступа ведущему устройству 0;
♦ 0011 — предоставление доступа ведущему устройству 1;
♦ 1111 — принудительное завершение цикла (abort).
Остальные коды зарезервированы.
Поле CYCTYPE
задает тип и направление передачи. Бит 0 задает направление (0 — чтение, 1 — запись), биты [2:1] — тип обращения (00 — порт, 01 — память, 10 — DMA, 11 — резерв), бит 3 — резерв (0).
Поле TAR
(Turn-Around) служит для смены «владельца» шины LAD[3:0]
, оно занимает 2 такта. В первом такте прежний владелец помещает код 1111, во втором переводит буферы в третье состояние.
Поле ADDR
служит для передачи адреса. В цикле памяти оно занимает 8 тактов (32 бита), в цикле ввода-вывода — 4 такта. Передача адреса начинается со старших битов (чтобы раньше срабатывал дешифратор адреса).
В поле DATA
передаются данные. На каждый байт требуется 2 такта, передача начинается с младшей тетрады. Многобайтные передачи начинаются с младшего байта.
Поле SYNC
служит для введения тактов ожидания устройством, к которому выполняется обращение. Оно может содержать следующие коды (остальные зарезервированы):
♦ 0000 — готовность (без ошибок), для DMA означает снятие запроса для данного канала;
♦ 0101 — короткое ожидание (несколько тактов);
♦ 0110 — длинное ожидание;
♦ 1001 — готовность и присутствие запроса для канала DMA (для других типов обращения недопустимо);
♦ 1010 — ошибка: данные переданы, но возникли условия, при которых на шинах PCI или ISA выработался бы сигнал SERR#
или IOCHK#
(для DMA также означает снятие сигнала запроса).
Поле синхронизации обеспечивает контроль передачи, введение тактов ожидания и механизм тайм-аутов. Начав цикл, хост читает поле синхронизации. Если в течение трех тактов адресованное устройство не ответит, хост считает, что его нет на шине, и прекращает транзакцию. Если приходит код короткого ожидания, хост дожидается его смены на готовность или ошибку, но после 8 тактов ожидания он прервет транзакцию по тайм-ауту. Код длинного ожидания может приходить сколь угодно долго, ответственность за отсутствие зависания ложится на адресованное устройство. При прямом управлении поле SYNC
выставляется хостом, и устройство должно терпеливо ожидать готовности, без каких-либо тайм-аутов. В самом быстром варианте (без тактов ожидания) поле SYNC
занимает один такт.
На рис. 6.16 приведена последовательность полей при обращениях хоста к памяти или портам (серым цветом помечены поля, вводимые устройством). Во всех этих обращениях передается по одному байту. Для чтения памяти, предполагая 5 тактов поля SYNC
(время доступа к EPROM 120 нс), требуется 21 такт (0,63 мкс), что обеспечивает скорость чтения памяти 1,59 Мбайт/с. Если память конвейеризирована, то последующие обращения будут быстрее. Для записи в память поле SYNC
займет 1 такт, а весь цикл — 17 тактов (0,51 мкс), что дает скорость записи 1,96 Мбайт/с. Обращения к портам за счет более короткой адресации и без тактов ожидания (1 такт SYNC) занимают по 13 тактов (0,39 мкс), что дает скорость 2,56 Мбайт/с для чтения и записи.
Рис. 6.16. Обращения к памяти и портам: а — чтение, б — запись
Для организации обмена по DMA и прямого управления хост должен иметь по одной входной линии LDRQ#
для каждого подключенного устройства, использующего эти функции. По этой линии устройство передает состояние запросов каналов DMA в последовательном коде, как показано на рис. 6.17. Посылка начинается со старт-бита, за которой следуют код номера канала и бит запроса ACT: 1 (высокий уровень) — запрос активен, 0 — пассивен. Номер канала 4 (код 100) зарезервирован для прямого управления (он соответствует традиционно недоступному каналу DMA). Посылка передается при каждой смене состояния запросов. Нормально таким способом передается лишь запрос, а снятие его сигнализируется полем SYNC
.
Рис. 6.17. Посылка запроса DMA или прямого управления
Передача данных DMA (рис. 6.18) выполняется под управлением хоста, но несколько отличается от обычных обращений к портам и памяти. Здесь появляются новые поля:
Читать дальше