Ethernet - пример стандартной технологии коммутации пакетов, страница 6

Далее контроллер заполняет биты статуса переданного кадра в слове состоя­ния последнего буфера и сбрасывает бит готовности буфера к передаче (бит R:=0). Если же текущий буфер кадра передан, но бит L=0, то для данного буфера только сбрасывается бит R:= 0, и контроллер переходит к обработке следующего буфера в таблице TxBD. Если в слове состояния переданного буфера установлен, бит прерывания I=1, то будет выработан запрос на пре­рывание.

Если во время передачи кадра данных обнаруживается коллизия, то кон­троллер выполняет специальную процедуру остановки, возвращается к пер­вому буферу кадра и через некоторый интервал времени делает попытку по­вторной передачи. Для каждого переданного кадра данных в слове состоя­ния последнего буфера кадра устанавливаются биты RC, значения которых определяют, сколько повторных попыток потребовалось, чтобы успешно закончить передачу текущего кадра. Общее число повторных попыток пере­дачи задается в ячейке RET_LIM (стандартное значение 15). При начале передачи контроллер сохраняет первые 5—8 байт передаваемого кадра во внутренней памяти в ячейках TBUFx_xxx, поэтому при повторной передаче не требуется дополнительная загрузка этих данных из буферов данных.

Единственное ограничение состоит в том, что первый буфер кадра должен иметь длину не менее 9 байт. Текущее значение числа повторных передач подсчитывается в ячейке RET_CNT, и если число повторов превысило зна­чение RET_LIM, то генерируется ТХЕ запрос на прерывание в регистре со­бытий, устанавливается бит ошибки RL:=1 в слове состояния буферного дескриптора, передача данных из буфера останавливается и буфер закрыва­ется. Продолжение передачи возможно после получения контроллером ко­манды RESTART TRANSMIT.

Ячейка Р_Рег памяти параметров предназначена для определения "степени активности" станции после обнаружения состояния коллизии. В нормаль­ном режиме в эту ячейку заносится код 0х0000 и выполняется стандартный алгоритм расчета следующего момента выхода станции в сеть для повторной передачи. Если же в эту ячейку записан код от 1 до 9, то данный код будет добавлен к счетчику тайм-аута ожидания, и станция выйдет в сеть через большее время. Таким образом, значение 9 предназначено для менее актив­ных станций. Пользователю также предоставляется возможность управлять временем выхода станции в сеть для повторной передачи через бит STB (Stop Backoff Timer) в регистре режима Ethernet-контроллера. Если бит STB=0, то счетчик времени работает в обычном режиме. Если же бит STB=1, то счетчик будет останавливаться всякий раз, когда в канале будет активным сигнал несущей частоты.

Если во время передачи обнаруживается ошибка незаполнения буфера underrun, которая возникает, если при передаче мультибуферных кадров дан­ный центральный процессор не успел подготовить для передачи новые бу­феры, содержащие данные текущего кадра, а данные из последнего подго­товленного буфера уже переданы в сеть, то Ethernet-контроллер прерывает текущую передачу, передает 32 "1" бита, которые позволят определить дру­гим станциям CRC ошибку, закрывает буфер, устанавливает бит ошибки UN:=1 в слове состояния BD и генерирует, если разрешено, ТХЕ-прерывание через регистр событий SCC-канала. После получения команды возоб­новления передачи RESTART TRANSMIT контроллер продолжает дальней­шую передачу.

При передаче Ethernet-контроллер постоянно контролирует наличие сигнала несущей частоты. Если этот сигнал будет сброшен, но состояние коллизии не будет зафиксировано, то генерируется ошибка потери несущей частоты. Признаком этой ошибки будет установка бита CSL=1 в слове состояния те­кущего BD. Передача кадра будет продолжена в нормальном режиме.