硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1034|回复: 17
收起左侧

[以太网] 关于H743IIT6 以太网问题求助

[复制链接]

2

主题

24

回帖

30

积分

新手上路

积分
30
发表于 2025-1-3 17:27:28 | 显示全部楼层 |阅读模式
目前项目使用得H754IIT6+LAN8720,通过配置已经可以正常ping通,并且可以连接MQTT收发数据,现在我想把下面得宏定义数值改大,导致ping不通了。求助各位大神了
#define ETH_TX_DESC_CNT         4U  /* number of Ethernet Tx DMA descriptors */#define ETH_RX_DESC_CNT         4U  /* number of Ethernet Rx DMA descriptors */

修改为
#define ETH_TX_DESC_CNT         8U  /* number of Ethernet Tx DMA descriptors */#define ETH_RX_DESC_CNT         8U  /* number of Ethernet Rx DMA descriptors */


其他修改如下:

    /** Initializes and configures the Region and the memory to be protected
     */
    MPU_InitStruct.Enable = MPU_REGION_ENABLE;
    MPU_InitStruct.Number = MPU_REGION_NUMBER0;
    MPU_InitStruct.BaseAddress = 0x30040000;
    MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
    MPU_InitStruct.SubRegionDisable = 0x0;
    MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
    MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
    MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);





__attribute__((at(0x30040000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
//__attribute__((at(0x30040060))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
__attribute__((at(0x300400c0))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-4 06:57:32 | 显示全部楼层
sizeof下DMARxDscrTab和DMATxDscrTab大小分别是多少。
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-6 10:05:06 | 显示全部楼层
eric2013 发表于 2025-1-4 06:57
sizeof下DMARxDscrTab和DMATxDscrTab大小分别是多少。

sizeof下DMARxDscrTab和DMATxDscrTab大小分别是192
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-6 12:54:05 | 显示全部楼层
补充一下我修改这个宏定义大小的原因,就是我在开启网络任务后,莫名其妙的会进入 HardFault_Handler,通过调试定位到是在tcpoutput函数        if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seqno), lwip_ntohl(useg->tcphdr->seqno))) 位置进入了异常中断。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-7 06:59:15 | 显示全部楼层
guxiangguo 发表于 2025-1-6 12:54
补充一下我修改这个宏定义大小的原因,就是我在开启网络任务后,莫名其妙的会进入 HardFault_Handler,通过 ...

你这个MPU配置的是512.

  MPU_InitStruct.Size = MPU_REGION_SIZE_512B;

然后你一个配置4,一个配置8后,总大小多少,超过512没,确认下
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-7 14:34:32 | 显示全部楼层
eric2013 发表于 2025-1-7 06:59
你这个MPU配置的是512.

  MPU_InitStruct.Size = MPU_REGION_SIZE_512B;

没有超过512,我用cubemx重新建立了工程,直接设置为8都不能ping通
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-8 07:39:28 | 显示全部楼层
guxiangguo 发表于 2025-1-7 14:34
没有超过512,我用cubemx重新建立了工程,直接设置为8都不能ping通

今天我不忙了,我测试下我这边,帮你看看
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-8 10:27:57 | 显示全部楼层
eric2013 发表于 2025-1-8 07:39
今天我不忙了,我测试下我这边,帮你看看

多谢硬汉哥帮忙
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-9 06:29:53 | 显示全部楼层

帮你测试了,确定没问题

使用的这个例子

https://forum.anfulai.cn/forum.php?mod=viewthread&tid=103554

2345.png
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-9 08:42:49 | 显示全部楼层
eric2013 发表于 2025-1-9 06:29
帮你测试了,确定没问题

使用的这个例子

我这边用的freertos,会不会是系统的问题,目前还有一个问题,mqtt发布主题时运行到if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seqno), lwip_ntohl(useg->tcphdr->seqno)))这个语句时会导致HardFault_Handler,偶发性的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-10 07:12:37 | 显示全部楼层
guxiangguo 发表于 2025-1-9 08:42
我这边用的freertos,会不会是系统的问题,目前还有一个问题,mqtt发布主题时运行到if (TCP_SEQ_LT(lwip_ ...

1、是不是系统问题,这个不好说,得排查下。
2、MQTT我不熟,可以看下HardFault_Handler的错误类型,这个类型有助于错误判断。

回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-10 10:39:21 | 显示全部楼层
eric2013 发表于 2025-1-10 07:12
1、是不是系统问题,这个不好说,得排查下。
2、MQTT我不熟,可以看下HardFault_Handler的错误类型,这 ...

C:\Users\Administrator\Desktop\1.png
C:\Users\Administrator\Desktop\2.png
这是出现异常时的寄存器信息及代码位置,麻烦硬汉哥帮我分析一下具体是什么原因?
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-10 11:09:40 | 显示全部楼层
补充一下图片
1.png
2.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-11 06:52:18 | 显示全部楼层

那里截图的这个位置HALTED不是异常,是你暂停调试了。
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-13 09:33:36 | 显示全部楼层
eric2013 发表于 2025-1-11 06:52
那里截图的这个位置HALTED不是异常,是你暂停调试了。

那是因为程序不运行了,暂停后是停在HardFault_Handler里的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-14 08:11:02 | 显示全部楼层
guxiangguo 发表于 2025-1-13 09:33
那是因为程序不运行了,暂停后是停在HardFault_Handler里的

这样的话,你的程序没有出现硬件异常,仅仅是运行异常了,这个你排查下程序了。
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-1-14 10:43:11 | 显示全部楼层
eric2013 发表于 2025-1-14 08:11
这样的话,你的程序没有出现硬件异常,仅仅是运行异常了,这个你排查下程序了。

最终定位到问题点是lwip协议栈tcp_output函数中的这一行代码if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seqno), lwip_ntohl(useg->tcphdr->seqno))),useg的指针为空导致的,为啥为空的原因还没有找到,我在前面加了判断                  if((useg == NULL)||(seg == NULL)){
        useg_null_err++;
                          break;
      },至少是不回进入中断了,至于数据是否有丢失只能多测试测试了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2025-1-14 13:14:40 | 显示全部楼层
guxiangguo 发表于 2025-1-14 10:43
最终定位到问题点是lwip协议栈tcp_output函数中的这一行代码if (TCP_SEQ_LT(lwip_ntohl(seg->tcphdr->seq ...

好的,谢谢告知最终原因。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 02:07 , Processed in 0.050072 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表