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

Ethernet lwip 2 интерфейса

Всем привет. У меня возникла необходимость подключить 2 axi ethernet subsystem к одному microblaze.

С одним я работал, а вот с двумя не доводилось. Решил танцевать от примера echo, но пока меня интересует только ответ на ping.

Подключил оба интерфейса. Запустил пример - все пингуется. Как только добавляю строки

	if (!xemac_add(echo_netif2, &ipaddr2, &netmask2,
						&gw2, mac_ethernet_address2,
						XPAR_AXI_ETHERNET_1_BASEADDR)) {
		xil_printf("Error adding N/W interface\n\r");
		return -1;
	}

Что бы добавить новый netif в lwip, отваливается и первый интерфейс. Кто это реализовывал? может у меня есть какое-то принципиальное недопонимание? Любой подсказке буду рад

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


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

ТЗ бестолково написано чтоли* Если есть 2 потока Надо 2 обработчика. Тваюмать, я 64 обработчика делел и что??1

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


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

On 11/18/2022 at 8:16 PM, krux said:

ТЗ бестолково написано чтоли* Если есть 2 потока Надо 2 обработчика. Тваюмать, я 64 обработчика делел и что??1

Не понял

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


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

https://lwip.fandom.com/wiki/Network_interfaces_management

Как я понимаю если у нас есть уже один рабочий netif, то его не должно выбивать добавление нового

Но я вижу обратное

static struct netif server_netif;
static struct netif server_netif2;
struct netif *echo_netif;
struct netif *echo_netif2;

XUartLite UartLite;


struct ip_addr ipaddr, netmask, gw;
struct ip_addr ipaddr2, netmask2, gw2;

/* the mac address of the board. this should be unique per board */
unsigned char mac_ethernet_address[] =
{ 0x00, 0x0a, 0x35, 0x00, 0x01, 0x02 };

unsigned char mac_ethernet_address2[] =
{ 0x00, 0x0a, 0x35, 0x00, 0x01, 0x03 };

 
void ProcUartCommand(u8 inp)
{
	if(inp == '1')
	{
		xil_printf("adding netif\n\r");
		if (!xemac_add(echo_netif2, &ipaddr2, &netmask2,
							&gw2, mac_ethernet_address2,
							XPAR_AXI_ETHERNET_1_BASEADDR)) {
			xil_printf("Error adding N/W interface\n\r");
		}
	}
}

int main()
{
	u8 UARTRecvBuffer[UART_BUFFER_SIZE];
	u8 ReceivedCount = 0;

	XUartLite_Initialize(&UartLite, XPAR_UARTLITE_0_DEVICE_ID);

	echo_netif = &server_netif;
	echo_netif2 = &server_netif2;

/* Define this board specific macro in order perform PHY reset on ZCU102 */

	init_platform();

	/* initliaze IP addresses to be used */
	IP4_ADDR(&ipaddr,  192, 168,   7, 10);
	IP4_ADDR(&netmask, 255, 255, 255,  0);
	IP4_ADDR(&gw,      192, 168,   7,  1);

	IP4_ADDR(&ipaddr2,  192, 168,   7, 11);
	IP4_ADDR(&netmask2, 255, 255, 255,  0);
	IP4_ADDR(&gw2,      192, 168,   7,  1);

	print_app_header();

	lwip_init();

  	/* Add network interface to the netif_list, and set it as default */
	if (!xemac_add(echo_netif, &ipaddr, &netmask,
						&gw, mac_ethernet_address,
						XPAR_AXI_ETHERNET_0_BASEADDR)) {
		xil_printf("Error adding N/W interface\n\r");
		return -1;
	}

//	if (!xemac_add(echo_netif2, &ipaddr2, &netmask2,
//						&gw2, mac_ethernet_address2,
//						XPAR_AXI_ETHERNET_1_BASEADDR)) {
//		xil_printf("Error adding N/W interface\n\r");
//		return -1;
//	}

	netif_set_default(echo_netif);

	/* now enable interrupts */
	platform_enable_interrupts();

	/* specify that the network if is up */
	netif_set_up(echo_netif);

	print_ip_settings(&ipaddr, &netmask, &gw);

	/* start the application (web server, rxtest, txtest, etc..) */
	start_application();

	/* receive and process packets */
	while (1) {
		if (TcpFastTmrFlag) {
			tcp_fasttmr();
			TcpFastTmrFlag = 0;
		}
		if (TcpSlowTmrFlag) {
			tcp_slowtmr();
			TcpSlowTmrFlag = 0;
		}

		ReceivedCount += XUartLite_Recv(&UartLite,UARTRecvBuffer,UART_BUFFER_SIZE);
		if (ReceivedCount != 0) {
			ReceivedCount=0;
			ProcUartCommand(UARTRecvBuffer[0]);
		}

		xemacif_input(echo_netif);
		transfer_data();
	}
  
	/* never reached */
	cleanup_platform();

	return 0;
}

Вот мой участок кода, который я правлю

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


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

https://support.xilinx.com/s/question/0D52E00006hpi7ySAA/microblaze-dual-ethernet-problem-with-lwip?language=en_US

Кто искал ответ на тот же вопрос что и я - в примере выше dma, но с fifo то же самое

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


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

Может сделать 2 процессора и каждый с одним Ethernet?

2 потока и 2 обработчика...

 

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


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

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

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

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

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

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

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

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

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

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