**Новая микросхема 1923КХ028 отличается увеличенной пиковой производительностью передачи пакетов в секунду, поддержкой сетей 1 Гбит и расширенным количеством коммутируемых портов.** функциональный аналог: Prestera 98DX167‑A2‑BCW1I000 (компания Marvell) \\ технология: 40нм (Тайвань, CLN40LP+) http://www.design-reuse-embedded.com/displayIP/IOT_2_6 \\ КОРПУС: 576‑выводной металлокерамический корпус типа BGA МК8303.576-2. \\ Коммутатор обеспечивает аппаратные комплексные функции, такие как QoS, совместимую с IEEE 802.1p, организацию буферизации данных, поддержку jumbo-пакетов, VLAN-меток и управление потоками (flow control). Встроенная система **QoS** позволяет определить приоритет трафика через различные порты на основе алгоритмов PQ, WRR, WFQ.(https://habrahabr.ru/post/62831/) Микросхема имеет расширенные функции AVB, а именно: * синхронизацию, совместимую с IEEE 802.1AS/IEEE 1588 v2. * протокол резервирования потоков (SRP), совместимый с IEEE 802.1Qat. * обработку и организацию очередей чувствительных ко времени потоков согласно IEEE 802.1Qav. Архитектура обработки пакетов предполагает два типа маршрута: * медленный - с применением программного обеспечения (ПО) хоста. * быстрый - с применением таблиц MAC- и VLAN-адресов. Скорость работы портов передачи данных варьируется от 10 до 1000 Мбит/с. На скоростях 10 и 100 Мбит/c поддерживается полудуплексный и полнодуплексный режим работы, а в режиме 1000 Мбит/c — только полнодуплексный режим. Для обеспечения обработки пакетов по медленному маршруту с применением хост-системы в состав микросхемы входит шина PCI express версии 2.0 со встроенным PHY-трансивером x1, функционирующая в режиме Endpoint на скорости 5 Гбит/c. При классическом быстром маршруте обработки пакетов коммутатор обеспечивает высокопроизводительную аппаратную классификацию пакетов уровня L2 для перенаправления их в локальные сегменты сети Ethernet. Аппаратно поддерживаются пакеты unicast, broadcast. =====Вопросы===== //- Как реализовать питание, чтобы 1,1 и 3,3 В появились одновременно?// Например, на отладочной плате стоят модули питания от Texas Instruments LMZ22005, формирующие необходимые напряжения питания 3,3 В и 1,1 В. Изначально включается модуль, формирующий +3,3В из 12В, далее с помощью вывода Enable запускается регулятор на +1,1 В. Такая подача питания считается условно одновременной. ---- //- У микросхемы есть PHY PCI-E, есть ли для него драйвер и под какие операционные системы?// Имеется драйвер для ОС Linux версия ядра 4.10.17. Драйвер поставляется по запросу в тех.поддержку. Драйвер под Windows не планируется. ---- //- При установке драйвера под Linux при помощи документа "Quick Start" для работы устройства через PCI Express команды в терминале нужно выполнять под суперпользователем?// Под правами суперпользователя($ sudo) нужно выполнять только команды: **insmod switch.ko** и **ifconfig fp0 up** Например, команду **make all** необходимо выполнять без прав администратора (без sudo), иначе может появиться ошибка: > make[2]: ** Нет правила для сборки цели «arch/x86/entry/syscalls/syscall_32.tbl», требуемой для «arch/x86/entry/syscalls/../../include/generated/asm/syscalls_32.h». Останов.** ---- //- При использовании микросхемы 1923КХ028 в режиме неуправляемого коммутатора, соединённые посредством него ПК не пингуются. // В текущей первой ревизии микросхема 1923КХ028 в режиме неуправляемого коммутатора работает на скорости 1 Гбит/с, поэтому все подключаемые к коммутатору ПК также должны быть настроены на скорость 1 Гбит/c, либо должен быть выбран режим автосогласования. ---- //- Объединяю с помощью отладочной платы 1923КХ028 в сеть несколько ПК, при этом в любом режиме (управляемый по PCI, управляемый по SPI и неуправляемый) ПК не пингуются, хотя все IP выставлены для одной сети. // Отсутствие коммутации пакетов при включенном режиме "энергосберегающего Ethernet (EEE)" исправлено в ПО для МК вер. 1.1 и в драйвере Linux от 03/10/2019 На данный момент для работы с отладочной платой для 1923КХ028 на всех подключаемых ПК должен быть **выключен** режим энергосберегающего Ethernet, который в ряде сетевых карт включен по умолчанию. Сделать это можно в настройках сетевой карты {{supp:1923kx028:energy_efficient_eth.png}} ---- //В спецификации, 9.6 Конфигурация блока Class HW 1/2, п. 7-8 указано, что в регистры CLASS_SNOOP_SPL_MCAST_ADDR1_LSB(MSB) необходимо записать multicast адрес. Этот адрес должен иметь какое-то определённое значение или любое значение? // Регистры CLASS_SNOOP_SPL_MCAST_ADDR1_LSB и CLASS_SNOOP_SPL_MCAST_ADDR1_MSB предназначены для хранения специальных служебных multicast MAC-адресов и проверки входных пакетов на совпадение с этими адресами. В случае драйвера, в данные регистры записывается MAC: 01:80:С2:00:00:0Е, который относится к PTP протоколу (Precision Time Protocol). Соответственно, если на какой-либо порт поступит пакет с адресом назначения 01:80:С2:00:00:0Е, то данный пакет будет захвачен для обработки на HOST процессоре (с причиной захвата punt_l2_special = 1 в поле Punt Reason заголовка пакета), то есть будет отправлен через PCI-Express на host систему. В принципе в эти регистры можно записать любые multicast MAC адреса. Подробнее про multicast адреса можно прочитать в статье: https://en.wikipedia.org/wiki/Multicast_address. **UPDATE:** Судя по наблюдениям, вероятно это не так. Фреймы с МАС адресом протокола PTP не приходят в хост, хотя они и прописаны в регистры SNOOP. Но в хост приходит репорт об отправке фрейма с заданным SNOOP адресом. Т.е. когда PTP фрейм уже выдан определенным EMAC наружу, то от этого EMAC приходит в хост служебный фрейм с timestamp отправки. SNOOP в переводе означает "шпионить", что подразумевает "незаметное наблюдение". Если бы фреймы принимались сначала на хост для анализа, то это была бы уже модерация трафика, а не наблюдение. Через таблицу МАС можно и так завернуть любой трафик интересующего МАС адреса на хост, без всяких SNOOP надстроек. Наверное в этом и заключалась логика при реализации режима SNOOP. ---- //- Как настроить Traffic Policing? / Как настроить защиту от штормов широковещательным(broadcast)/многоадресным(multicast) трафиком?// В микросхеме не реализован механизм ограничения входного трафика ---- При тестировании VLAN возможно столкнуться со следующий проблемой. Сетевая карта фирмы Realtek отбрасывает VLAN тег пакета. =====Заметки===== В микросхеме существует таблица маршрутизации в которой закрепляется соответствие каждому МАС-адресу некоторого порта. Ее необходимо прописать либо статично по интерфейсу SPI, либо хост-процессор (PCI) должен динамически отрабатывать записи/чтение этой таблицы. Сама, автоматически, эта таблица не обновляется, как в обычных маршрутизаторах. Следовательно, когда приходит пакет с МАС адресом назначения для которого есть запись в таблице, то этот пакет выдается в указанный в таблице порт. Если приходит пакет для неизвестного МАС-адресата, то он никуда не посылается. Для каждого порта в микросхеме реализован МАС-блок, которому может быть задан свой МАС адрес. ---- Неуправляемый режим работы платы 1923КХ028. Какие действия выполняет микроконтроллер 1986ВЕ92QI, установленный на плате, в неуправляемом режиме? В неуправляемом режиме с помощью 1923КХ028 микроконтроллер настраивает Ethernet PHY трансиверы. MCU * читает на выводах MODE 1923КХ028 комбинацию "6"; * устанавливает сигнал RESET 1923КХ028 в активное состояние; * устанавливает режим "2" на выводах MODE 1923КХ028; * переводит сигнал RESET в неактивное состояние; * через SPI и регистры MDIO настраивает Ethernet PHY трансиверы; * после завершения настройки устанавливает сигнал REST 1923КХ028 в активное состояние; * устанавливает режим 4 на выводах MODE 1923КХ028; * переводит сигнал RESET 1923КХ028 в неактивное состояние. Плата начинает работать как HUB, при этом скорость обмена задана 1 Гбит/c. ---- На отладочной плате коммутатора 1923КХ028 применяется микросхема PHY от TI DP83867CS, которая подключается отдельным модулем. На модуле установлено по два разъема RJ для подключения Ethernet-кабеля, в свою очередь разъемы RJ имеют на борту зеленый и оранжевый светодиоды, которые подключены к входам LED_0 и LED_1 микросхемы PHY DP83867CS. Активным уровнем светодиодов является "1". По-умолчанию, зеленый светодиод, то есть сигнал от вывода LED_0, должен светиться, если установлено подключение Link, а желтый при наличии подключения 1000 Мб/с. Однако, прошивка микроконтроллера К1986ВЕ92QI, входящего в состав отладочной платы коммутатора, перенастраивает события, по которым загораются светодиоды: зеленый загорается при передаче данных, а желтый при приёме данных микросхемой коммутатора. =====Установка ядра Linux 4.10.17 под драйвер===== При установке ядра Linux 4.10.17 в Ubuntu 20.04.1 LTS возникает ошибка зависимости от пакета libssl1.0.0, который автоматически не качается. Но его можно скачать и поставить вручную перед установкой ядра. В итоге установка ядра сводится к следующим шагам: * Скачиваем необходимые пакеты: * [[http://archive.ubuntu.com/ubuntu/pool/main/o/openssl1.0/libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb|libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb]] * [[https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.17/linux-headers-4.10.17-041017_4.10.17-041017.201705201051_all.deb|linux-headers-4.10.17-041017_4.10.17-041017.201705201051_all.deb]] * [[https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.17/linux-headers-4.10.17-041017-generic_4.10.17-041017.201705201051_amd64.deb|linux-headers-4.10.17-041017-generic_4.10.17-041017.201705201051_amd64.deb]] * [[https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.17/linux-image-4.10.17-041017-generic_4.10.17-041017.201705201051_amd64.deb|linux-image-4.10.17-041017-generic_4.10.17-041017.201705201051_amd64.deb]] * Устанавливаем libssl1.0.0: **sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5_amd64.deb** * Устанавливаем ядро: **sudo dpkg -i linux-*4.10.17*.deb** * Перезагружаем систему: **sudo shutdown -r now** * После этого ядро можно выбрать в меню загрузчика Grab. * Проверяем версию: **uname -r** Если что-то пошло не так, удаляем пакеты и делаем все заново: **sudo apt remove 'linux-headers-4.10.17*' 'linux-image-4.10.17*'**. ... Вот только ВСЕ и ПОШЛО НЕ ТАК! Старое ядро 4.10.17 не стартует с оболочкой новой Ubuntu, в результате загрузка заканчивается черным экраном. Оказалось, что проще драйвер подправить под ядро 20.04.1, чем пытаться ставить старое ядро. ---- Обычно ошибка //"CONFIG_X86_X32 enabled but no binutils support"// возникает если директория с драйвером лежит в Desktop (на рабочем столе). Если перенести директорию, например в Documents, то эта ошибка при сборке пропадает. ---- 1928KX028 не поддерживает прерывания MSI/MSIx, необходимо использовать режим //PCI Legacy Interrupt//. Linux необходимо собирать с опцией **pci=nomsi**. //Legacy Interrupt// передаются так-же как и в MSI сообщениями в TLP пакетах PCIe, но обработка сообщения приводит в выставлению прерывания, как будто это было бы прерывание по сигнальной линии на плате (эмуляция физических линий). * Legacy Interrupt - совместимость с PCI, только 4-ре прерывания IntA, IntB, IntC, IntD. * MSI - количество прерываний на устройство 1, 2, 4, 8, 16, 32 * MSIх - до 2048 прерываний на устройство ссылки: * [[https://habr.com/ru/post/430548/|HABR - "Прерывания от внешних устройств в системе x86. Часть 1. Эволюция контроллеров прерываний"]] * [[https://habr.com/ru/post/431372/|HABR - "Прерывания от внешних устройств в системе x86. Часть 2. Опции загрузки ядра Linux"]] * [[https://en.wikipedia.org/wiki/Message_Signaled_Interrupts|WIKI - MSI]]