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

Пользователь может управлять процессом записи байтов кадра в буферы па­мяти по системной шине. Для этого предназначены ячейки MAXD1, MAXD2. Ячейка MAXD1 используется, если сравнение адресов прошло успешно, а ячейка MAXD2 — в режиме без проверки совпадения адресов (promiscuous mode). Пользователь имеет возможность остановить запись данных в память при передаче установленного в этих ячейках числа байт, и остаток кадра будет отброшен. Затем контроллер дождется окончания приема всего кадра, или пока не будет принято MFLR байт кадра, и заполнит в слове состояния буфера биты статуса принятого кадра и длину реально принятого кадра. Ес­ли такая остановка не требуется, то при инициализации в эти ячейки зано­сится значение 1518 байт. Эти ячейки могут быть использованы для контро­ля состояния сети, например, для приема только заголовков пакета, содержащих адресное поле, для проверки работающих в сети станций.

После завершения приема кадра, и если бит SIP в регистре PSMR установ­лен в 1, то байт информации с контактов 15—8 параллельного порта В будет добавлен в последний буфер кадра. Если эти контакты настроены как выхо­ды, то байт данных читается из регистра PBDAT. Этот байт называется tag-байт. Если кадр данных отбрасывается, то и tag-байт тоже отбрасывается. Далее контроллер устанавливает в слове состояния буфера бит последнего, буфера L:=1, заполняет биты состояния принятого кадра и сбрасывает бит не занятости Е:=0. Затем контроллер генерирует маскируемое прерывание, которое сообщает процессору, что кадр данных принят и находится в памя­ти, и переходит к ожиданию приема следующего кадра данных.

Для временного хранения принятой информации каждый Etherhet-контроллер имеет внутренние буферы FIFO. Данные из FIFO по SDMA-каналам под управлением RISC-контроллера начинают передаваться в соответст­вующие буферы памяти. Если RISC-контроллер не успевает очищать ячейки FIFO для приема новой информации из сети, и в момент прихода новой порции данных все ячейки FIFO окажутся занятыми, то возникает ошибка переполнения буферов overrun. При этом контроллер будет вынужден записать новые данные поверх старых, что приведет к потере информации. Далее текущий буфер закрывается, в его слове состояния устанавливается бит ошибки переполнения OV:= 1 и через регистр событий генерируется, если оно разрешено, RXF-прерывание к центральному процессору и увеличивается счетчик потерянных кадров в ячейке DISFC памяти параметров. После вышеуказанных действий контроллер переходит в режим "охоты" и ожидает новый кадр данных.

Если при приеме правильного кадра данных нет свободных буферов в памяти для сохранения информации, то кадр будет потерян. Признаком этой ошибки является установка бита ошибки занятости BSY:=1 в регистре собы­тий Ethernet-контроллера и увеличение счетчика потерянных кадров в ячейке DISFC памяти параметров.

Если Ethernet-контроллер принял кадр данных с длиной, не кратной 8 битам, то вначале он проверяет контрольную сумму кадра, и если будет обнаружена ошибка проверки CRC суммы, то регистрируется ошибка принятия невыравненного кадра, устанавливается бит ошибки NО:=1 в слове состоя­ния BD и увеличивается счетчик принятых, некратных 8, кадров в ячейке ALEC памяти параметров. Если же ошибка проверки CRC не регистрирует­ся, то продолжается обычный прием кадров.

Если при приеме кадра данных контроллер обнаруживает ошибку проверки CRC контрольной суммы, то текущий буфер закрывается, устанавливается бит ошибки CRC:=1 в его слове состояния, устанавливается бит RXF-прерывания в регистре событий и увеличивается счетчик CRC ошибок в ячейке CRCEC памяти параметров. После приема кадра с ошибкой провер­ки CRC суммы, приемник переходит в режим поиска нового кадра.