huex 发表于 2024-6-11 12:04

hc32f4a0 以太网 lwip freertos问题

本帖最后由 huex 于 2024-6-11 12:04 编辑

目前已经移植好lan8720驱动,之前做过gd32f4 lan8720 ,结合参考rt-thread以太网驱动,目前lwip可以得到ip,也可以ping,但是发现要不了多久,ping就会断流,对hc32f4a0以太网mac不是很理解,但是感觉貌似是dma这块有问题。似乎是接收卡死了。将中断改成Poll,能坚持很久,但是仍然可以感受到过一阵子就断流了
这是使用poll方式。断流很明显




void ethernetif_input(void *pvParameters)
{
    struct pbuf *p;
    SYS_ARCH_DECL_PROTECT(sr);
    for (;;) {
      // if (pdTRUE == xSemaphoreTake(g_rx_semaphore, portMAX_DELAY)) {
      // TRY_GET_NEXT_FRAME:
            SYS_ARCH_PROTECT(sr);
            p = low_level_input(low_netif);
            SYS_ARCH_UNPROTECT(sr);
            if (p != NULL) {
                // taskENTER_CRITICAL();
                if (ERR_OK != low_netif->input(p, low_netif)) {
                  (void)pbuf_free(p);
                  p = NULL;
                } else {
                  // printf("low_netif input failed \n");
                  // xSemaphoreTake(g_rx_semaphore, 0);
                  // goto TRY_GET_NEXT_FRAME;
                }
                // taskEXIT_CRITICAL();
            // }
      }
      vTaskDelay(1);
    }
},改成中断,则时间不定,就会进入卡死状态,拨插网线,lwip能看到在检测,但再也不会有接收数据。并且lwip debug下似乎dma方式经常得到超过1524的数据,。

附ehternet.c


是否有大佬知道是哪里需要注意的细节?



daichaodai 发表于 2024-6-12 07:57

跑操作系统的话,任务的处理就很重要了。

huex 发表于 2024-6-14 18:08

跟rtos没关系,裸机跑也是这个样子,感觉是emac dma结构有问题,很容易收到错误的超大数据包,导致lwip low_level_input 处理很长时间,进而dma中断出问题,准备放弃了,还是用成熟的东西吧,hc32f4a看着强大...

查询无结果 发表于 2024-6-15 00:11

huex 发表于 2024-6-14 18:08
跟rtos没关系,裸机跑也是这个样子,感觉是emac dma结构有问题,很容易收到错误的超大数据包,导致lwip low ...

我也没搞定F4A0以太网,没有官网支持很难搞

yangxiaor520 发表于 2024-6-19 08:07

还是处理逻辑没有做好,导致收发丢包。

亚瑟 发表于 2024-6-28 19:02

没有例程能参考吗

huex 发表于 2024-6-30 13:29

亚瑟 发表于 2024-6-28 19:02
没有例程能参考吗

因为例程不涉及到局域网,更像是板到pc,但实际局域网是存在于大量的各种类型广播数据的.,所以例程不能说明什么。

liupengfeihit 发表于 2025-1-4 00:57

我最近也搞了这块芯片的网口,也发现同样的问题,用的是rtl8201,ping刚开始正常,慢慢就到几百毫秒,在过一段时间就不接收数据了,感觉是eth_dma的问题,官方也不提高参考例程,不知道是驱动程序问题还是硬件设计问题,准备放弃了

hh电子爱好者 发表于 2025-1-20 15:12

liupengfeihit 发表于 2025-1-4 00:57
我最近也搞了这块芯片的网口,也发现同样的问题,用的是rtl8201,ping刚开始正常,慢慢就到几百毫秒,在过一 ...

是啊,我现在也在freertos上移植lwip,但是现在程序会在lwip中卡死,感觉是延时函数的问题,改了也不行,能交流一下嘛?

地瓜patch 发表于 2025-1-21 21:07

从官网找例程,从开发板找例程

申小林一号 发表于 2025-1-22 09:09

学习一下

钛酸锂 发表于 2025-3-6 14:02

参考这位博主的文章,文章的结论是:HCLK必须大于100MHz,PLCK1必须大于50MHz。
希望对你有帮助
https://blog.csdn.net/cp1300/article/details/125945732

huex 发表于 2025-3-8 18:09

各种频率 HCLK PLCK 均试过。问题如旧,不值当在这个 MCU 上浪费精力,
官方也出了新的 HC32F4A2,
页: [1]
查看完整版本: hc32f4a0 以太网 lwip freertos问题