Q: 是否有對ZLIP源代碼注釋和解說的文章?
A:對ZLIP詳細注釋和解說的文章還沒有,不過有一些文檔可以參考。可以參考文檔部分
Q:你是否有一個硬件的環境的描述,這樣,我們只要設計一個硬件,就能夠驗證程序了。
A:在ZLIP的軟件(jian)包的說明(ming)文(wen)檔中給了(le)RTL8019AS的連接(jie)電路圖(tu),根據這(zhe)個電路將RTL8019AS和(he)51單片機連接(jie)來制作硬件(jian)開(kai)發板,ZLIP0.2可以(yi)在該開(kai)發板上運行(xing)。并且通過以(yi)太網和(he)同一個局域網中的PC機上的程序(xu)進行(xing)通信。注意(yi)PC機和(he)開(kai)發版的子網掩碼(ma)應(ying)該一樣。另外(wai)可以(yi)用siniffer軟件(jian)監聽和(he)調試(shi)。
Q:能否結合到UCOS51或者RTS51中,并給出一個工程DEMO。最好是UCOS51中,這樣移植到其他系統就方便了。
A:ZLIP設計目標是(shi)能(neng)夠在沒(mei)(mei)有操作(zuo)系(xi)統(tong)(tong)的(de)環境下也能(neng)工(gong)作(zuo)。但是(shi)也可以結合(he)到UCOS51等系(xi)統(tong)(tong)中,這一(yi)步的(de)工(gong)作(zuo)現在還沒(mei)(mei)有做。
Q:是否有更新的版本?
A:目前(qian)(04/10/14)最新版本(ben)為0.2,有空的話我(wo)會加以改(gai)進推出更新的版本(ben)。
Q:網卡是怎樣連接的?是不是我做的網卡直接跟電腦連接還是別的方式?
A:在ZLIP的軟件包的說明文檔中給了RTL8019AS的連(lian)接(jie)電路(lu)圖(tu),根(gen)據這個電路(lu)將(jiang)RTL8019AS和51單片機連(lian)接(jie)來制(zhi)作硬件開(kai)發板,ZLIP0.2可以在該(gai)開(kai)發板上運行。
Q:我照要求移植到我剛做的網卡demo板上,但是程序運行時無任何反應,不知是如何調試?
這是一(yi)個很常見的問題,讓(rang)板子工作分以(yi)下幾步(bu):
一(yi)、首先需要(yao)確認網卡(RTL8019AS)已經(jing)工作
1.確認RTL8019的地址已(yi)經(jing)和硬(ying)件電路圖一致了(le)。即修(xiu)改以下兩個(ge)宏定(ding)義:
/* for example if you use a1-a5 as address lines ADDRESS_SHIFT
should be 0x02 */
#define ADDRESS_SHIFT 0x1
/* base address of RTL8019 */
#define RTL_BASE_ADDRESS 0x8040
注意!從本網站下載的51TCP/IP開發板已經對硬件做了一(yi)些改動,這(zhe)樣如果使用(yong)本站以前下載的ZLIP源代碼(現在已經修(xiu)正)則需(xu)要(yao)修(xiu)改RTL_BASE_ADDRESS為(wei)0x8040,或下載本站最新ZLIP代碼。地(di)址(zhi)為(wei)0x8040的分析(xi)如下:
RTL8019的(de)地(di)址SA0-SA19必(bi)須落在有效地(di)址范圍內(nei),才能訪問(wen)RTL8019as。否則D0-D7是高阻態(tai)。這里我們(men)設置SA19-SA0為(0000
0000 0010 010x xxxx)b,其中x表示(shi)由外部地(di)址線(xian)決(jue)定,共可(ke)決(jue)定16個(ge)地(di)址。為了尋(xun)址方便(bian),我們(men)想設置8019的(de)地(di)址范圍為8040H到(dao)805FH,這只要將51的(de)A15接到(dao)SA9,A9接到(dao)SA15即可(ke)。
2.如果(guo)程序(xu)初始化完(wan)畢(bi),開發板網口(kou)接(jie)(jie)上網線(另一端要接(jie)(jie)入以太網,不能懸空)則開發板的網絡(luo)指示燈應該會閃(shan)動,表示RTL8019AS初始化正常(chang)。
二、發送第(di)一個測試(shi)包
在發送TCP/IP包(bao)之前發送一(yi)個(ge)測試包(bao),這個(ge)包(bao)就是(shi)ARP包(bao)。這一(yi)步(bu)也可以(yi)直接跳(tiao)過。
1.安裝sniffer程序。并將安裝上sniffer的計算機和開(kai)發板(ban)的以太網連接。注意(yi)sniffer軟件(jian)的Define Filter設置->Advanced中的IP和IP
ARP前面都要打勾;Define Filter設置->Address中設置Hardware的一個地(di)址為52544c302e2f(這(zhe)(zhe)個是開(kai)發板(ban)的默認物理(li)(li)地(di)址),也就是說物理(li)(li)地(di)址是這(zhe)(zhe)個的數據包(bao)全部接收。然后(hou)可(ke)以開(kai)始監(jian)聽了。
2.發(fa)送(song)一個ARP包
Main函數初始(shi)化完網(wang)卡后調用如(ru)下的函數(可以放在RTL8019.c中)發送一個ARP包
void RTLSendPacketTest()
{
/* send a arp request packet, src ip = 192.168.2.13, dest ip =
192.168.2.14,
if you config your computer's ip as 192.168.2.14, then after run
this function,
your computer will receive the packet, and when you type "arp
-a" in windows
command window(dos window) you will see a arp entry of 52 54 4c
30 2e 2f.
this indicate a packet has been successful sent
*/
/* this is a arp broad cast packet */
TestPacket[0] = 0xff;
TestPacket[1] = 0xff;
TestPacket[2] = 0xff;
TestPacket[3] = 0xff;
TestPacket[4] = 0xff;
TestPacket[5] = 0xff;
TestPacket[6] = 0x52;
TestPacket[7] = 0x54;
TestPacket[8] = 0x4c;
TestPacket[9] = 0x30;
TestPacket[10] = 0x2e;
TestPacket[11] = 0x2f;
TestPacket[12] = 0x08;
TestPacket[13] = 0x06;
TestPacket[14] = 0x00;
TestPacket[15] = 0x01;
TestPacket[16] = 0x08;
TestPacket[17] = 0x00;
TestPacket[18] = 0x06;
TestPacket[19] = 0x04;
TestPacket[20] = 0x00;
TestPacket[21] = 0x01;
/* ARPPacket->IPDestAddr = DestIP;*/
TestPacket[22] = 0xc0;
TestPacket[23] = 0xa8;
TestPacket[24] = 0x02;
TestPacket[25] = 0x0e;
/* ARPPacket->IPScrAddr = NetIf->IPAddr; */
TestPacket[26] = 0xc0;
TestPacket[27] = 0xa8;
TestPacket[28] = 0x02;
TestPacket[29] = 0x0d;
/* MemCopy(ARPPacket->EtherDestAddr,EtherAddrAny,ETHER_ADDR_LEN);
*/
TestPacket[30] = 0xFF;
TestPacket[31] = 0xFF;
TestPacket[32] = 0xFF;
TestPacket[33] = 0xFF;
TestPacket[34] = 0xFF;
TestPacket[35] = 0xFF;
TestPacket[36] = 0x52;
TestPacket[37] = 0x54;
TestPacket[38] = 0x4c;
TestPacket[39] = 0x30;
TestPacket[40] = 0x2e;
TestPacket[41] = 0x2f;
RTLSendPacket(TestPacket, MIN_PACKET_SIZE);
}
這(zhe)樣sniffer應該接收到一個數據包,說明(ming)發送成(cheng)功。
三(san)、TCP/IP發送測試:
1.確認PC機(ji)和開發(fa)板已經(jing)連接(jie)
2.確(que)認PC機和開發(fa)板處在同一(yi)個網段(duan)。開發(fa)板默認為192.168.2.xxx網段(duan),可以通過修改(gai)Main.c函數修改(gai)網段(duan)。
3.運(yun)行本網(wang)站現在(zai)的(de)SocketTest程序(xu),進(jin)行TCP/IP連(lian)接(jie)(jie)測試,ZLIP默(mo)認發起(qi)連(lian)接(jie)(jie)的(de)主(zhu)(zhu)機地址(zhi)是192.168.2.15,也(ye)就是說你的(de)PC機地址(zhi)必須為192.168.2.15,如果不是修改Main.c代碼或者主(zhu)(zhu)機IP。還有默(mo)認板子在(zai)1001端(duan)口(kou)監聽,向PC機發起(qi)連(lian)接(jie)(jie)的(de)端(duan)口(kou)也(ye)是1001。板子接(jie)(jie)收(shou)的(de)數據會在(zai)串口(kou)輸(shu)出。SocketTest接(jie)(jie)收(shou)的(de)數據會寫入文件(jian)中(zhong)。
Q:文檔中給出的RTL8019電路圖中SA6至SA9的連接和其他方案不同,能否解釋一下SA6為什么接高?而SA8卻接地?
A:RTL8019AS在(zai)非jumpless方式下可(ke)以(yi)通(tong)過CONFIG1寄存器設(she)置(zhi)RTL8019AS的(de)(de)基(ji)(ji)地(di)(di)(di)址(zhi)(zhi)RTL_BASE_ADDRESS。從RTL_BASE_ADDRESS+00到RTL_BASE_ADDRESS+1F范圍的(de)(de)IO地(di)(di)(di)址(zhi)(zhi)屬(shu)于RTL8019as內部寄存器。10-17的(de)(de)任意(yi)一(yi)(yi)個(ge)地(di)(di)(di)址(zhi)(zhi)都對(dui)應RemoteDMAPort,而18-1F任意(yi)一(yi)(yi)個(ge)都對(dui)應ResetPort。例如設(she)置(zhi)基(ji)(ji)地(di)(di)(di)址(zhi)(zhi)為2400的(de)(de)時候在(zai)SA0-SA19上(shang)給出0x2400就(jiu)(jiu)可(ke)以(yi)訪問RTL內部第一(yi)(yi)個(ge)寄存器。在(zai)jumpless方式下,也就(jiu)(jiu)是JP引(yin)(yin)(yin)腳(jiao)為1的(de)(de)情況下,外部引(yin)(yin)(yin)腳(jiao)BD0-BD3對(dui)應CONFIG1寄存器的(de)(de)IOS3-IOS0,也就(jiu)(jiu)是說通(tong)過引(yin)(yin)(yin)腳(jiao)就(jiu)(jiu)可(ke)以(yi)設(she)置(zhi)基(ji)(ji)地(di)(di)(di)址(zhi)(zhi)。你看到的(de)(de)連接方案(an)不同很可(ke)能(neng)是由于基(ji)(ji)地(di)(di)(di)址(zhi)(zhi)設(she)置(zhi)的(de)(de)不同引(yin)(yin)(yin)起的(de)(de)。 |