找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5545|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

ENC28J60+UIP 組播和廣播無(wú)法接收問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:82083 發(fā)表于 2015-6-6 21:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
采用UIP進(jìn)行組播和廣播時(shí)遇到兩個(gè)問(wèn)題,一是無(wú)法接收組播數(shù)據(jù);二是廣播數(shù)據(jù)大于18字節(jié)時(shí)無(wú)法接收
檢查組播數(shù)據(jù)接收時(shí)發(fā)現(xiàn)EPKTCNT寄存器顯示是有數(shù)據(jù)的,但是UIP_UDP_APPCALL里面uip_newdata()為零表示無(wú)數(shù)據(jù);因此猜測(cè)是uip把數(shù)據(jù)包丟棄了;
順藤摸瓜,發(fā)現(xiàn):

#if UIP_BROADCAST
    DEBUG_PRINTF("UDP IP checksum 0xx\n", uip_ipchksum());
    if(BUF->proto == UIP_PROTO_UDP &&
       uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr)
       ) {
      goto udp_input;
    }
        #endif
原來(lái)有宏定義,于是找到UIP_BROADCAST的定義,結(jié)果是另一個(gè)宏定義
#ifndef UIP_CONF_BROADCAST
#define UIP_BROADCAST 0
#else
#define UIP_BROADCAST UIP_CONF_BROADCAST
#endif

于是增加一句#define UIP_CONF_BROADCAST 1,繼續(xù)運(yùn)行,
結(jié)果發(fā)現(xiàn)還是沒(méi)有效果,于是回到剛才的程序,這才恍然大悟,原來(lái)是通過(guò)
uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr)
來(lái)進(jìn)行判定,其中all_ones_addr定義為全部都是F,也就是255.255.255.255,所以只要廣播數(shù)據(jù)才會(huì)進(jìn)入udp_input,自己的數(shù)據(jù)包是192.168.1.255,所以被丟棄
找到問(wèn)題之后就容易解決了,在下面增加一段程序
if(BUF->proto == UIP_PROTO_UDP &&
       ((BUF->destipaddr[1]&0xFF00)==0xFF00)) {
      goto udp_input;
    }
作用就是判定ip地址最后一位是否為255,如果是則進(jìn)入udp_input,修改完成之后,發(fā)幾個(gè)數(shù)據(jù)試試,運(yùn)行果然就正確了。
可是在正式使用時(shí)發(fā)現(xiàn)又不行了,繼續(xù)加斷點(diǎn)找,這次發(fā)現(xiàn)是ENC28J60沒(méi)有收到,EPKTCNT一直為0;經(jīng)過(guò)反復(fù)試驗(yàn),發(fā)現(xiàn)只要18字節(jié)以?xún)?nèi)就能收的到,大于就收不到了。上網(wǎng)搜一下發(fā)現(xiàn)有大神說(shuō)要配置ENC28J60,于是找到ERXFCON寄存器,其中最低兩位為1表示接收,于是在初始化時(shí)配置一下,設(shè)置為接收數(shù)據(jù)包:
temp=enc28j60Read(ERXFCON);
temp=temp|0x03;
enc28j60Write(ERXFCON,temp);
這次運(yùn)行試試,果然成功了。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:642366 發(fā)表于 2019-11-15 06:57 | 只看該作者
能否把源程序發(fā)給小弟參考一下,最近也在研究UDP 組播和廣播問(wèn)題!
回復(fù)

使用道具 舉報(bào)

板凳
ID:642366 發(fā)表于 2019-11-15 06:58 | 只看該作者
源程序 可否發(fā)來(lái)參考一下,近期也在研究這個(gè),小弟郵箱 sunnyben1987@163.com
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表