| Q: 是否有對ZLIP源代碼注釋和解說的文章?
A:對ZLIP詳細(xì)注釋和解說的文章還沒有,不過有一些文檔可以參考�?梢詤⒖�文檔部分
Q:你是否有一個硬件的環(huán)境的描述,這樣,我們只要設(shè)計一個硬件,就能夠驗證程序了。
A:在ZLIP的軟件包的說明文檔中給了RTL8019AS的連接電路圖,根據(jù)這個電路將RTL8019AS和51單片機連接來制作硬件開發(fā)板,ZLIP0.2可以在該開發(fā)板上運行。并且通過以太網(wǎng)和同一個局域網(wǎng)中的PC機上的程序進(jìn)行通信。注意PC機和開發(fā)版的子網(wǎng)掩碼應(yīng)該一樣。另外可以用siniffer軟件監(jiān)聽和調(diào)試。
Q:能否結(jié)合到UCOS51或者RTS51中,并給出一個工程DEMO。最好是UCOS51中,這樣移植到其他系統(tǒng)就方便了。
A:ZLIP設(shè)計目標(biāo)是能夠在沒有操作系統(tǒng)的環(huán)境下也能工作。但是也可以結(jié)合到UCOS51等系統(tǒng)中,這一步的工作現(xiàn)在還沒有做。
Q:是否有更新的版本?
A:目前(04/10/14)最新版本為0.2,有空的話我會加以改進(jìn)推出更新的版本。
Q:網(wǎng)卡是怎樣連接的?是不是我做的網(wǎng)卡直接跟電腦連接還是別的方式?
A:在ZLIP的軟件包的說明文檔中給了RTL8019AS的連接電路圖,根據(jù)這個電路將RTL8019AS和51單片機連接來制作硬件開發(fā)板,ZLIP0.2可以在該開發(fā)板上運行。
Q:我照要求移植到我剛做的網(wǎng)卡demo板上,但是程序運行時無任何反應(yīng),不知是如何調(diào)試?
這是一個很常見的問題,讓板子工作分以下幾步:
一、首先需要確認(rèn)網(wǎng)卡(RTL8019AS)已經(jīng)工作
1.確認(rèn)RTL8019的地址已經(jīng)和硬件電路圖一致了。即修改以下兩個宏定義:
/* 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
注意!從本網(wǎng)站下載的51TCP/IP開發(fā)板已經(jīng)對硬件做了一些改動,這樣如果使用本站以前下載的ZLIP源代碼(現(xiàn)在已經(jīng)修正)則需要修改RTL_BASE_ADDRESS為0x8040,或下載本站最新ZLIP代碼。地址為0x8040的分析如下:
RTL8019的地址SA0-SA19必須落在有效地址范圍內(nèi),才能訪問RTL8019as。否則D0-D7是高阻態(tài)。這里我們設(shè)置SA19-SA0為(0000
0000 0010 010x xxxx)b,其中x表示由外部地址線決定,共可決定16個地址。為了尋址方便,我們想設(shè)置8019的地址范圍為8040H到805FH,這只要將51的A15接到SA9,A9接到SA15即可。
2.如果程序初始化完畢,開發(fā)板網(wǎng)口接上網(wǎng)線(另一端要接入以太網(wǎng),不能懸空)則開發(fā)板的網(wǎng)絡(luò)指示燈應(yīng)該會閃動,表示RTL8019AS初始化正常。
二、發(fā)送第一個測試包
在發(fā)送TCP/IP包之前發(fā)送一個測試包,這個包就是ARP包。這一步也可以直接跳過。
1.安裝sniffer程序。并將安裝上sniffer的計算機和開發(fā)板的以太網(wǎng)連接。注意sniffer軟件的Define Filter設(shè)置->Advanced中的IP和IP
ARP前面都要打勾;Define Filter設(shè)置->Address中設(shè)置Hardware的一個地址為52544c302e2f(這個是開發(fā)板的默認(rèn)物理地址),也就是說物理地址是這個的數(shù)據(jù)包全部接收。然后可以開始監(jiān)聽了。
2.發(fā)送一個ARP包
Main函數(shù)初始化完網(wǎng)卡后調(diào)用如下的函數(shù)(可以放在RTL8019.c中)發(fā)送一個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);
}
這樣sniffer應(yīng)該接收到一個數(shù)據(jù)包,說明發(fā)送成功。
三、TCP/IP發(fā)送測試:
1.確認(rèn)PC機和開發(fā)板已經(jīng)連接
2.確認(rèn)PC機和開發(fā)板處在同一個網(wǎng)段。開發(fā)板默認(rèn)為192.168.2.xxx網(wǎng)段,可以通過修改Main.c函數(shù)修改網(wǎng)段。
3.運行本網(wǎng)站現(xiàn)在的SocketTest程序,進(jìn)行TCP/IP連接測試,ZLIP默認(rèn)發(fā)起連接的主機地址是192.168.2.15,也就是說你的PC機地址必須為192.168.2.15,如果不是修改Main.c代碼或者主機IP。還有默認(rèn)板子在1001端口監(jiān)聽,向PC機發(fā)起連接的端口也是1001。板子接收的數(shù)據(jù)會在串口輸出。SocketTest接收的數(shù)據(jù)會寫入文件中。
Q:文檔中給出的RTL8019電路圖中SA6至SA9的連接和其他方案不同,能否解釋一下SA6為什么接高?而SA8卻接地?
A:RTL8019AS在非jumpless方式下可以通過CONFIG1寄存器設(shè)置RTL8019AS的基地址RTL_BASE_ADDRESS。從RTL_BASE_ADDRESS+00到RTL_BASE_ADDRESS+1F范圍的IO地址屬于RTL8019as內(nèi)部寄存器。10-17的任意一個地址都對應(yīng)RemoteDMAPort,而18-1F任意一個都對應(yīng)ResetPort。例如設(shè)置基地址為2400的時候在SA0-SA19上給出0x2400就可以訪問RTL內(nèi)部第一個寄存器。在jumpless方式下,也就是JP引腳為1的情況下,外部引腳BD0-BD3對應(yīng)CONFIG1寄存器的IOS3-IOS0,也就是說通過引腳就可以設(shè)置基地址。你看到的連接方案不同很可能是由于基地址設(shè)置的不同引起的。 |