С В Я З Ь С

Логотип 'АГАТ'

        Простите, раздел пока не до конца завершен. Пока тут только протокол.

                    ПРОТОКОЛ СВЯЗИ С "АГАТОМ"
                            ВЕРСИЯ 2.
                           О. ВОРОНОВ

     3 сигнала (кроме земли):

     IBM    ¦ N IBM ¦ АГАТ  ¦ N АГАТА ¦ НАЗВ. ¦ НАПР.
     -------+-------+-------+---------+-------+------
     PE     ¦ 23    ¦ DATA1 ¦  3      ¦ DATA  ¦ А->I
     ACKNLG ¦ 19    ¦ DATA3 ¦  7      ¦ CLK   ¦ A->I
     INIT   ¦ 26    ¦ BUSY  ¦ 21      ¦ ACK   ¦ I->A
     Gnd    ¦  2    ¦ Gnd   ¦  2      ¦ Gnd1  ¦
     Gnd    ¦ 18    ¦ Gnd   ¦ 14      ¦ Gnd2  ¦

     Номера контактов приведены по концам кабеля принтера,  кото-
рый вставляется в СМ6337 (СМ6337.06), так что все номера соответ-
ствуют его контактам.

     1) АГАТ -> IBM

     На входе программы у "Агат"-а адрес  начала  блока  и  длина
блока (1-FFFF). Блок передаётся пакетами.  В  каждом  пакете  256
байт данных.
     "Агат" передаёт байты по битам, начиная с младшего.  Сначала
выставляется на линии CLK и DATA единица  (запрещено  чтение  для
IBM), потом после паузы 0, одновременно с этим бит  данных  выво-
дится на линию DATA. Опять делается пауза и т.д. После  окончания
передачи последнего бита на линии CLK и DATA опять выставляется 1.
     В начале пакета на всякий случай передаётся 5 байт  00,  по-
том идёт синхропоследовательность A5 38 6E 3D  (настройка  чтения
IBM идёт по первому байту A5, затем вызывается  просто  процедура
чтения байта без синхронизации и сравниваются остальные 3 байта с
тем, что должно быть).
     Затем идут:
     - 1 байт - номер пакета в блоке (1-256, 256  передаётся  как
00);
     - байт-признак последнего пакета (00 - не  последний,  FF  -
последний);
     - длина пакета (1-256, 256 передаётся как 00), может быть не
равной 256 только для последнего пакета;
     - 256 байт данных;
     - 2 байта контрольной суммы, вычисляемой перед посылкой  па-
кета; сумма вычисляется по всем байтам данных (256 или меньше), к
младшему байту ещё прибавляется номер пакета (с  переносом,  если
надо, в старший байт), потом к старшему  байту  прибавляется  ещё
длина пакета (0-FF).
     - в конце - 5 нулевых байт (00 00 00  00  00),  которые  при
чтении игнорируются;
      а потом самое интересное: АГАТ выставляет  на  линиях  CLK,
DATA значения CLK=1, DATA=0 (ожидание подтверждения), и  в  тече-
ние 8 тактов (когда CLK меняется на 0 и обратно переходит в  еди-
ницу) читает значения с IBM-овского сигнала ACK (после установле-
ния CLK в 0). IBM должен держать ACK=1 во время приёма пакета,  а
здесь он должен передать (начиная, как обычно, с  младшего  бита)
один из двух кодов: E6 в случае успешного приёма и  D4  в  случае
ошибки. Оба эти значения имеют младший бит=0. Если IBM  пропусти-
ла синхробайт или часть данных и не  успела  отследить  появление
первой комбинации "ожидание подтверждения"  (CLK=1,  DATA=0),  на
линии останется 1 (по крайней мере в первом бите байта). IBM дол-
жна установить сигнал  на  линии  ACK  ещё  во  время  комбинации
(CLK=1, DATA=0).
     5 нулевых байт в конце нужны потому, что IBM  может  пропус-
тить часть бит и опоздать к передаче ответа. Нулевые  байты  дают
ей резерв времени, чтобы подождать, когда  на  линиях  CLK,  DATA
появится комбинация "ожидание подтверждения". IBM ещё должна тра-
тить время на вычисление контрольной суммы, так что это компенси-
рует его.
     В самом конце (после чтения байта) "Агат" передаёт ещё 1 ну-
левой байт.
     "Агат" передаёт блок, пока не получит  сигнал  подтверждения
(E6).  "Агат" повторяет пакет, если пришёл ответ  об  ошибке  или
неправильный ответ.
     IBM принимает пакет; если не сошлась контрольная сумма,  она
посылает отрицательный ответ; иначе:
     если  номер    пакета    меньше    требуемого,    посылается
подтверждение;
     если номер пакета равен требуемому, он сохраняется в буфере.
IBM должна для надёжности прочитать пакет без ошибок не менее 2-х
раз (между ними может быть сколько угодно ошибочных пакетов),  но
передать подтверждение (E6) только  для  последнего  раза,  иначе
"Агат" не повторит блок. Если два пакета с сошедшейся контрольной
суммой не совпали, значит,  один  из  них  компенсировал  ошибку.
Снова читаются 2 (или больше) пакетов.
     если номер пакета больше требуемого,  мы  что-то  пропустили
(это почти невозможно без подтверждения),  IBM  должна  завершить
работу с сообщением об ошибке.



Возврат на уровень вверх