Инструменты пользователя

Инструменты сайта


prog:spi:ve1_5600vv3

Подключение 5600ВВ3Т к МК 1986ВЕ1Т по SPI

В данной статье рассматривается настройка микросхемы 5600ВВ3Т с помощью МК 1986ВЕ1Т по интерфейсу SPI. Проект для Keil, в котором реализована настройка как управляющих регистров микросхемы, так и таблицы MAC адресов, можно скачать по ссылке.

Основные сведения о микросхеме 5600ВВ3Т

Микросхема 5600ВВ3Т функционирует как 4-х портовый коммутатор по стандарту IEEE 802.3 10Base-T и 100Base-TX в полном и полудуплексе. Помимо 4-х основных портов, обладающих контроллерами канального (MAC) и физического уровня (PHY), микросхема имеет также дополнительный пятый порт, реализованный на основе только контроллера канального уровня (MAC). Приём и передача данных дополнительного порта осуществляется при помощи интерфейса MII, что позволяет использовать его в качестве порта расширения для объединения двух микросхем, либо подключить к нему контроллер физического уровня (PHY) и использовать как полноценный пятый порт коммутации данных.

Механизм коммутации пакетов

Основная задача коммутатора в сети Ethernet – пересылка пакетов между подключенными к коммутатору устройствами. Осуществляется данная пересылка на канальном уровне, т.е. коммутация данных осуществляется на основе MAC адреса, содержащегося в коммутируемом пакете. Наиболее распространенный формат пакета (кадра) – Ethernet II, на котором строятся все вышестоящие протоколы, например, протоколы сетевого уровня: IPv4, IPv6, ARP и т.д.

mac_struct.jpg

Как видно из рисунка выше, в начале пакета Ethernet II идёт заголовок, состоящий из MAC адреса назначения, т.е. кому предназначен пакет, MAC адреса источника, т.е. от кого отправлен пакет, и типа пакета, обозначающий либо размер данных, либо протокол, который инкапсулирован в поле данных. Далее идёт поле данных и CRC.

Для обеспечения коммутации пакетов в микросхеме 5600В3Т реализована таблица MAC адресов размером 16 Кбайт, в которой может одновременно содержаться информация о 2048 MAC адресах. Каждая запись в таблице представляет собой 64-х разрядное слово, основными полями в котором являются MAC адрес устройства и номер порта коммутатора, к которому подключено данное устройство. Таблица адресов может быть заполнена как автоматически при приёме пакетов, так и вручную посредством SPI интерфейса. Наглядный рисунок, показывающий структуру таблицы MAC адресов, приведён в данной статье.

При приёме пакета коммутатором считывается MAC адрес назначения и передаётся ядру коммутации на обработку. Ядро коммутации проверяет по таблице MAC адресов, к какому порту подключено устройство с указанным адресом, и, если такой MAC адрес записан в таблицу, пересылает ему пакет, если нет – отправляет пакет на все порты, кроме того, с которого пакет был получен.

После обработки адреса назначения ядро коммутации начинает обработку адреса источника. Ядро пытается найти адрес источника в соответствующей хэш-функции адреса строке таблицы МАС адресов. Если такой адрес уже существует в таблице, ядро коммутатора обновляет его счетчик старения. Если адреса в таблице еще нет, ядро делает запись в свободной ячейке соответствующей строки таблицы. Если все ячейки строки уже заняты, перезаписывается самая старая ячейка.

Так как большую часть пакета (от 46 до 1500 байт) занимает поле данных, в то время как поле заголовка имеет размер всего 14 байт, то чтобы ускорить процесс коммутации пакетов, обработка MAC адреса назначения и MAC адреса источника начинается сразу же после считывания заголовка пакета, параллельно приёму основной части пакета.

Синхронный последовательный интерфейс управления

Для настройки режима работы в микросхеме 5600ВВ3Т реализован синхронный последовательный интерфейс управления (СПИУ), он же SPI, работающий в режиме ведомого устройства. Посредством данного интерфейса можно установить режим работы микросхемы, настроить маски ретрансляции портов, а также редактировать таблицу MAC адресов.

Интерфейс СПИУ микросхем 5600ВВ3Т соответствует стандарту SPI Motorola, только начиная с 3 ревизии (1543), в которых вывод данных осуществляется по срезу тактового сигнала. В микросхемах 1 и 2 ревизии вывод данных осуществляется по фронту тактового сигнала.

Формат транзакции по интерфейсу СПИУ для микросхем 3 ревизии имеет размер 16-бит и выглядит следующим образом:

ADDRESS[5:0] R/W «0» DATA[7:0]

где ADDRESS – 6-битный адрес внутреннего регистра коммутатора;

R/W – поле запись/чтение: логическая единица соответствует записи в регистр, логический ноль – чтению из регистра;

DATA – записываемый или считываемый байт данных.

Подключение 5600ВВ3Т к МК 1986ВЕ1Т по интерфейсу SPI

На основе двух микросхем 5600ВВ3Т, объединённых между собой с помощью порта расширения, компания Миландр предлагает «Восьмиканальный коммутатор сетей протокола IEEE 802.3/Ethernet 10/100 Мбит/с». Для начала работы с платой не требуется дополнительных действий по сборке и настройке, достаточно установить конфигурационные выводы MODE в положение «1111», и микросхемы будут автоматически определять состояние линии и работать в режиме коммутации по сетевым адресам.

Нашей задачей будет по интерфейсу SPI считать таблицу MAC адресов и определить все активные устройства, подключенные к коммутатору.

Для подключения к 5600ВВ3Т по интерфейсу SPI был выбран МК 1986ВЕ1Т, который имеет модуль порта синхронной последовательной связи (SSP) и поддерживает режим обмена по стандарту SPI фирмы Motorola. В проекте будем использовать контроллер SSP1.

Подключение 1986ВЕ1Т к 5600ВВ3Т по SPI:

1986ВЕ1Т5600ВВ3Т
TX (PD2) DI
RX (PD3) DO
SCK (PD4) CLK
FSS (PD5) CS
GNDGND

Сигнал TX подключаем на DI, RX на DO, SCK на CLK, FSS на CS. И обязательно подключаем отдельный провод для соединения земли на двух платах. Чем лучше будет земля, тем стабильнее будет обмен.

Проект, демонстрирующий работу с 5600ВВ3Т по SPI

В проекте показана работа связки МК 1986ВЕ1Т и 5600ВВ3Т (рев. 3) по SPI. В таблицу MAC-адресов записывается строка из сформированной ранее структуры, в которой указан MAC адрес, значение счётчика старения, бит активности и номер порта. Функция Get_Addr() позволяет вычислить адрес в таблице MAC адресов на основании MAC адреса, указанного в структуре, а также выбранного номера ячейки. Далее производится одиночное и полное считывание таблицы MAC адресов в соответствующие структуры. На основании считанных данных выполняется поиск адресов с активными записями (VALID=1). Ссылка на проект находится в начале страницы.

Ниже приведён фрагмент main.c, в котором показана работа программы. Дополнительно в файлах 5600VV3.c и 5600VV3T.h приведены функции для записи/считывания из регистров, а также для записи/считывания строки из таблицы MAC адресов.

// Заполнение структуры для записи в MAC-таблицу
MAC_String.MAC = 0x227812CD236F;
MAC_String.OLD_CNT = 0x234;
MAC_String.VALID = 0x1;
MAC_String.PORT_NUM = 0x2;

TXRX_Data(pBRD_SPIx, AGE_CONTROL_0, WRITE, 0x6F); // Отключение удаления записей из MAC-таблицы при достижении счётчиком старения значения 0xFFF
	
Write_MAC_String(pBRD_SPIx, Get_Addr(MAC_String, 0x5), &MAC_String); // Запись строки в MAC таблицу
	
Read_MAC_String(pBRD_SPIx, Get_Addr(MAC_String, 0x5), &MAC_String1); // Чтение строки из MAC таблицы
	
Read_MAC_Table(pBRD_SPIx, MAC_Table); // Чтение всей MAC-таблицы
		
for(i=0;i<2048;i++) // Определение адресов строк с активными записями
{
	if(MAC_Table[i].VALID != 0)
	{
		N[j] = i;
		j++;
	}
}

Для хранения считанных строк используется массив специальных структур MAC_Table, в которых выделены поля под MAC адрес, значения счётчика старения, бит активности и номер порта. После выполнения программы в массиве N будут прописаны номера строк таблицы MAC адресов с активными записями.

Открыв теперь в массиве структур MAC_Table активную запись, можно увидеть информацию о подключённом устройстве.

Если подключенное к коммутатору устройство ведёт интенсивную передачу данных, то в таблице MAC адресов может быть добавлена дополнительная запись с данными этого устройства по адресу 0x7. Со временем запись удаляется, данные при этом передаются без сбоев.
prog/spi/ve1_5600vv3.txt · Последние изменения: 2019/04/02 11:10 — katya