<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機以太網控制芯片W7100A數據手冊(四)

          單片機以太網控制芯片W7100A數據手冊(四)

          作者: 時間:2016-11-26 來源:網絡 收藏
          • 建立連接 : 接收過程

          在這個過程中,它處理內部RX存儲器接收的數據。在TCP模式下,如果接收的數據的字節(jié)長度超過端口當前RX存儲器的剩余空間,W7100A不能接收數據。如果發(fā)生這種情況,W7100A將保持連接(暫停),并等待RX的剩余空間大于需要接收的數據字節(jié)長度。

          在W7100A驅動程序中wiznetmemcpy.c文件中定義的wizmemecpy函數,使用Receive/Send過程來進行存儲器數據的快速復制。更多詳細信息請參考第13章,參考’W7100A性能提升’以了解其性能表現,參考’W7100A驅動指南’以了解其使用方法。如果用戶不想使用wizmemcpy函數,那么使用普通的存儲器復制函數即可。

          由于W7100A內部同時具有數據存儲器和TCPIP內核內部存儲器,用戶應該根據地址進行分類。所以用戶必須在TCPIP內核內部存儲器的最高級地址前加上’0xFE’,或者在從TCPIP內核存儲器到數據存儲器進行復制操作時,將DPX0寄存器設置為’0xFE’。關于wizmemcpy的更多詳細信息請參考’W7100A驅動指南’。

          • 建立連接 : 檢查發(fā)送數據/發(fā)送過程

          發(fā)送數據的字節(jié)長度不能超過SOCKET n TX存儲器的大小。如果要傳輸的數據長度大于設置的MSS,它將按照MSS分段傳輸。

          為了下一次數據的傳輸,用戶必須檢查上一次的SEND命令是否執(zhí)行完成。如果上一次的SEND命令還沒有執(zhí)行完成又開始下一次的SEND命令,將會產生錯誤。數據越多,執(zhí)行SEND命令所花費的時間越長。因此用戶可以適當地將數據分段發(fā)送。

          在發(fā)送過程中,用戶必須將’0xFE’加到地址的最高地址,以指向TCPIP內核的存儲器。

          • 建立連接 : 超時

          超時可能會發(fā)生在連接請求(SYN數據包)或其響應(SYN/ACK數據包)、數據通信或其響應(DATA/ACK數據包)、斷開連接請求(FIN數據包)或其響應(FIN/ACK數據包),以及所有其它TCP數據包的傳輸。如果不能在RTR定義的時間和RCR定義的重發(fā)次數范圍內完成上述數據包的傳輸,都將產生TCP的超時,Sn_SR的狀態(tài)變?yōu)镾OCK_CLOSED。確定TCP超時的方法如下:

          9.2.1.2客戶端

          除了”CONNECT”狀態(tài)外,與TCP服務器完全一樣。用戶可參考9.2.1.1”TCP服務器”。

          圖9.4 “TCP客戶端”操作流程

          • 連接

          發(fā)送連接請求(SYN數據包)到”TCP服務器”。當制造 “連接端口”到服務器時,可能會發(fā)生像ARPTO、TCPTO這樣的超時現象。

          9.2.2UDP

          UDP是無連接的協(xié)議,它的通信是不需要SOCKET建立連接。TCP是一種面向連接的、可以保證可靠性的通信協(xié)議,但UDP采用數據報文的通信方式,數據傳輸的可靠性沒有保障。但是,因為UDP不使用連接的SOCKET,因此它可以與多個已知IP地址的多個端口進行數據交換。這是它的優(yōu)勢。使用一個端口與其它端口通信也會帶來很多問題,比如丟失傳輸的數據、或接收到其它端口來的不需要的數據等。在UDP模式下,為了避免出現這些問題,保證數據通信的可靠性,主機需要重發(fā)被損壞的數據或丟掉那些不需要的數據。UDP協(xié)議支持單播、廣播和多播等通信方式。它遵循以下通信流程。

          二進制

          11011110.01100010.10101101.01111011

          00000000.00000000.00000000.11111111

          -

          11011110.01100010.10101101.11111111

          圖9.5 UDP操作流程

          9.2.2.1單播和廣播方式

          單播是UDP的一種通信方式。它一次只能將數據傳輸給一個目的站點。而廣播通信則使用廣播地址(255.255.255.255),將數據發(fā)送給所有的可接收的目的站點。例如,假設用戶將數據傳輸給目的站點A、B和C。單播是每一次將數據單獨傳輸給A、B或C。在這種情況下,在獲得目的站點A、B或C的物理地址時可能產生ARP超時。在產生ARP超時的時候是不能夠將數據傳輸到目的地的。

          廣播則使用廣播地址(255.255.255.255),可以一次同時將數據發(fā)送到目的站點A、B和C。這時不需要得到目的站點A、B或C的物理地址,因此不會產生ARP超時。

          • 怎樣建立廣播IP?

          廣播IP地址可以通過子網掩碼按位補碼和主機IP地址的按位的邏輯或運算得到。

          例:本機IP:222.98.173.123,子網掩碼:255.255.255.0,則廣播IP地址則為:222.98.173.255

          • SOCKET初始化

          對要實現UDP通信,SOCKET必須進行初始化設置。打開SOCKET的操作過程如下:首先在W7100A的8個SOCKET中選擇一個SOCKET為UDP的工作,并設置為UDP模式(Sn_MR(P3:P0)),然后設置本機端口號(Sn_PORT0),最后運行OPEN命令。執(zhí)行OPEN命令后,如果Sn_SR狀態(tài)改變?yōu)镾OCK_UDP,則完成了端口的初始化設置。

          圖9.6 接收UDP數據的格式

          接收的UDP數據包含8個字節(jié)的數據包信息和有效數據。數據包信息包括兩個部分:發(fā)送者的信息(IP地址和端口號)和數據包的長度。UDP可以接收其它的很多UDP數據,用戶可以通過發(fā)送者的信息區(qū)分UDP數據來源。它也接收以”255.255.255.255”的廣播地址發(fā)送的信息。因此主機可以通過分析發(fā)送者的信息,丟掉那些不需要的數據。

          如果要接收的數據長度大于SOCKET的RX存儲器的剩余空間,用戶將無法接收到數據,也不能夠接收分段的數據。

          • 檢查發(fā)送數據/發(fā)送過程

          用戶想發(fā)送的數據的大小不能超過內部TX緩沖器能容納的范圍。如果比MTU大的話,會自動以MTU為單位進行劃分然后發(fā)送。當用戶想用廣播方式時,Sn_DIPR0應被設置成”255.255.255.255”

          • 檢查發(fā)送完畢/超時

          在繼續(xù)發(fā)送數據之前,用戶必須檢查先前的SEND命令是不是已經完成了。發(fā)送的數據越多,發(fā)送需要的時間就越長。因此用戶必須合理地將其要發(fā)送的數據進行劃分。當用戶發(fā)送UDP數據時可能發(fā)生ARP超時。如果ARP超時發(fā)生了,傳輸UDP數據失敗。

          9.2.2.2多播

          廣播是與所有的、不確定的目的站點進行通信。但多播是與多個、但在多播組注冊的目的站點進行通信。假如A、B和C是在一個特定的多播組里注冊的站點。如果用戶將數據傳送到多播組(包含站點A),站點B和C也能夠從站點A得到數據。為了使用多播通信,使用IGMP協(xié)議將目的站點列表注冊到多播組。多播組包括:分組硬件地址、分組IP地址和分組端口號。用戶不能夠更改”分組硬件地址”和”分組IP地址”。但用戶可以更改”分組端口號”。

          分組硬件地址的選擇范圍在”01:00:5e:00:00:00”到”01:00:5e:7f:ff:ff”之間,而分組IP地址則使用D類地址, 范圍從“224.0.0.0”到“239.255.255.255”。詳細內容請參考官方網站:

          http://www.iana.org/assignments/multicast-addresses.

          在選擇時,6個字節(jié)的”分組硬件地址”的高23位硬件地址和4個字節(jié)的”分組IP地址”必須相同。例如,如果用戶選擇的分組IP地址為”244.1.1.11”,那么分組硬件地址為”01:00:5e:01:01:0b”。詳細信息請參考RFC1112:http://www.ietf.org/rfc.html

          在W7100A內部,IGMP處理多播注冊是由內部(自動)完成的。當用戶以多播的模式打開端口時,”Join”信息將在內部自動傳送。如果用戶關閉端口,”Leave”信息將在內部自動傳送。端口打開以后,”Report”信息將在數據傳輸過程中每隔一定的時間傳送。

          W7100A支持IGMP v1和v2版本。如果用戶想使用一個升級的版本,主機可以使用IPRAW模式直接處理IGMP。

          • SOCKET初始化

          從W7100A的8個端口中選擇一個以進行多播。將”多播分組MAC地址”設為Sn_DHAR0,將”多播分組IP地址”設為Sn_DIPR0。然后將”多播分組端口號”設為Sn_PORT0和Sn_DPORT0。設置Sn_MR(P3:P0)成為UDP模式,將Sn_MR(MULT1)設置為1。最后執(zhí)行OPEN(打開)命令。如果Sn_SR的狀態(tài)在OPEN命令之后被改為SOCK_UDP,端口初始化就完成了。

          • 檢查接收到的數據

          請參考9.2.2.1”單播方式和廣播方式”

          • 接收過程

          請參考9.2.2.1”單播方式和廣播方式”

          • 檢查發(fā)送數據/發(fā)送過程

          因為用戶在端口初始化中設置了多播分組的信息,因此用戶不必再設置目的設備的IP地址和端口號。因此,復制要傳送的數據到內部TX緩沖區(qū),執(zhí)行SEND命令就可以了。

          l檢查完成/SOCKET關閉

          參考9.2.2.1”單播&廣播”


          上一頁 1 2 3 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();