yibamao 发表于 2013-1-18 06:36:01

关于enc28J60的求助

最近在研究怎么用arduino检查网络的情况,准备用enc28J60和Arduino连接以后,通过ping 8.8.8.8和ping 192.168.1.1来分别检查因特网和局域网的情况。把论坛里面几篇enc28J60的帖子看了一下,但是没有找到具体的函数解释,很多东西还是不明白。
例如ether.packetLoopIcmpCheckReply,ether.clientIcmpRequest 这些具体怎么用没有看到具体说明,也没有具体的例程解释。
想问下谁能帮忙解释一下或者提供一个思路或者历程,感激不尽。ps:英文水平不行,所以只能查找一下中文资料。

yibamao 发表于 2013-1-18 06:37:44

线路我已经连接好了,ping特定的ip地址并且返回时间也测试了,但是怎么判断网络不通,具体一些函数的用法,包括micros(),ether.packetLoop(len)的细节什么的都不清楚。

zcbzjx 发表于 2013-1-18 20:48:21

static void clientIcmpRequest (const uint8_t *destip);用clientIcmpRequest()发送一个ICMP请求(即Ping),它有一个参数,*destip,及目标地址IP地址。
比如你要ping 8.8.8.8
先要把这个IP地址初始化一下:static byte hisip[] = {8,8,8,8 };然后可以用ether.clientIcmpRequest(hisip);向8.8.8.8这个ip地址发送一个imcp请求
如何查看目标IP是否回应嘞。。。
这就要先理解word len = ether.packetReceive(); // go receive new packets
word pos = ether.packetLoop(len); // respond to incoming pings这个可以看做mcu和enc交换数据,
packetReceive()方法: 从网络接收一个新传入的数据包;
packetLoop() 方法:对具体收到的信息作出回应,包含“ping” 请求(ICMP echo 请求)。
这个每个循环都要调用,不然网络就会有延迟。

然后再通过static uint8_t packetLoopIcmpCheckReply (const uint8_t *ip_mh);方法。
这个方法获取目标ip的icmp应答。有返回值,没有应答,返回false,有应答返回true,
所以你就要调用if (len > 0 && ether.packetLoopIcmpCheckReply(hisip)){
//你的代码
}len>0表示enc收到数据包
ether.packetLoopIcmpCheckReply(hisip)如果为真,表示收到了hisip的icmp应答。


——————————————————————————————————
今天喝高了。。不知道说对没。。各位大大指正。。


yibamao 发表于 2013-1-18 21:41:59

首先感谢了再仔细看

yibamao 发表于 2013-1-19 23:33:52

zcbzjx 发表于 2013-1-18 20:48 static/image/common/back.gif
用clientIcmpRequest()发送一个ICMP请求(即Ping),它有一个参数,*destip,及目标地址IP地址。
比如你要 ...

非常感谢,不能说都理解了,但是至少我需要的东西能达到了。

zcbzjx 发表于 2013-1-20 08:42:14

yibamao 发表于 2013-1-19 23:33 static/image/common/back.gif
非常感谢,不能说都理解了,但是至少我需要的东西能达到了。

有帮助就好,hoho。欢迎共享应用,

yibamao 发表于 2013-1-21 08:35:45

做完了我肯定把程序传上来请大家指正。现在不好意思啊
页: [1]
查看完整版本: 关于enc28J60的求助