本帖最后由 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
ethernetif.zip
(7.37 KB, 下载次数: 23)
是否有大佬知道是哪里需要注意的细节?
|