国产在线观看免费视频在线|成人网导航|另类 自拍 校园 小说区|不戴的邻居HD中文|国产精品国产三级国产专区53|黄瓜视频app无限看丝瓜视频丝瓜视在线观看|日本大B视频在线

 

ZLIP 一個公開源碼的為51單片機設計的TCP/IP協議棧

 

 


點擊這里訪問ZLIP 新網站

ZLIP首頁
新聞
鏈接
文檔
下載
ZLIP開發板
常見問題

常見問題

Q: 是否有對ZLIP源代碼注釋和解說的文章?

A:對ZLIP詳細注釋和解說的文章還沒有,不過有一些文檔可以參考。可以參考文檔部分


Q:你是否有一個硬件的環境的描述,這樣,我們只要設計一個硬件,就能夠驗證程序了。

A:在ZLIP的軟件包的說明文檔中給了RTL8019AS的連接電路圖,根據這個電路將RTL8019AS和51單片機連接來制作硬件開發板,ZLIP0.2可以在該開發板上運行。并且通過以太網和同一個局域網中的PC機上的程序進行通信。注意PC機和開發版的子網掩碼應該一樣。另外可以用siniffer軟件監聽和調試。


Q:能否結合到UCOS51或者RTS51中,并給出一個工程DEMO。最好是UCOS51中,這樣移植到其他系統就方便了。

A:ZLIP設計目標是能夠在沒有操作系統的環境下也能工作。但是也可以結合到UCOS51等系統中,這一步的工作現在還沒有做。


Q:是否有更新的版本?

A:目前(04/10/14)最新版本為0.2,有空的話我會加以改進推出更新的版本。


Q:網卡是怎樣連接的?是不是我做的網卡直接跟電腦連接還是別的方式?

A:在ZLIP的軟件包的說明文檔中給了RTL8019AS的連接電路圖,根據這個電路將RTL8019AS和51單片機連接來制作硬件開發板,ZLIP0.2可以在該開發板上運行。


Q:我照要求移植到我剛做的網卡demo板上,但是程序運行時無任何反應,不知是如何調試?

這是一個很常見的問題,讓板子工作分以下幾步:

一、首先需要確認網卡(RTL8019AS)已經工作

1.確認RTL8019的地址已經和硬件電路圖一致了。即修改以下兩個宏定義:

/* 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開發板已經對硬件做了一些改動,這樣如果使用本站以前下載的ZLIP源代碼(現在已經修正)則需要修改RTL_BASE_ADDRESS為0x8040,或下載本站最新ZLIP代碼。地址為0x8040的分析如下:

RTL8019的地址SA0-SA19必須落在有效地址范圍內,才能訪問RTL8019as。否則D0-D7是高阻態。這里我們設置SA19-SA0為(0000 0000 0010 010x xxxx)b,其中x表示由外部地址線決定,共可決定16個地址。為了尋址方便,我們想設置8019的地址范圍為8040H到805FH,這只要將51的A15接到SA9,A9接到SA15即可。

2.如果程序初始化完畢,開發板網口接上網線(另一端要接入以太網,不能懸空)則開發板的網絡指示燈應該會閃動,表示RTL8019AS初始化正常。

二、發送第一個測試包

在發送TCP/IP包之前發送一個測試包,這個包就是ARP包。這一步也可以直接跳過。

1.安裝sniffer程序。并將安裝上sniffer的計算機和開發板的以太網連接。注意sniffer軟件的Define Filter設置->Advanced中的IP和IP ARP前面都要打勾;Define Filter設置->Address中設置Hardware的一個地址為52544c302e2f(這個是開發板的默認物理地址),也就是說物理地址是這個的數據包全部接收。然后可以開始監聽了。

2.發送一個ARP包

Main函數初始化完網卡后調用如下的函數(可以放在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);
}

這樣sniffer應該接收到一個數據包,說明發送成功。

三、TCP/IP發送測試:

1.確認PC機和開發板已經連接

2.確認PC機和開發板處在同一個網段。開發板默認為192.168.2.xxx網段,可以通過修改Main.c函數修改網段。

3.運行本網站現在的SocketTest程序,進行TCP/IP連接測試,ZLIP默認發起連接的主機地址是192.168.2.15,也就是說你的PC機地址必須為192.168.2.15,如果不是修改Main.c代碼或者主機IP。還有默認板子在1001端口監聽,向PC機發起連接的端口也是1001。板子接收的數據會在串口輸出。SocketTest接收的數據會寫入文件中。


Q:文檔中給出的RTL8019電路圖中SA6至SA9的連接和其他方案不同,能否解釋一下SA6為什么接高?而SA8卻接地?

A:RTL8019AS在非jumpless方式下可以通過CONFIG1寄存器設置RTL8019AS的基地址RTL_BASE_ADDRESS。從RTL_BASE_ADDRESS+00到RTL_BASE_ADDRESS+1F范圍的IO地址屬于RTL8019as內部寄存器。10-17的任意一個地址都對應RemoteDMAPort,而18-1F任意一個都對應ResetPort。例如設置基地址為2400的時候在SA0-SA19上給出0x2400就可以訪問RTL內部第一個寄存器。在jumpless方式下,也就是JP引腳為1的情況下,外部引腳BD0-BD3對應CONFIG1寄存器的IOS3-IOS0,也就是說通過引腳就可以設置基地址。你看到的連接方案不同很可能是由于基地址設置的不同引起的。