Jump to content

    

Размышления на тему TCP/IP.

За два часа создал TCP сервер на Wiznet. Цена вопроса 3.5 долара – готовый демо борд – с одной стороны подключил контролер с другой воткнул кабель и готово.

Возникает вопрос – зачем нужны навороченные камни с фаями и маками когда есть такое простое решение?

Share this post


Link to post
Share on other sites

Вот в том месте где Wiznet подключается к контроллеру и будет слабое звено. 
 

Share this post


Link to post
Share on other sites

1.Не у всех есть достаточно места для дополнительного контроллера.

2. Кроме интерфейса TCP/IP и сервера должны выполнятся другие задачи и МК для них может стоит гораздо дороже 3.5 $, и как правило Eth там уже есть, тогда зачем выкидывать лишние 3.5 $

Каждый разработчик живет в своем ограниченном мире задач и вопрос зачем они нужны другим не корректен, просто сейчас такие чипы не нужны вам.

Share this post


Link to post
Share on other sites
14 минут назад, jenya7 сказал:

когда есть такое простое решение?

1) TCP сервер нужен не только лишь всем.

2) Сколько соединений Wiznet умеет поддерживать одновременно?

3) Я так понимаю, вы за два часа полносью написали всю программу с нуля? Нет? Тогда попробуйте сделать шаг вправо или влево от того, что задумали авторы вашего примера.

Share this post


Link to post
Share on other sites
5 minutes ago, AlexandrY said:

Вот в том месте где Wiznet подключается к контроллеру и будет слабое звено. 
 

Wiznet поддерживает скорость до 80 мега.

Share this post


Link to post
Share on other sites
18 minutes ago, Сергей Борщ said:

1) TCP сервер нужен не только лишь всем.

2) Сколько соединений Wiznet умеет поддерживать одновременно?

3) Я так понимаю, вы за два часа полносью написали всю программу с нуля? Нет? Тогда попробуйте сделать шаг вправо или влево от того, что задумали авторы вашего примера.

у них есть примеры DHCP, DNS, FTPClient, FTPServer, httpServer, MQTT, SNMP, SNTP, TFTP. По моему все потребности покрыли.

8 сокетов RX и 8 сокетов TX.

зачем писать с нуля? у них прекрасная библиотека и прекрасные отлаженные примеры. нужно написать только апликативный лэер.

19 minutes ago, ikm said:

1.Не у всех есть достаточно места для дополнительного контроллера.

2. Кроме интерфейса TCP/IP и сервера должны выполнятся другие задачи и МК для них может стоит гораздо дороже 3.5 $, и как правило Eth там уже есть, тогда зачем выкидывать лишние 3.5 $

Каждый разработчик живет в своем ограниченном мире задач и вопрос зачем они нужны другим не корректен, просто сейчас такие чипы не нужны вам.

Вы транс и обвязку все равно будете ставить. Это не стоит денег? И камень вы можете взять дешевле без Eth .

 

 

я понимаю это to good to be true вот пытаюсь понять где подвох.

Edited by jenya7

Share this post


Link to post
Share on other sites
51 minutes ago, jenya7 said:

Wiznet поддерживает скорость до 80 мега.

80 там поддерживает только 100 ногий жрущий монстр W5300. Но набор протоколов у него никакой.  IPv6 даже нет. 
Идет с голым Socket API для bareboard. 
Делайте выводы. 

И еще.
Единственная  заявленная совместимость с известными проектами у Wiznet есть только с mbed.
Но там mbed целиком располагается в их чипах W7500 с Cortex-M0.
Т.е. по честному разгрузить сторонний TCP стек с помощью Wiznet так просто не выйдет.
Это не считая невозможности отладки всего что ниже TCP.
Короче как был  этот Wiznet довольно нишевым продуктом таким и остался. 
 

 

Share this post


Link to post
Share on other sites

то что я привел выше это для W5500. Не знаю с чем у него совместимость, проект я писал в IAR под STM32F3. нормальная отладка, я могу спуститься на любой уровень.

Зачем грузить сторонний стек? чем родной плох?

Share this post


Link to post
Share on other sites
2 часа назад, jenya7 сказал:

у них есть примеры DHCP, DNS, FTPClient, FTPServer, httpServer, MQTT, SNMP, SNTP, TFTP. По моему все потребности покрыли.

8 сокетов RX и 8 сокетов TX.

зачем писать с нуля? у них прекрасная библиотека и прекрасные отлаженные примеры. нужно написать только апликативный лэер.

 

Я работал с W7500. Примеров с ним они дают вдвое меньше чем вы перечислили.Да и насчет прекрасной библиотеки и отлаженного кода у меня совсем другое впечатление сложилось. Сделано на отвяжись, и самое хреновое что написано все в жестком однопоточном варианте, который там просто прибит гвоздями. При работе с РТОС практически все надо переписывать.

 

Share this post


Link to post
Share on other sites
1 hour ago, jenya7 said:

то что я привел выше это для W5500. Не знаю с чем у него совместимость, проект я писал в IAR под STM32F3. нормальная отладка, я могу спуститься на любой уровень.

Зачем грузить сторонний стек? чем родной плох?

Не надо так старательно передергивать. TCP стек в Wiznet для вас закрыт и ничего отладить там не можете. W5500 не поддерживает 80 mbit.
Повеселило их традиционное "Not support IP Fragmentation" 
Эт вам еще предстоит куда нибудь тыркнутся со свом Wiznet, а он там не будет работать ни в какую.
Не думайте что вы здесь такой Колумб.  Wiznet  тут обсасывался еще 10 лет назад. Сам на нем обжегся. 

Share this post


Link to post
Share on other sites
4 minutes ago, WHILE said:

Я работал с W7500. Примеров с ним они дают вдвое меньше чем вы перечислили.Да и насчет прекрасной библиотеки и отлаженного кода у меня совсем другое впечатление сложилось. Сделано на отвяжись, и самое хреновое что написано все в жестком однопоточном варианте, который там просто прибит гвоздями. При работе с РТОС практически все надо переписывать.

 

ок. это уже аргумент. осталось понять где тут жесткий однопоточный вариант

int32_t WIZNET_Run(uint8_t sn, uint8_t* buf, uint16_t port)
{
    int32_t ret;
    uint16_t size = 0, sentsize=0;           
    
    #if _TCP_DEBUG_
    uint8_t destip[4];
    uint16_t destport;
    #endif
    
    uint8_t status = getSn_SR(sn);
  
    switch(status)
    {
         case SOCK_ESTABLISHED :
             //if(getSn_IR(sn) & Sn_IR_CON)
             if (status & Sn_IR_CON)
             {
                 #if _TCP_DEBUG_
		 getSn_DIPR(sn, destip);
		 destport = getSn_DPORT(sn);
    
		 printf("%d:Connected - %d.%d.%d.%d : %d\r\n",sn, destip[0], destip[1], destip[2], destip[3], destport);
                 #endif
	         setSn_IR(sn, Sn_IR_CON);
             }
             
	     if((size = getSn_RX_RSR(sn)) > 0) // Don't need to check SOCKERR_BUSY because it doesn't not occur.
             {
	         if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
		     ret = recv(sn, buf, size);

		 if(ret <= 0) return ret;      // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY.
		     sentsize = 0;
                    
		 while(size != sentsize)
		 {
		     ret = send(sn, buf+sentsize, size-sentsize);
		     if(ret < 0)
		     {
			  close(sn);
			  return ret;
		     }
		     sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
		 }
                
             }
         break;
         
         case SOCK_CLOSE_WAIT :
             #if _TCP_DEBUG_
             printf("%d:CloseWait\r\n",sn);
             #endif
             if((ret = disconnect(sn)) != SOCK_OK) return ret;
             #if _TCP_DEBUG_
             printf("%d:Socket Closed\r\n", sn);
             #endif
         break;
         
         case SOCK_INIT :
             #if _TCP_DEBUG_
    	     printf("%d:Listen, TCP server , port [%d]\r\n", sn, port);
             #endif
             if( (ret = listen(sn)) != SOCK_OK) return ret;
         break;
         
         case SOCK_CLOSED:
             #if _TCP_DEBUG_
             printf("%d:TCP server start\r\n",sn);
             #endif
             if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret;
             #if _TCP_DEBUG_
             printf("%d:Socket opened\r\n",sn);
             #endif
         break;
         
         default:
         break;
    }

    return 1;
}

код бежит в своем потоке. а как иначе должно быть?

Share this post


Link to post
Share on other sites
Just now, jenya7 said:

ок. это уже аргумент. осталось понять где тут жесткий однопоточный вариант

код бежит в своем потоке. а как иначе должно быть?

Только покажите здесь следы потока. Эт че,  теперь любую функцию потоком называют? 

Share this post


Link to post
Share on other sites
1 минуту назад, AlexandrY сказал:

перь любую ф

 

2 минуты назад, AlexandrY сказал:

Только покажите здесь следы потока. Эт че,  теперь любую функцию потоком называют? 

Присоединяюсь к Александру. Сравните с этой корейской писаниной mbed-овский стэк для WIZNET.

Share this post


Link to post
Share on other sites
5 minutes ago, AlexandrY said:

Не надо так старательно передергивать. TCP стек в Wiznet для вас закрыт и ничего отладить там не можете. W5500 не поддерживает 80 mbit.
Повеселило их традиционное "Not support IP Fragmentation" 
Эт вам еще предстоит куда нибудь тыркнутся со свом Wiznet, а он там не будет работать ни в какую.
Не думайте что вы здесь такой Колумб.  Wiznet  тут обсасывался еще 10 лет назад. Сам на нем обжегся. 

The W5500 SPI supports 80 MHz speed and the new efficient SPI protocol, so users can implement high speed network communication.

А зачем открытый TCP стек? Я в LWIP никогда ничего не правил.

Зачем IP Fragmentation нужна? для передачи web страниц?

5 minutes ago, AlexandrY said:

Только покажите здесь следы потока. Эт че,  теперь любую функцию потоком называют? 

а что для вас поток? какие чудеса вы от него ждете?

Share this post


Link to post
Share on other sites
16 minutes ago, jenya7 said:

А зачем открытый TCP стек? Я в LWIP никогда ничего не правил.

А тут даже теоретически не будет такой возможности.

 

16 minutes ago, jenya7 said:

Зачем IP Fragmentation нужна? для передачи web страниц?

Для работы в интернетах дальше стола.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this