STM32H7 LWIP problem
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Pondělí Září 16 13:23:23 CEST 2019
Vratil jsem se k problemu a je to asi na strane Win10, resp. pomuze u
LAN vypnout sluzbu
LiveQoS NDIS 6 Filter Driver
Co to je a odkud se to vzalo a proc to dela?
Na jinych pocitacich to nemam...
Dne 03.09.2019 v 18:52 Jaroslav Buchta napsal(a):
> 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
>
>
> _______________________________________________
> 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