I am grateful for you Jon Bean and Alister Fisher. With using a pbuf chain
and employing tips in the link provided by Alister I achieved to transfer
data about 72 Mbps speed. Now I am curious to know why the speed is far
from 100 Mbps (the expected speed).

On Wed, Oct 7, 2020 at 1:35 AM Alister Fisher <alis...@advateklights.com>
wrote:

> The code you’ve sent are high software layers. Perhaps you need to check
> the lower software layers can send pbuf chains. If you’re using ST’s HAL
> and lwIP’s ethernetif.c, check out what I did for the STM32H7 at
> https://community.st.com/s/question/0D50X0000C6eNNSSQ2/bug-fixes-stm32h7-ethernet.
> The STM32F4 ethernet peripheral and driver would be different.
>
>
>
> Regards
>
> Alister
>
>
>
> *Alister Fisher*
> Senior Software Developer
>
> [image: Advatek Lighting]
>
> 16/52 Corporate Blvd, Bayswater, VIC, 3153, AUSTRALIA
> T: +61  3 8400 4566
> alis...@advateklights.com  www.advateklights.com
> <https://www.facebook.com/advateklights/>
> <https://www.instagram.com/advatek/>
> <https://www.twitter.com/user_name_here>
> <https://www.linkedin.com/company/advateklighting>
> <https://www.pinterest.com/user_name_here>
> <https://www.youtube.com/channel/UCaWsu_GcWmDpcr7Il8tO8zg>
>
> <https://www.advateklights.com/pixlite-mk2-long-range-system-2020>
>
> *From:* lwip-users <lwip-users-bounces+alister=
> advateklights....@nongnu.org> *On Behalf Of *Mohammad Tavakoli
> *Sent:* Tuesday, 6 October 2020 11:24 pm
> *To:* Mailing list for lwIP users <lwip-users@nongnu.org>
> *Subject:* Re: [lwip-users] Sending data more than 1472 bytes using UDP
>
>
>
> I reckon that maybe it is useful to send my code:
>
> uint32_t  aa[4001];
>
> struct pbuf* GK_pbuf;
>
> err_t GK_err;
>
> int main(){
>
>   HAL_Init();
>   SystemClock_Config();
>   MX_GPIO_Init();
>   MX_LWIP_Init();
>   udp_echoserver_init();
>   for(i = 0; i <= 4000; ++i){
>       aa[i] = (i % 30) + 0x30;
>   }
> GK_pbuf = pbuf_alloc(PBUF_TRANSPORT, 1600, PBUF_RAM);
>
>   while (1)
>   {
>       ethernetif_input(&gnetif);
>       sys_check_timeouts();
>   }
>
> }
>
>
>
>
>
> and in  udp_echoserver_init.c file:
>
>
>
> void udp_echoserver_init(void)
> {
>
>   ip4addr_aton("192.168.1.18", &serverIP);
>    struct udp_pcb *upcb;
>    err_t err;
>    upcb = udp_new();
>    if (upcb)
>    {
>       err = udp_bind(upcb, &serverIP , 7);
>       if(err == ERR_OK)
>       {
>         udp_recv(upcb, udp_echoserver_receive_callback, NULL);
>       }
>    }
> }
>
>
>
>
>
> void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb,
> struct pbuf *p, const ip_addr_t *addr, u16_t port)
> {
>   udp_connect(upcb, addr, port);
>   ip4addr_aton("192.168.1.88", &remoteIP);
>   for(iii = 0; iii <= 9; ++iii){
>         GH_err = pbuf_take(GK_pbuf, aa + (iii * 1472), 1472);
>         Gn_err = udp_sendto(upcb, GK_pbuf, &remoteIP, 7);
>
>         // Gn_err = udp_send(upcb, GK_pbuf);
>         HAL_Delay(50); //50ms
>     }
>   udp_disconnect(upcb);
>   pbuf_free(p);
> }
>
>
>
> On Tue, Oct 6, 2020 at 3:32 PM Mohammad Tavakoli <tavakoli.i...@gmail.com>
> wrote:
>
> Thank you for your answer. What do you mean by lwIP interrupt? where I can
> find it? I am also willing to know I should use udp_send() or udp_sendto()
> in that ISR.
>
>
>
> On Tue, Oct 6, 2020 at 3:11 PM Jon Bean <jb...@beandigital.co.uk> wrote:
>
> Hi Mohammad
>
> I had to do something similar on a TI MCU. I chose to send multiple
> packets that were less than the MTU. Basically I called the transmit route
> from the LWIP interrupt. Each time the interrupt was called it would send a
> data packet that was not more than the MTU. I had some flags to know if I
> still needed to keep sending data or if I can stop. This seemed to work OK
> for my application.
>
> Regards
>
> Jon
>
> On 06/10/2020 12:32, Mohammad Tavakoli wrote:
>
> I made a TCP server on STM32F407 using lwIP version 2.1.2 and it worked
> fine. Now for some reasons I need to run a UDP server on the MCU. I tried
> and it worked fine for data size below 1472 bytes. Yet the desired data
> length is around 16KB to 20KB.
> 1. I searched and found that IP_FRAG should  be  defined 1 to allow send
> data over MTU size. It is enabled by default. I read from an email [1] that
> IP_FRAG_MAX_MTU should be also changed to a proper value. However I cannot
> realize where it is!
> 2. Another approach employed by me is to send chopped data whose size are
> below 1472 bytes in a for loop but the for loop only executes first time
> and the MCU goes stop status. How I must send data in a for loop?
>
> [1]
> http://lwip.100.n7.nabble.com/Sending-a-large-amount-of-data-using-UDP-td35933.html
>
>
>
>
> _______________________________________________
>
> lwip-users mailing list
>
> lwip-users@nongnu.org
>
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
>
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>
> Virus-free. www.avast.com
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient>
>
> _______________________________________________
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
> _______________________________________________
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to