McDeggy 发表于 2010-4-30 10:14:12

LwIP无法ping通的问题

我有一块STM32F103ZE-EK板子,尝试在上面跑RT-Thread操作系统,使用默认的LwIP。现在已经可以让STM32认出板子上的DM9000AE了(网口的灯也已经可以亮,通过shell可以读回DM9000AE的ID、IP地址等信息)。板子与PC机通过路由器相连,问题在于:

1、将板子的IP、网关、掩码、DNS服务器地址等设置得与路由器上的PC机一样(当然,IP地址不一样),但是PC通过路由器无法ping通板子,可以ping通另一台路由器上的PC;
2、将LwIP设置为DHCP方式,然后将板子接上路由器,无法获取IP地址等(更不用说ping通了);
3、将板子的ip固定成192.168.1.2,PC的ip固定成192.168.1.1,默认网关均为0.0.0.0,掩码255.255.255.0,其他不管,用网线将板子与PC直连,无法ping通,但是网络连接一直显示是连着的,没有“网络连接断开”的提示,也没有寻找网络的提示。

疑问:
1、RT-Thread的默认DM9000的IO地址为0x6C000000,数据地址为0x6C000008;而目标板是0x6C100000和0x6C100008。一开始我没有修改这两个地址,是ping不通的,但是我发现以后修改了地址,还是ping不通(所有的现象都是一样的);
2、是否网口灯可以亮起并闪烁证明网络连接已经建立?因为如果shell里没有读到DM9000AE初始化成功的提示,则网口灯不会亮起闪烁。
3、原理图里看到板子上的DM9000AE中断配置为低有效,这个会有影响吗?
4、如果以上三点疑问都不对的话,请各位指点我一下可能的问题。

谢谢大家花费时间看完这么多字,呵呵,调了一个通宵还是没有任何进展。 感谢任何形式的帮助。

aozima 发表于 2010-4-30 11:01:09

你又是那个包里取的吧? 注意下MAC地址. 有些非法MAC地址路由不让过的.
当时为这个问题困扰了好久.不知道那个包里面改了没有.

1.地址应该可以很好修改.你原来是多少就是多少.改掉就行了.
2.网口灯亮只是说明DM9000A的寄存器基本设置对了.不代表可以通.
既然灯都亮了,说明上面的地址修改没有问题.
3.DM9000A默认中断为高电平触发.你确认你的那个原理图上面改掉了?

比较怀疑你的中断设置得不对.

再不行,你启用 DM9000_DEBUG 吧.把收到和发送的数据都打印出来.

McDeggy 发表于 2010-4-30 12:22:50

回复【1楼】aozima
-----------------------------------------------------------------------

我把板子上的电阻去掉,这样就让DM9000A工作在高电平触发了。并打开了DM9000_DEBUG宏,还是无法工作。打印的信息如下:

\ | /
- RT -   Thread Operating System
/ | \ 0.3.0 build Apr 30 2010
2006 - 2009 Copyright by rt-thread team
dm9000 id: 0x90000a46
finsh>>operating at 100M full duplex mode
dm9000 tx: 350
dm9000 tx: first packet
dm9000 tx done
dm9000 tx: 350
dm9000 tx: second packet

断了一下,是定在
rt_err_t rt_dm9000_tx( rt_device_t dev, struct pbuf* p)
{
    ...
    /* enable dm9000a interrupt */
    dm9000_io_write(DM9000_IMR, dm9000_device.imr_all);
    /* wait ack */
    rt_sem_take(&sem_ack, RT_WAITING_FOREVER); //等不到信号量,所以一直等
    DM9000_TRACE("dm9000 tx done\n");
    ...
}
而释放这个信号量的函数是在DM9000A的中断响应函数中:
/* interrupt service routine */
void rt_dm9000_isr()
{
    ...
/* One packet sent complete */
    rt_sem_release(&sem_ack);
    ...
}

看来真的是中断的问题,可是中断我已经试过高电平触发和低电平触发了,都是没有反应的,有点困惑。

McDeggy 发表于 2010-4-30 12:59:35

我试验了一下,将DM9000的EECK管脚设置成高电平触发,或者低电平触发,都可以成功地初始化DM9000,但是打印的信息都是一样,停在等待中断那里。我先试试改MAC地址。

ffxz 发表于 2010-4-30 14:16:27

关键还是板子的配置不一样,看看你的硬件然后对照代码仔细看看是什么问题

从你的描述来看,中断部分应该不一样。发送一侧,写了数据包后,发送成功的中断回不来。

aozima 发表于 2010-4-30 14:17:40

中断引脚不同,中断服务函数名及中断引脚也要做对应的修改吧.

McDeggy 发表于 2010-4-30 17:46:57

回复【4楼】ffxz
-----------------------------------------------------------------------

回复【5楼】aozima
-----------------------------------------------------------------------

谢谢两位,应该是中断问题了,打算晚上再继续奋战。吃饭先。

gavin_li 发表于 2010-9-2 13:33:34

mark,学习了

eworker 发表于 2010-9-2 20:24:42

回复【6楼】McDeggy 再见,列宁
回复【4楼】ffxz
-----------------------------------------------------------------------
回复【5楼】aozima
-----------------------------------------------------------------------
谢谢两位,应该是中断问题了,打算晚上再继续奋战。吃饭先。
-----------------------------------------------------------------------

有结果了?

wunihaoo 发表于 2010-12-25 23:36:19

楼主的问题解决了么?我也遇到和你一样的问题。。。

McDeggy 发表于 2010-12-27 15:50:29

回复【8楼】eworker
-----------------------------------------------------------------------

回复【9楼】wunihaoo
-----------------------------------------------------------------------

最后的结果如各位boss所提示的,硬件上中断方式和代码里的中断方式不匹配造成的。修改中断管脚的中断方式后就好了。

mdz2011 发表于 2012-12-13 22:18:12

我也遇到了同样的问题,打开调试后,信息如下

dm9000 id: 0x90000a46
finsh>>operating at 100M full duplex mode
dm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0022
000 isr: intdm9000 tx: 350
dm9000 tx: first packet
dm9dm9000 isr: int status 0002
000 isr: int

请高手指教

lep150510 发表于 2012-12-22 23:53:53

mark,谢谢我也遇到了同样的问题
页: [1]
查看完整版本: LwIP无法ping通的问题