硬汉嵌入式论坛

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

[LwIP] DM9000+LWIP的问题

[复制链接]

3

主题

2

回帖

11

积分

新手上路

积分
11
发表于 2017-12-9 16:55:37 | 显示全部楼层 |阅读模式
V5板子上网络片子DM9000的例程是基于UIP的,现在想改成LWIP的,驱动移植基本已经完成,读ID也能读对
low_level_init、low_level_input、low_level_output三个关键地方也都改了,在low_level_input里面打了断点
收到路由过来的广播数据没有问题,都能收的对,就是low_level_output的arp响应,那个问题太大了- -
不开DHCP的时候,low_level_output只能进入一次,发送个广播包出去,就再也进不去low_level_output了
开DHCP的时候,low_level_output就不停的在往外发广播数据,不知道这是什么情况,有朋友知道这是怎么回事吗
可以指点下我吗,万分感谢万分感谢了!!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2017-12-10 00:37:42 | 显示全部楼层
帮顶。
推出了RL-TCPnet后,lwip和uip暂时不搞了。
回复

使用道具 举报

3

主题

2

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2017-12-10 02:08:06 | 显示全部楼层
[s:131][s:131][s:131]终于找到问题关键了

第一  CHECKSUM_BY_HARDWARE下面有关和校验改成如下形式,不然发出去的ICMP包校验和过不了
#ifdef CHECKSUM_BY_HARDWARE

if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) {
      iecho->chksum += htons(ICMP_ECHO << 8) + 1;
    } else {
      iecho->chksum += htons(ICMP_ECHO << 8);
    }   
#else
            iecho->chksum = 0;
#endif


第二  CHECKSUM_BY_HARDWARE下面宏全改成硬件检测帧校验和


#ifdef CHECKSUM_BY_HARDWARE
  //CHECKSUM_GEN_IP==0: 硬件生成IP数据包的帧校验和
  #define CHECKSUM_GEN_IP                 1
  //CHECKSUM_GEN_UDP==0: 硬件生成UDP数据包的帧校验和
  #define CHECKSUM_GEN_UDP                1
  //CHECKSUM_GEN_TCP==0: 硬件生成TCP数据包的帧校验和
  #define CHECKSUM_GEN_TCP                1
  //CHECKSUM_CHECK_IP==0: 硬件检查输入的IP数据包帧校验和
  #define CHECKSUM_CHECK_IP               1
  //CHECKSUM_CHECK_UDP==0: 硬件检查输入的UDP数据包帧校验和
  #define CHECKSUM_CHECK_UDP              1
  //CHECKSUM_CHECK_TCP==0: 硬件检查输入的TCP数据包帧校验和
  #define CHECKSUM_CHECK_TCP              1
#else
  //CHECKSUM_GEN_IP==1: 软件生成IP数据包帧校验和
  #define CHECKSUM_GEN_IP                 0
  // CHECKSUM_GEN_UDP==1: 软件生成UDOP数据包帧校验和
  #define CHECKSUM_GEN_UDP                0
  //CHECKSUM_GEN_TCP==1: 软件生成TCP数据包帧校验和
  #define CHECKSUM_GEN_TCP                0
  // CHECKSUM_CHECK_IP==1: 软件检查输入的IP数据包帧校验和
  #define CHECKSUM_CHECK_IP               0
  // CHECKSUM_CHECK_UDP==1: 软件检查输入的UDP数据包帧校验和
  #define CHECKSUM_CHECK_UDP              0
  //CHECKSUM_CHECK_TCP==1: 软件检查输入的TCP数据包帧校验和
  #define CHECKSUM_CHECK_TCP              0
#endif

至于为什么这么改,我还在琢磨,先发出来,给如果遇到跟我一样的问题朋友指个方向,少走弯路[s:150][s:150][s:150]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2017-12-10 02:49:28 | 显示全部楼层

回 natty715 的帖子

natty715:[s:131][s:131][s:131]终于找到问题关键了

第一  CHECKSUM_BY_HARDWARE下面有关和校验改成如下形式,不然发出去的ICMP包校验和过不了
#ifdef CHECKSUM_BY_HARDWARE

....... (2017-12-10 02:08) 
谢谢楼主告知原因
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 12:06 , Processed in 0.235240 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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