Перейти к содержанию
    

STM32H743 Ethernet Switch

Добрый день, коллеги и всех с пршедшим праздником космонавтики! Встала такая задача, прегонять "сырые" ethernet пакеты через stm32. Т.е. к MAC сонтроллеру в STM32 приходит ethernet пакет (физика lan8742), его необходимо принять и как есть передать дальше (например по SPI или UART - не важно). На другом конце стоит такой же STM32 который принимает пакет всё по тому же (UART или SPI) и должем с помощью своего MAC отправить его в сеть, опять же как есть! Т.к. с STM-овскими драйверами не получилось разобраться, использую ф-ции lwip NETCON (те что для FreeRtos): ethernetif_input - та, что создаётся в дефолтной задаче и low_level_output(netif, p). Для проверки использовал плату Nucleo-f767 переписав ethernetif_input следующим образом:

void ethernetif_input(void const * argument)
{
  struct pbuf *p;
  struct netif *netif = (struct netif *) argument;
  
  uint8_t *pbuf_test;

  for( ;; )
  {
    if (osSemaphoreWait(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK)
    {
      do
      {
        LOCK_TCPIP_CORE();
        p = low_level_input( netif );
        if (p != NULL)
        {
          /* Здесь просто меняю байт в адресе назначения
          	для проверки */
        	pbuf_test = (uint8_t*)p->payload;

        	pbuf_test = pbuf_test + 3;
        	*pbuf_test = 0x44;
			/* и отсылаю обратно */
        	low_level_output(netif, p);
        	pbuf_free(p);


        }
        UNLOCK_TCPIP_CORE();
      } while(p!=NULL);
    }
  }
  
}

Наблюдаю ситуацию в wireshark - всё нормально, в качестве адреса назначения FFFFFF44FFFF в качестве адреса источника (АИ) - адрес моего ПК.

Однако теперь нужно сделать то же самое на STM32h743 и тут засада. Контроллер прерсылает в качестве АИ свой MAC адрес. Как объяснить этому мерзавцу, что б он так не делал? В его мак контроллере есть регист ETH_MACCR в котором можно указать из какого MAC регистра брать этот адресс, но вот что б отключить это дело, как я понял необходимо подшаманить в содержимом дескрипторов, и тут чё то я ничего не понял...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, Грендайзер сказал:

его необходимо принять и как есть передать дальше

Не понял, зачем использовать в данном случае эту загогулину в виде "ф-ции lwip NETCON (те что для FreeRtos):" когда нужно просто без разбора прокидывать эзернет фреймы? Ваша задача - это медиаконвертер в чистом виде.

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не разабрался с ethernet драйверами от stm, а функции lwip настравивают (с помощью всё тах же драйверов) mac контроллер и пересылают/принимают с помощью него данные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Грендайзер сказал:

Я не разабрался с ethernet драйверами от stm,

А придется, коли нужно МАКи подменять...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...