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

При приеме нового кадра вначале проверяется бит I/G (Individual/Group) в поле адреса приемника. Если это индивидуальный адрес (бит I/G=0), то проверяя физический адрес, контроллер сравнивает его с единственным ад­ресом, указанным в 48-битной ячейке PADDR1 памяти параметров, если бит IАМ=0 в регистре PSMR. Если же бит IАМ=1, то специальная хэш-таблица индивидуальных адресов в ячейках IADDR1—IADDR4 используется для сравнения и распознавания группового адреса.

Если это групповой адрес (бит I/G=1), то вначале контроллер проверяет, является ли адрес широковещательным. Широковещательный адрес пред­ставляет собой код, состоящий только из 1. Если прием широковещатель­ных адресов разрешен (бит BRO=0 в регистре PSMR), то кадр принимается. Если же бит BRO=1, то все кадры с широковещательными адресами отбра­сываются, даже если установлен бит PRO=1.

Если сравнение адреса прошло успешно, то начинается прием кадра, неза­висимо от значения сигнала на контакте RRJCT. Если это групповой, но не широковещательный адрес, то производится сравнение адреса с использо­ванием хэш-таблицы групповых адресов в ячейках GADDR1—GADDR4.

Если проверка адреса прошла неудачно, и если в регистре режима PSMR установлен, бит PRO=0, то проверка адреса должна была выполняться для всех кадров и поэтому кадр отбрасывается. Если же бит PRO=1, то кадры принимаются без проверки адреса, если сигнал на контакте RRJCT пассив­ный, и отбрасываются, если сигнал RRJCT активный. При этом в слове со­стояния последнего буфера приема кадра устанавливается бит признака М(Miss). Если бит М=1, то кадр был принят без контроля адреса, а если бит М=0, то кадр был принят после проверки совпадения поля адреса получате­ля и адреса станции.

Если внешняя САМ-память используется при сравнении адресов, то следует установить режим без проверки совпадения адресов (promiscuous), установив бит PRO=1, и тогда кадр может быть отброшен, если от САМ-памяти будет выставлен активный сигнал RRJCT во время приема кадра. Если САМ-память используется для хранения адресов, которые должны быть отброшены, а не приняты, то сигнал для на контакте RRJCT для САМ-памяти должен быть инвертирован.

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

Если длина принимаемого кадра превышает размер буфера приема, то кон­троллер проверяет не занятость следующего буфера в таблице RxBD и, если буфер не занят, продолжает прием кадра в новый буфер. Максимальная длина приемного буфера задается пользователем в ячейке MRBLR протокол независимой памяти параметров SCC-контроллера. При работе с Ether­net-протоколом рекомендуется в эту ячейку записывать значение не меньше 64 байт.

По окончании приема кадра, когда сигнал несущей станет пассивным, под­считывается контрольная сумма принятого кадра и кадр сохраняется в буфере.

При приеме кадра Ethernet-контроллер постоянно проверяет длину кадра на максимальное и минимальное значение. Максимальная длина кадра данных (или число байт между начальным ограничителем и концом кадра) задает­ся в ячейке MFLR памяти параметров и по стандарту 802.3 она равна 1518 байт. Если получен кадр, длина которого превышает значение MFLR, то излишек кадра отбрасывается, а 1518 байт кадра записываются в буфер. В слове состояния последнего буфера устанавливается бит LG:= 1 (LonG). При этом длина кадра, записанная в ячейку длины последнего буферного дескриптора, является длиной реально принятого кадра. Специальный вы­читающий счетчик в ячейке DMACNT контролирует, сколько байт кадра передано в буфер памяти. Минимальная длина кадра данных задается в ячейке MINFLR памяти параметров, и по стандарту 802.3 она равна 64 бай­там. Если получен кадр, длина которого меньше значения MINFLR и бит RCH=0 в регистре режима PSMR, то этот кадр отбрасывается и в слове со­стояния последнего буферного дескриптора текущего кадра устанавливается бит SH:=1 (SHort), если же бит RCH=1, то кадр будет принят.