公司擁有優(yōu)秀的銷(xiāo)售團(tuán)隊(duì)和專(zhuān)業(yè)的研發(fā)部門(mén),不但在品牌、價(jià)格、供貨、服務(wù)等方面領(lǐng)先業(yè)界,而且可為客戶提供及時(shí)、可行的技術(shù)支持和整體設(shè)計(jì)服務(wù),滿足不同客戶多層次需求。


W5500問(wèn)題集錦(二)
W5500問(wèn)題集錦(二)
2014/11/11 | Filed under: W5500問(wèn)題集錦and tagged with: W5500, 問(wèn)題247 Views
W5500自去年9月推出,已經(jīng)有一年的時(shí)間。一年間,不乏很多客戶紛紛將目光投向了W5500這顆性價(jià)比很高的全新硬件TCP/IP以太網(wǎng)芯片,無(wú)論是在工控、安防、交通,還是在智能醫(yī)療、智能家居等眾多領(lǐng)域中,得到了廣泛應(yīng)用及認(rèn)可。同時(shí),也收到了很多客戶在使用過(guò)程中的問(wèn)題反饋,比如W5500中斷問(wèn)題、切換端口問(wèn)題,及W5500做服務(wù)器,多端口連接等常見(jiàn)問(wèn)題。這些,我們都一一幫助大家分析,一同解決!那么,為了提高技術(shù)支持效率,也特此將這些問(wèn)題再次整理給大家,以供分享!期待能有所幫助!
1.
W5500作為服務(wù)器時(shí),如何獲取來(lái)自連接方的IP地址及端口
問(wèn)題描述:w5500作為服務(wù)器時(shí),如何獲取來(lái)自連接方的IP地址及端口?我怎么沒(méi)有找到寄存器呢
讀DIPR 和SIPR都不對(duì),
是不是沒(méi)有查詢方法呀?
UDP和TCP模式我都試過(guò)了,整了一天也沒(méi)找出明堂來(lái),如果實(shí)在不行,只能依靠,誰(shuí)來(lái)連接W5500,誰(shuí)就在DATA區(qū)自報(bào)家門(mén)了,但這樣做感覺(jué)有點(diǎn)不是很爽,按說(shuō)是可以獲取到來(lái)自連接方的IP地址及端口的
比如W5500接在網(wǎng)絡(luò)上,要對(duì)它進(jìn)行搜索和設(shè)置,那么就要UDP廣播包,目前可以收到廣播包,但量回應(yīng)的包,去對(duì)方收不到,只能懷疑是目標(biāo)地址和端口沒(méi)有更新在dipr寄存器了,請(qǐng)支招兒,謝謝!!
答1:TCP Server模式下,在連接建立后,由硬件更新目標(biāo)IP和端口值。
答2:收到信息的前面6個(gè)字節(jié)即為對(duì)方IP地址和端口號(hào)。
答3:TCP Server 模式下,可以讀取Sn_DIPR和Sn_DPORT來(lái)確定連接方的IP及端口。這個(gè)是可以,你可以打印這個(gè)地址里的信息來(lái)查看。
W5500 As TCP Server
原帖來(lái)自:9MCU
2.
W5500一個(gè)獨(dú)立端口作為Server模式可以支持多少個(gè)客戶端連接
問(wèn)題描述1:W5500一個(gè)獨(dú)立端口端口作為T(mén)CP Server模式打開(kāi)一個(gè)端口,此端口已經(jīng)映射到外網(wǎng),現(xiàn)在可能有多個(gè)客戶端連接過(guò)來(lái),可以支持多少個(gè)客戶端連接?經(jīng)測(cè)試,只能支持一個(gè)連接,連接上一個(gè)客戶端后,后連的客戶端根本連接不上;而采用ENC28J60采用uip協(xié)議時(shí),利用TCP方式監(jiān)聽(tīng)端口,是可以支持客戶端多連接的。不知w5500內(nèi)部的硬件協(xié)議棧能否支持作為server,多個(gè)客戶端連接過(guò)來(lái)?
答1:可以這樣用,但是要把5500的Socket都設(shè)置成TCP Server,然后端口都一致。這樣就可以有8個(gè)客戶連接進(jìn)來(lái)了。
問(wèn)題描述2:就是說(shuō),每個(gè)獨(dú)立端口實(shí)際上對(duì)應(yīng)的是一個(gè)連接,最多只能有8個(gè)連接,對(duì)吧?
答2:是的
答3:按照你初始化第一個(gè)Socket 0為T(mén)CP Server的方式,將其他Socket 1~7 配置成參數(shù)一致的TCP Server即可
原帖來(lái)自:9MCU
3.
W5500無(wú)法清中斷
問(wèn)題描述:這幾天一直在調(diào)試W5500,MCU用的是STM32F205,
可以正常的收發(fā),非中斷方式。
現(xiàn)在改用中斷模式,無(wú)法清除中斷。
用戶手冊(cè)上寫(xiě),Sn_IR,清除需對(duì)應(yīng)位寫(xiě)1。但此寄存器為只讀寄存器,每次對(duì)此寄存器進(jìn)行寫(xiě)操作都會(huì)導(dǎo)致看門(mén)狗復(fù)位。
有沒(méi)有人遇到類(lèi)似情況,求教
注:UDP方式
答:?jiǎn)栴}已解決,是回環(huán)測(cè)試后又產(chǎn)生了SEND_OK中斷,最終因超時(shí)引起看門(mén)狗復(fù)位。
屏蔽發(fā)送中斷后一切正常。
原帖來(lái)自:9MCU
4.
問(wèn)一下:無(wú)論是通用寄存器中斷IR還是socket中斷寄存器SN_IR中斷的清除都是我們使用MCU對(duì)該寄存器進(jìn)行手動(dòng)寫(xiě)0XFF么?謝謝哦。期待回信。。。
問(wèn)題描述:W5500的中斷是不是可以理解成二級(jí)中斷?首先判斷是不是通用寄存器IR的中斷,如果不是然后判斷中斷是不是來(lái)自SN_IR。如果來(lái)自SN那么進(jìn)行檢測(cè)SN的中斷觸發(fā)。。檢測(cè)到中斷之后,需要手動(dòng)的向產(chǎn)生中斷的IR寄存器寫(xiě)入0XFF進(jìn)行中斷的清除?
請(qǐng)問(wèn)是這種思路么?
答1:請(qǐng)看看 W5500中斷寄存器的理解
http://www.9mcu.com/9mcubbs/foru … ead&tid=1062343
答2:首先,可以類(lèi)似的說(shuō)成是二級(jí)中斷,通用寄存器的中斷和Socket中斷的細(xì)分不同。
其次,清中斷就是往對(duì)應(yīng)位上寫(xiě)1。
原帖來(lái)自:9MCU
5.
W5500中斷寄存器的理解
W5500中斷寄存器的理解
W5500中文手冊(cè)V1.0 寫(xiě)的不夠清楚,該文是本人結(jié)合中英文手冊(cè)及自己理解,整理出有關(guān)中斷部分的理解,如有不正確的請(qǐng)指正。
一:引腳 INTn 為中斷輸出(Interrupt output)
低電平:W5500的中斷生效;
高電平:無(wú)中斷或者處于中斷生效等待中
二:中斷相關(guān)寄存器
2.1 IR (連接中斷寄存器) [R/W] [0x0015] [0x00]
該寄存器主要指示網(wǎng)絡(luò)連接錯(cuò)誤或喚醒引起當(dāng)?shù)闹袛唷?/span>
某位為1 且 該位中斷沒(méi)有被屏蔽就可以引發(fā)中斷,INTn引腳將會(huì)被拉低,中斷處理完畢后,可以由主機(jī)寫(xiě)為‘1’清除該位中斷. IR 為‘0×00’時(shí),INTn引腳將會(huì)被拉高。
2.2 IMR (連接中斷屏蔽寄存器) [R/W][0x0016][0x00]
中斷屏蔽寄存器(IMR)是用來(lái)屏蔽中IR中斷的,某位寫(xiě)‘1’,則開(kāi)啟中斷;寫(xiě)‘0’,關(guān)閉中斷。
每個(gè)中斷屏蔽位對(duì)應(yīng)中斷寄存器(IR)中的一個(gè)位. 如果IMR某位寫(xiě)0,即使IR中對(duì)應(yīng)位為1了,也不會(huì)引發(fā)中斷,INTn引腳不會(huì)被拉低。
2.3 SIR ( Socket 中斷寄存器) [R/W] [0x0017] [0x00]
SIR就是指示哪個(gè)Socket發(fā)生的中斷的。
如果某個(gè)Socket發(fā)生的中斷,該寄存器的對(duì)應(yīng)位將被置為1 ,直到被主機(jī)置‘1’清除。如果Sn_IR不等于‘0×00’, 就會(huì)引發(fā)中斷,INTn引腳將被拉低。
2.4 SIMR (Socket 中斷屏蔽寄存器) [R/W] [0x0018] [0x00]
SIMR寄存器來(lái)屏蔽中SIR中斷的,某位寫(xiě)‘1’,則開(kāi)啟中斷;寫(xiě)‘0’,關(guān)閉中斷。
每個(gè)中斷屏蔽位對(duì)應(yīng)中斷寄存器(SIR)中的一個(gè)位. 如果SIMR某位寫(xiě)0,即使IR中對(duì)應(yīng)位為‘1’了,也不會(huì)引發(fā)中斷,INTn引腳不會(huì)被拉低。
2.5 Sn_IR (Socket n 中斷寄存器) [R] [0x0002] [0x00]
Sn_IR 寄存器用于提供給Socket n 中斷類(lèi)型信息,如建立(Establishment)、終止(Termination)、接收數(shù)據(jù)(Receiving data)和超時(shí)(Timeout)。當(dāng)觸發(fā)一個(gè)中斷即Sn_IMR的對(duì)應(yīng)位是’1′的時(shí)候,Sn_IR的對(duì)應(yīng)位也將會(huì)變成‘1’。
如果想把Sn_IR位清零的話,主機(jī)應(yīng)該將該位置‘1’
這里的[R],而不是[R/W] 表示不能由主機(jī)寫(xiě)‘1’讓W(xué)5500產(chǎn)生中斷,只能由主機(jī)設(shè)置‘1’ ,清除某一位中斷。
2.6 Sn_IMR (Socket n 中斷屏蔽寄存器) [R/W] [0x002C] [0xFF]
Sn_IMR 負(fù)責(zé)屏蔽Socket n的中斷。某位寫(xiě)‘1’,則開(kāi)啟中斷;寫(xiě)‘0’,屏閉中斷。
每一位都對(duì)應(yīng)了Sn_IR寄存器的相應(yīng)位。Socket n的中斷觸發(fā)并且Sn_IMR的對(duì)應(yīng)位為‘1’時(shí),Sn_IR的對(duì)應(yīng)位變?yōu)椤?’。如果Sn_IMR和Sn_IR的對(duì)應(yīng)位均為‘1’且SIR 寄存器的相應(yīng)為‘1’,INTn 引腳便會(huì)拉低并使主機(jī)產(chǎn)生中斷。
2.7 INTLEVEL (低電平中斷定時(shí)器寄存器) [R/W] [0x0013 – 0x0014] [0x0000]
該寄存器用于設(shè)置中斷生效等待的時(shí)間(IAWT)。當(dāng)下一個(gè)中斷觸發(fā),中斷引腳將會(huì)在INTLEVEL時(shí)間后,拉低中斷引腳(INTn)。
A. 當(dāng)Socket 0的超時(shí)中斷被觸發(fā),S0_IR[3] & SIR[0]設(shè)置為‘1’,然后 INTn 引腳才被拉低。
B. 當(dāng)Socket 1的連接中斷在前一個(gè)中斷未處理完成之前被觸發(fā),則INTn 引腳仍然為低,S1_IR[0] & SIR[1]位設(shè)置為‘1’。
C. 如果主機(jī)是通過(guò)完全清理S0_IR[3]位來(lái)完成中斷清除,則INTn引腳被拉高,但是此時(shí)S1_IR[0] & SIR[1]仍然保持為‘1’。
D. 即使S1_IR[0] & SIR[1]位被設(shè)置為‘1’,但是在 INTLEVEL 期間,INTn不能被拉低。只有過(guò)了INTLEVEL時(shí)間,INTn才能被拉低。
三:中斷方式設(shè)計(jì)程序
通過(guò)以上介紹,可知幾個(gè)寄存器之間有如下關(guān)系:
A:3個(gè)中斷寄存器 IR,SIR ,Sn_IR,它們對(duì)應(yīng)的3個(gè)中斷屏蔽寄存器IMR,SIMR,Sn_IMR(也可以認(rèn)為是中斷使能寄存器)。只有使能對(duì)應(yīng)位中斷,該位為‘1’時(shí)才能引發(fā)中斷,拉低INTn。
B:一次中斷處理結(jié)束,清除對(duì)應(yīng)狀態(tài)位后,都會(huì)拉高INTn,如果還有別的中斷狀態(tài)寄存器為‘1’,就等待一定時(shí)間再拉低INTn。這個(gè)時(shí)間是由INTLEVEL寄存器來(lái)設(shè)定的。對(duì)于主機(jī)來(lái)說(shuō)來(lái)一次中斷,只能處理一個(gè)事件。
C :IR寄存器與網(wǎng)絡(luò)連接狀態(tài)有關(guān)的寄存器,跟SIR,Sn_IR 沒(méi)有關(guān)系。而SIR 和Sn_IR 是同時(shí)出現(xiàn)的,SIR 指出是Socket n發(fā)生了中斷事件,Sn_IR指出了Socket n 發(fā)生了什么中斷事件,如收到數(shù)據(jù) 超時(shí)等。
因此如果主機(jī)采用中斷方式,檢測(cè)到INTn才能被拉低了,進(jìn)入中斷服務(wù)函數(shù)可以采用先判斷是不是IR中斷,不是就讀取SIR狀態(tài),找到觸發(fā)中斷的那個(gè)Socket n。然后讀取 對(duì)應(yīng)的Sn_IR 進(jìn)行處理。每次處理完,就對(duì)相應(yīng)寄存器的相應(yīng)位清除。
原帖來(lái)自:9MCU
6.
W5500上傳數(shù)據(jù)錯(cuò)誤
問(wèn)題描述1:我現(xiàn)在使用CC2530單片機(jī)和MCU通過(guò)SPI接口和W5500連接,使用W5500庫(kù)函數(shù),下載進(jìn)去程序之后,在電腦中可以ping 通W5500設(shè)備,在電腦中打開(kāi)TCP工具,程序中設(shè)置MCU自動(dòng)上傳數(shù)據(jù)和接收到什么數(shù)據(jù)就返回什么數(shù)據(jù),但是這兩個(gè)數(shù)據(jù)都出現(xiàn)錯(cuò)誤,不能接收到正常的數(shù)據(jù),這個(gè)數(shù)據(jù)通過(guò)串口發(fā)送出來(lái),都是正常的數(shù)據(jù),在TCP工具中偶爾可以見(jiàn)到幾包正確的數(shù)據(jù),但是大多數(shù)時(shí)候都是錯(cuò)誤數(shù)據(jù)包,搞不清楚哪里設(shè)置錯(cuò)誤,請(qǐng)大神指點(diǎn)一下。
答1:你好,你可以用Wireshark抓包看看有無(wú)丟包。
如果沒(méi)有丟包的話,就是說(shuō)裸數(shù)據(jù)階段就出現(xiàn)問(wèn)題了。
看一下你SPI的速率,試著提升一下SPI速率試一下。有可能你SPI處理數(shù)據(jù)太慢了導(dǎo)致的。
問(wèn)題描述2:我單步執(zhí)行的時(shí)候,數(shù)據(jù)還是錯(cuò)誤的,但是沒(méi)有出現(xiàn)丟包的現(xiàn)象,在內(nèi)部數(shù)據(jù)還是正確的,但是執(zhí)行到W5500發(fā)送出來(lái)的時(shí)候,就是錯(cuò)誤的。
//SCK時(shí)鐘4MHZ,時(shí)鐘頻率/8
U1BAUD = 0×00; // BAUD_M = 0
U1GCR |= 0×11; // BAUD_E = 17
SPI的速率我這是設(shè)置的4M,我也嘗試著提高了速率,但是沒(méi)什么效果,減少速率也是不行,大多數(shù)數(shù)據(jù)都是錯(cuò)誤的,中間偶爾會(huì)出現(xiàn)幾包正確數(shù)據(jù)。
答2:?jiǎn)栴}已經(jīng)解決,是庫(kù)函數(shù)沒(méi)設(shè)置好,send_data_processing()和recv_data_processing()中,ptr一開(kāi)始是16位,因?yàn)橐莆皇箶?shù)據(jù)溢出,可以設(shè)置成32位,或者在移位的時(shí)候,進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換的時(shí)候,多使用括號(hào),不要因?yàn)閮?yōu)先級(jí)不同,不能安裝自己想要實(shí)現(xiàn)的功能來(lái)運(yùn)行。
原帖來(lái)自:9MCU
7.
W5500作為客戶端直接連接電腦和交換機(jī)失敗。通過(guò)路由器可以
問(wèn)題描述:/*********************************************
* 函數(shù)名 : Detect_Gateway
* 描述 : 檢查網(wǎng)關(guān)服務(wù)器
* 輸入 : 無(wú)
* 輸出 : 無(wú)
* 返回值 : 成功返回TRUE(0xFF),失敗返回FALSE(0×00)
* 說(shuō)明 : 無(wú)
******************************************************/
unsigned char Detect_Gateway(void)
{
unsigned char ip_adde[4];
ip_adde[0]=IP_Addr[0]+1;
ip_adde[1]=IP_Addr[1]+1;
ip_adde[2]=IP_Addr[2]+1;
ip_adde[3]=IP_Addr[3]+1;
//檢查網(wǎng)關(guān)及獲取網(wǎng)關(guān)的物理地址
Write_W5500_SOCK_4Byte(0,Sn_DIPR,ip_adde);//向目的地址寄存器寫(xiě)入與本機(jī)IP不同的IP值
Write_W5500_SOCK_1Byte(0,Sn_MR,MR_TCP);//設(shè)置socket為T(mén)CP模式
Write_W5500_SOCK_1Byte(0,Sn_CR,OPEN);//打開(kāi)Socket
os_dly_wait (100);//Delay(5);//延時(shí)5ms
if(Read_W5500_SOCK_1Byte(0,Sn_SR) != SOCK_INIT)//如果socket打開(kāi)失敗
{
Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//打開(kāi)不成功,關(guān)閉Socket
return FALSE;//返回FALSE(0×00)
}
Write_W5500_SOCK_1Byte(0,Sn_CR,CONNECT);//設(shè)置Socket為Connect模式
do
{
u8 j=0;
j=Read_W5500_SOCK_1Byte(0,Sn_IR);//讀取Socket0中斷標(biāo)志寄存器
if(j!=0)
Write_W5500_SOCK_1Byte(0,Sn_IR,j);
os_dly_wait (10);//Delay(5);//延時(shí)5ms
if((j&IR_TIMEOUT) == IR_TIMEOUT)
{
return FALSE;
}
else if(Read_W5500_SOCK_1Byte(0,Sn_DHAR) != 0xff)
{
Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//關(guān)閉Socket
return TRUE;
}
}while(1);
}
直接連接電腦的時(shí)候死在了這個(gè)函數(shù)里。Read_W5500_SOCK_1Byte(0,Sn_DHAR) 的返回值一直是ff
答1:無(wú)法獲取目標(biāo)MAC地址。應(yīng)該是W5500發(fā)出ARP請(qǐng)求,沒(méi)有收到對(duì)應(yīng)的回復(fù)。
你的交換機(jī)各個(gè)口之間是透明的嗎?如果是的話,用PC連在一個(gè)port上,用Wireshark抓包看一下。你也可以把抓包附上來(lái)看一下。
答2:?jiǎn)栴}找到了。用交叉網(wǎng)線就可以了
原帖來(lái)自:9MCU
8.
W5500工業(yè)方面有使用的嗎
問(wèn)題描述:w5500抗干擾能力怎么樣
答:你好,
W5500的抗干擾還是很好的,工業(yè)客戶還是蠻多的。其實(shí),光說(shuō)的話也沒(méi)有太大意義,你可以測(cè)試評(píng)估一下。
你可以給我一個(gè)郵箱,我發(fā)測(cè)試報(bào)告給你。
WIZnet的芯片都是工業(yè)級(jí)芯片。
原帖來(lái)自:9MCU
9.
W5500端口切換問(wèn)題!
問(wèn)題描述1:我是用的是自帶協(xié)議棧的W5500+STM32F103!
我想要實(shí)現(xiàn)的功能:向多個(gè)客戶端節(jié)點(diǎn)同時(shí)發(fā)出命令,然后每個(gè)節(jié)點(diǎn)接收到命令后要開(kāi)始數(shù)據(jù)的上傳以及一些其他的節(jié)點(diǎn)操作;這樣的需求,按照常理,應(yīng)該是服務(wù)器發(fā)布命令使用廣播,也就是UDP,為保證數(shù)據(jù)可靠性,數(shù)傳就使用TCP!這中間就存在了一個(gè)協(xié)議的切換問(wèn)題,那我是不是可以在端口1使用UDP,在端口2使用TCP?!想問(wèn)一下各位,W5500能夠輕松的實(shí)現(xiàn)切換嗎?!還有,UDP和TCP在切換中有什么需要注意的?!
補(bǔ)充一點(diǎn),現(xiàn)在我使用的是在TCP中加了一個(gè)for();循環(huán),來(lái)給各個(gè)節(jié)點(diǎn)發(fā)布命令,相當(dāng)于模擬了一個(gè)UDP廣播,但是這樣就浪費(fèi)了大量的時(shí)間,請(qǐng)問(wèn)有什么好的改進(jìn)方法!?
答1:w5500有8個(gè)socket,可以一個(gè)socket做UDP廣播,一個(gè)socket做TCP Server。這樣你可以使用socket_udp發(fā)送命令后,客戶端節(jié)點(diǎn)收到命令后,將數(shù)據(jù)發(fā)到TCP Server。當(dāng)然需要處理的是TCPServer接收緩沖區(qū)的數(shù)據(jù)。 不知道這樣的方案您能接收不。 當(dāng)然同理客戶端也是兩個(gè)socket,只不過(guò)除了udp,多了一個(gè)TCPClient。
另,你可以初始化2個(gè)socket,例: Socket 0 是UDP, Socket 1~7是TCP Server(參數(shù)配置成一樣的,意味著同時(shí)有7個(gè)客戶端可以連入)。使用Socket 0發(fā)布命令,使用Socket 1~7接收數(shù)傳。
問(wèn)題描述2:再追加一個(gè)問(wèn)題,您知道怎么做可以提高UDP廣播的命令的可靠性!?
答2:首先udp就是面向不可靠連接,如果想做到可靠又想使用廣播,那么你可以在udp的程序里自己加上一次握手。例如server發(fā)送udp(地址255.255.255.255)廣播后,每個(gè)接收到廣播的設(shè)備回復(fù)一個(gè)ack,server在得到ack后則認(rèn)為數(shù)據(jù)送達(dá)。這里有個(gè)問(wèn)題就是server知道各個(gè)客戶端的ip地址,這樣收到的ack才有指向性。 但是這樣好麻煩啊。 還有就是你可以一段時(shí)間T內(nèi)多次廣播命令,降低丟包概率。
問(wèn)題描述3:請(qǐng)問(wèn)W5500+STM32103 多個(gè)socket同時(shí)發(fā)送數(shù)據(jù)時(shí)候出現(xiàn)丟包應(yīng)該怎么處理啊
答3:這個(gè)主要看一下你SPI的讀取速率,是不是太慢造成buff溢出導(dǎo)致的。你可以提高SPI速率,或者使用小包多發(fā)的形式,將大數(shù)據(jù)包拆分成小包來(lái)發(fā)送。
原帖來(lái)自:9MCU
10.
W5500工作一段時(shí)間燈全亮
問(wèn)題描述1:W5500工作一段時(shí)間(大概幾分鐘),有時(shí)會(huì)出現(xiàn)雙燈全亮的現(xiàn)象,此時(shí),拔下網(wǎng)線,燈依舊亮。重啟斷電后上電,依然燈全亮。需要過(guò)很長(zhǎng)時(shí)間才能恢復(fù)。
燈全亮階段,網(wǎng)口顯示斷開(kāi)狀態(tài)。各DX有遇到過(guò)此類(lèi)問(wèn)題的嗎?如有,是什么原因,該如何解決啊,謝謝!
答1:會(huì)不會(huì)是有個(gè)別的控制引腳懸空了?比較容易受到干擾。
比如reset之類(lèi)的,狀態(tài)進(jìn)入隨機(jī),失去控制
問(wèn)題描述2:ARM和W5500的控制線確實(shí)走線較遠(yuǎn),這樣是不是應(yīng)該在RESET等信號(hào)端加上拉或下拉電阻啊?
答2:但就RESET而言,是應(yīng)該加一個(gè)上拉,給芯片一個(gè)上電默認(rèn)狀態(tài)!
問(wèn)題描述3:恩恩,非常感謝!!
原帖來(lái)自:9MCU
11.
求助:W5500連續(xù)接收數(shù)據(jù)出錯(cuò)。。。。。
問(wèn)題描述:做的測(cè)試是W5500做TCP服務(wù)端 然后PC做客戶端,PC間隔50ms給 W5500 發(fā) 幾個(gè)字節(jié)如1234, W5500接收后,把接收的數(shù)據(jù)發(fā)到PC端 。經(jīng)過(guò)大量測(cè)試,把問(wèn)題鎖定在 W5500接收數(shù)據(jù),當(dāng)接收一定量時(shí),就會(huì)出現(xiàn)這種情況:如 PC發(fā)送的是1234,這時(shí)候它只能接收 1 后面幾個(gè)字節(jié)都接收不到 (觀察SPI寄存器),但是過(guò)一段時(shí)間又可以正常接收有時(shí)候還有出現(xiàn),一個(gè)字節(jié)都不能接收,但都是過(guò)一會(huì)又正常,而且出現(xiàn)的頻率比較規(guī)律。。。。。 各位有遇到過(guò)嗎 求助。。。。。。
答1:有沒(méi)有參考WIZnet 的TCP Server例程?建議你用Wireshark抓包看一下
答2:你這個(gè)是TCP Server Loopback。 W5500有這個(gè)例程,你可以參考一下(http://pan.baidu.com/s/1F7SzO)。感覺(jué)是你的函數(shù)地址定義問(wèn)題。
原帖來(lái)自:9MCU
12.
發(fā)送NBNS響應(yīng)包無(wú)效
問(wèn)題描述1:W5500收到NBNS Quer包后發(fā)了NBNS的響應(yīng)包(自己構(gòu)造的)出去,抓包工具也能抓到,看內(nèi)容也沒(méi)有錯(cuò)誤,但是詢問(wèn)端好像對(duì)響應(yīng)包沒(méi)反應(yīng),就和沒(méi)有響應(yīng)包一樣,但實(shí)際上已經(jīng)收到響應(yīng)包了,不知問(wèn)題出在哪里,另附上抓包文件(抓包工具為:Wireshark Version 1.12.1)謝謝大家。
答1:ARP的那部分,做個(gè)斷點(diǎn)試試,是沒(méi)收到,還是數(shù)據(jù)沒(méi)對(duì)上?
問(wèn)題描述2:管理員,您好,關(guān)于ARP的部分,W5500(192.168.1.5)收到 PC(192.168.1.8)的MAC而且能將其自身的MAC發(fā)給PC,這個(gè)是由W5500自身硬件完成的,這部分程序中未有涉及,程序中編寫(xiě)部分是接收137端口消息并做出響應(yīng),那個(gè)響應(yīng)包是程序構(gòu)造的,不知道是不是這部分出了問(wèn)題,我對(duì)了很久也沒(méi)對(duì)出哪里有問(wèn)題。
答2:建議通過(guò)斷點(diǎn)調(diào)試,在進(jìn)入處理的位置開(kāi)始就步步觀察
問(wèn)題描述3:關(guān)于斷點(diǎn)調(diào)試我不太清楚要調(diào)試那個(gè)部分,從抓包文件上看不出程序執(zhí)行本身有什么錯(cuò)誤
問(wèn)題描述4:我已找到問(wèn)題,是TRANSACTION ID不匹配導(dǎo)致的,謝謝。
原帖來(lái)自:9MCU
13.
W5500 正常工作幾天時(shí)間后,連不上,ping時(shí)候斷斷續(xù)續(xù)
問(wèn)題描述:W5500有的 用幾天后 連接不上 ping時(shí)候 斷斷續(xù)續(xù)的,大俠們?cè)趺雌啤?/span>
答:建議將W5500的板子與電腦直連,配置到一個(gè)網(wǎng)段內(nèi),然后‘ping ip –t’不停的ping下。偶爾的ping不通可以理解,但是如果經(jīng)常ping 不通就要檢查你的物理鏈路狀態(tài)了。有可能導(dǎo)致的問(wèn)題:1.RJ-45部分網(wǎng)線沒(méi)有插好或者口松;2. 布板的時(shí)候信號(hào)線平行走線產(chǎn)生寄生電容電感。
原帖來(lái)自:9MCU
14.
如何在W5500中實(shí)現(xiàn)HTTPS(http+ssl)客戶端?
問(wèn)題描述:
如何在W5500中實(shí)現(xiàn)HTTPS客戶端?跟HTTP客戶端實(shí)現(xiàn)的關(guān)鍵的區(qū)別?
HTTP/1.1 400 Bad Request
Server: nginx/1.2.0
Date: Thu, 24 Apr 2014 12:06:46 GMT
Content-Type: text/html
Content-Length: 270
Connection: close
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor=”white”>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.2.0</center>
</body>
</html>
答:這個(gè)需要你熟悉應(yīng)用層的SSL協(xié)議,然后調(diào)用傳輸層及網(wǎng)絡(luò)層的W5500協(xié)議。這個(gè)可能后續(xù)有示例代碼開(kāi)放出來(lái),但是在這之前只能各位朋友自己多摸索一下了。
原帖來(lái)自:9MCU
15.
W5500與FPGA連接
問(wèn)題描述:有沒(méi)有人會(huì)W5500與FPGA連接啊
答:有但是比較少,用FPGA一般總線資源足夠而且線程夠快,所以一般使用BUS接口。W5500是SPI接口。按照經(jīng)驗(yàn)來(lái)看,發(fā)部分FPGA的用戶會(huì)用W5300。因?yàn)锽uff夠大,實(shí)際帶寬高。雖然,W5300比W5500要貴,但是用FPGA的用戶追求的還是簡(jiǎn)單高效一般是不會(huì)在乎這幾塊錢(qián)的。
原帖來(lái)自:9MCU
16.
請(qǐng)問(wèn)W5500支持DNS域名解析嗎?我看了看datasheet,貌似沒(méi)有這方面的描述
答:DNS是應(yīng)用層協(xié)議,W5500實(shí)現(xiàn)的是應(yīng)用層以下的傳輸層及網(wǎng)絡(luò)層協(xié)議。不過(guò),W5500有DNS的示例代碼(http://pan.baidu.com/s/1F7SzO)。你可以參考。
17.
W5500斷開(kāi)無(wú)法重聯(lián)
問(wèn)題描述:CC2530單片機(jī)和W5500連接好可以正常通訊,斷開(kāi)網(wǎng)線或者關(guān)閉TCP工具,過(guò)一段時(shí)間再打開(kāi),TCP工具無(wú)法正常打開(kāi)進(jìn)行通訊,W5500的狀態(tài)一直顯示為連接狀態(tài),不能實(shí)現(xiàn)斷開(kāi)重聯(lián)。添加心跳檢測(cè)包,也沒(méi)有任何作用,IINCHIP_WRITE(Sn_KPALVTR(s),0×02); 這個(gè)是添加的心跳包檢測(cè)語(yǔ)句。還需要其他地方進(jìn)行設(shè)置嗎
答:1.IINCHIP_WRITE(Sn_KPALVTR(s),0×02)注意你KPALVTR寄存器的地址是否正確添加了。具體可以參考W5500 Keepalive的示例代碼http://pan.baidu.com/s/1F7SzO
2.添加心跳包可以實(shí)現(xiàn)斷線后,N個(gè)周期(基于RTR和RCT)后,若仍沒(méi)有收到對(duì)方的ACK信號(hào),則會(huì)觸發(fā)超時(shí)中斷,并同時(shí)將Socket狀態(tài)變?yōu)镃losed。程序里只要加上監(jiān)聽(tīng)Socket狀態(tài)變?yōu)镃losed之后就重新開(kāi)發(fā)Socket監(jiān)聽(tīng)/連接即可實(shí)現(xiàn)斷線重連。
原帖來(lái)自:9MCU
18.
W5500自動(dòng)協(xié)商PMODE工作模式,AVR64跑TCP透?jìng)骺梢园桑?/span>
問(wèn)題描述:打算用W5500做物聯(lián)網(wǎng)比賽。所以過(guò)來(lái)問(wèn)個(gè)問(wèn)題咯。請(qǐng)知道的人指導(dǎo)下,歇歇咯。
N01:我將PMODE0 PMODE1 PMODE2接10k上拉電阻。根據(jù)手冊(cè)配置成所有功能自動(dòng)協(xié)商。是不是W5500就可以自動(dòng)協(xié)商PMODE的所有工作模式了呢?歇歇咯。
NO2:我使用AVR64跑TCP透?jìng)鲬?yīng)該可以吧??我通過(guò)百度資料看到arduino硬件使用的ATMEGA芯片有跑20M帶W5500。W5100有用51跑簡(jiǎn)單的網(wǎng)絡(luò)連接。我用AVR64 8M跑應(yīng)該沒(méi)問(wèn)題的吧?
答:1.是的,PMODE全為1時(shí)為自動(dòng)協(xié)商
2.可以的,沒(méi)有問(wèn)題。WIZnet的S2E透?jìng)髂K都是8051+W5XXX或者W7100A(內(nèi)置8051)
原帖來(lái)自:9MCU
19.
W5500如何設(shè)置連接到外網(wǎng)服務(wù)器,不知如何實(shí)現(xiàn)?
答:只要你的PC可以訪問(wèn)外網(wǎng)服務(wù)器,W5500就可以訪問(wèn)外網(wǎng)服務(wù)器。如果你的外網(wǎng)服務(wù)器是在一個(gè)內(nèi)網(wǎng)里面的,沒(méi)有透明出來(lái),需要設(shè)置路由使用端口映射,將其透明出來(lái),即可訪問(wèn)。
20.
W5500做server,通訊一段時(shí)間Client會(huì)斷開(kāi)
問(wèn)題描述:我用w5500作為server,用Client去連接,在通訊一段時(shí)間后會(huì)出現(xiàn)Client突然斷開(kāi),繼續(xù)進(jìn)行連接一直連接不上,調(diào)試server端程序的時(shí)候發(fā)現(xiàn)出現(xiàn)這個(gè)情況的時(shí)候,SR寄存器讀出來(lái)的值是0×17,即還是處于SOCK_ESTABLISHED狀態(tài),現(xiàn)在出現(xiàn)這個(gè)情況的頻率比較高,大概運(yùn)行十多分鐘就會(huì)出現(xiàn),求教?
答:這個(gè)是由于Client斷開(kāi)沒(méi)有經(jīng)過(guò)四次握手,非法斷開(kāi)連接,導(dǎo)致Socket被占用,無(wú)法恢復(fù)通信。
可以讓客戶加入斷線重連機(jī)制,有以下方式:
(1) 檢查PHY狀態(tài)寄存器的Link位,如果Link down 則重新初始化Socket;
主要針對(duì)網(wǎng)線插拔/斷開(kāi);
(2) 如果TCP通訊中斷,嘗試重新發(fā)起連接2-3次,若不能重新連接,則重新初始化Socket;
主要針對(duì)運(yùn)行在TCP Client。您這里是Server可以不予考慮;
(3) 設(shè)置Keep a live心跳包,若link斷開(kāi)會(huì)在RTR和RCR規(guī)定時(shí)間之后,觸發(fā)超時(shí)中斷;
TCP 模式下可以使用。Server 或者Client都可以通過(guò)這種方法檢測(cè)。
21.
RTR值設(shè)定疑問(wèn)
問(wèn)題描述1:你好!請(qǐng)問(wèn)下在W5500中要設(shè)置keep alive心跳包,通過(guò)配置RTR和RCR的值,觸發(fā)超時(shí)中斷。根據(jù)文檔的計(jì)算方法,最短時(shí)間是否只能是RTR=32768 RCR=0的情況,這樣算出來(lái)的時(shí)間是3.2s?能否把觸發(fā)時(shí)間設(shè)置的非常短?大概在10ms左右,現(xiàn)在我keep alive心跳包是通過(guò)手動(dòng)發(fā)送的,不是自動(dòng)發(fā)送。發(fā)送的時(shí)間大概在1ms之內(nèi)。
答1:關(guān)于您下面的問(wèn)題,可能是您對(duì)我們的數(shù)據(jù)手冊(cè)有些誤解。觸發(fā)超時(shí)中斷的時(shí)間(ms) = RTR的值除以10,即,如果你把RTR的值設(shè)置為2000時(shí),產(chǎn)生中斷的時(shí)間是200ms。如果想把產(chǎn)生中斷的時(shí)間設(shè)定為10ms,那么把RTR的值設(shè)定為100即可。但是,不建議這么操作,如果網(wǎng)絡(luò)反應(yīng)過(guò)慢,會(huì)頻繁的重傳。根據(jù)10/100M以太網(wǎng)特性,200ms是一個(gè)比較通用的發(fā)送超時(shí)時(shí)間。請(qǐng)您參考。
問(wèn)題描述2:如果按照你這樣說(shuō)的,那RCR值設(shè)置代表的是什么意思? 超時(shí)時(shí)間不是通過(guò)這兩個(gè)值來(lái)決定的嗎?
答2:RCR(Retransmission Counter Register) 是重傳次數(shù),如果配置成3,表示發(fā)生超時(shí)中斷時(shí)會(huì)重傳一次,如果重傳還不成功,又發(fā)生了超時(shí)中斷,還會(huì)重傳,但,總次數(shù)不超過(guò)3。
建議您先看看我們數(shù)據(jù)手冊(cè),上面說(shuō)明比較詳細(xì)。
>>如有任何問(wèn)題可隨時(shí)留言給我們,或發(fā)送至WIZnet官方郵箱:wiznetbj@wiznet.co.kr