STM32H7 LWIP problem

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Úterý Září 3 18:52:22 CEST 2019


Tak dalsi indicie:
- Z Win XP pocitace funguje odesilani dobre (Hercules terminal, drzim 
nejake pismenko)
- Z Win10 se to po 144 znacich sekne, nektere pakety se odesilaji 
viceznakove, ke konci vesmes jednoznakove a pak to utne a uz neodejde 
nic. Stejny postup s hercules terminalem
- Vlastni aplikace v C# se chova stejne (buttony nemaji smysluplne 
nazvy, je to pripojeni, odpojeni, poslani znaku)
- putty zda se chova korektne, kdyz odesilam prazdne radky, i na win 10 
ale nemam jeste jistotu, ze jsem odeslal skutecne tech 144 znaku/paketu
- kdys stridam odesilani sad znaku v poctu cca desitek v davce, chodi to 
bez problemu take
- wireshark ktery sleduje komunikaci klienta s win 10 se chova divne, 
predstira oboustrannou komunikaci i pri zastavenem MCU...

Zacinam podezrivat windows z nejake bezpecnostni kulisarny, nebo uz to 
vubec nechapu. Asi to neni optimalni ale proc by melo neco pranit 
nasobnemu odesilani nekolikabytovych paketu??? Navic se pak spojeni 
neuzavre pokud se odpoji klient, pokud se odpoji server, tak se spojeni 
ukonci i na strane klienta. Nebo je nejaka chyba v implementaci na 
strane LWIP ze treba posila spatne udaje v ACK?




Dne 03.09.2019 v 15:03 Jaroslav Buchta napsal(a):
> Tak jsem z toho naprosto jelen, vypada to, ze do dratu data nechodi i 
> kdyz se wireshark tvari, ze jo a dokonce predstira, ze chodi ACK pri 
> pokusu o vyslani paketu se znakem kdyz je procesor zastaveny (to 
> predpokladam sam PHY nebo ETH radic bez beziciho programu nezvlada 
> nebo ano?) Od ETH radice vubec neprichazi preruseni od prichozich dat, 
> dalsi pripojeni nebo PING pritom normalne fungujou. Nevim, jestli jsem 
> neprehlednul nastaveni nejakeho filtru, je to generovano z CubeMX bez 
> zasadnich modifikaci doufam...
> Zitra si prinesu router se sledovanim tak jsem zvedavy...
>
>
>
> Dne 03.09.2019 v 10:51 Jaroslav Buchta napsal(a):
>> Zdravim, narazil jsem opet na problem - pokud pouze na strane STM 
>> prijimam, tak se prijem po pravidelnem poctu znaku (ale spis paketu 
>> po jednom znaku, myslim 144) sekne a z netconn_recv to uz nevypadne 
>> ani po uzavreni spojeni. Mam dojem, ze ani neblika LED na RJ45 ale 
>> dle wireshark PC data posila...
>>
>> Pokud do MCU doplnim timeout, ze se spojeni po preruseni prijmu 
>> ukonci, da se znovu pripojit a jede to. Pokud prijem prokladam 
>> vysilanim, treba po 10 znacich, zda se to taky funkcni (to je ted v 
>> programu netconn_write...) po 100 znacich uz zase ne...
>>
>> Nesetkal se s tim nekdo? Jako by se nekde neco neuvolnovalo ale uz me 
>> nenapada co pro to udelat.
>>
>>
>> #include "GlobalDefs.h"
>> #include "lwip/api.h"
>>
>> static const char *tag = "MBN";
>>
>> struct netconn *conn;
>> struct netconn *incconn = NULL;
>>
>> void mbnetServer(void const * argument)
>> {
>>     struct netconn *incconn = (struct netconn *)argument;
>>     TERMLOG_I(tag, "Start Modbus TCP Task");
>>     int n = 0;
>>     for (;;)
>>     {
>>         struct netbuf *buf=NULL;
>>         err_t err = netconn_recv(incconn, &buf);
>>         if (err == ERR_OK)
>>         {
>>             do
>>             {
>>                 void *data;
>>                 uint16_t len;
>>
>>                 /* obtain a pointer to the data in the fragment */
>>                 netbuf_data(buf, &data, &len);
>>                 uint8_t *c = (uint8_t *)data;
>>                 while (len != 0)
>>                 {
>>                     terminal_Out(TERMTG_ALL, TERMCOL_DEFAULT, "%c", *c);
>>                     if (++n % 10 == 0)
>>                     {
>>                         netconn_write(incconn, "*", 1, NETCONN_COPY);
>>                     }
>>                     c++;
>>                     len--;
>>
>>                 }
>>             } while(netbuf_next(buf) >= 0);
>>             netbuf_delete(buf);
>>         }
>>         else
>>         {
>>             break;
>>         }
>>     }
>>     netconn_close(incconn);
>>     netconn_delete(incconn);
>>     TERMLOG_I(tag, "End Modbus TCP Task");
>>     vTaskDelete(NULL);
>> }
>>
>> void mbnetMain(void const * argument)
>> {
>>     err_t err;
>>     conn = netconn_new(NETCONN_TCP);
>>     if (conn==NULL)
>>     {
>>         vTaskDelete(NULL);
>>         return;
>>     }
>>     err = netconn_bind(conn, NULL, 502);
>>     if (err != ERR_OK)
>>     {
>>         vTaskDelete(NULL);
>>         return;
>>     }
>>     /* Tell connection to go into listening mode. */
>>     err = netconn_listen_with_backlog(conn, 2);
>>     if (err != ERR_OK)
>>     {
>>         vTaskDelete(NULL);
>>         return;
>>     }
>>     for (;;)
>>     {
>>         struct netconn *newconn;
>>         err_t err = netconn_accept(conn, &newconn);
>>         if (err == ERR_OK)
>>         {
>>             TERMLOG_I(tag, "New Modbus TCP connection");
>>             osThreadDef(mbNetServer, mbnetServer, osPriorityNormal, 
>> 0, 512);
>>             osThreadCreate(osThread(mbNetServer), (void *)newconn);
>>         }
>>     }
>> }
>>
>>
>> void mbnet_Init()
>> {
>>     osThreadDef(mbNetMain, mbnetMain, osPriorityNormal, 0, 512);
>>     osThreadCreate(osThread(mbNetMain), NULL);
>> }
>>
>> void mbnet_Service()
>> {
>> }
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list