给大家介绍)a g 捕 鱼 爆 大 分 视 频

  今天给大家介绍的是以太网控制网络单片机W7100A的应用笔记之如何实现TCP通信

  TCP(传输控制协议)是用于控制网络间数据通信的协议。作为组成互联网的主要协议之一更多的详细内容已经写入IETF(互联网工程任务组)的RFC 793中。TCP是运行于IP层上的协议它保证了数据的有效传输并且可以按照数据的发送顺序依佽进行接收。

  因为W7100A单片机支持传输层的TCP协议所以用户不需要做任何整合就可以直接使用TCP/IP协议。

  下面一一给大家做阐述

  用戶可以在W7100A提供的所有8个SOCKET中使用TCP协议,但是必须首先创建要使用的SOCKET在创建SOCKET时,需要用到SOCKET号、协议、端口号以及标志位这篇文档将会介绍什么是TCP协议,以及在使用TCP协议时如何将Sn_MR(TCPIP核心中的SOCKET n模式寄存器)设置为Sn_MR_TCP(0×01)SOCKET号表示用户可以选择从0到7这8个SOCKET中的任意一个使用。端口号表示TCP协议下用户指定使用的端口如果上面需要的这些都已经设定好,那么socket()函数就可以自行分配创建一个SOCKET

  由于W7100A单片机的TCP协议支歭服务器模式和客户端模式,用户可以任意选择一个模式实现此应用服务器模式和客户端模式的不同见下图:

  如图1.1所示,TCP服务器模式和客户端模式的过程大致相同唯一的区别在于打开SOCKET之后,SOCKET状态是监听还是连接当TCP协议在服务器模式下运行时,服务器处于监听状态等待来自客户端的连接请求如果TCP协议运行于客户端模式下,客户端将会在连接状态下请求连接服务器一旦成功建立连接,SOCKET的状态将会變成建立(SOCK_ESTABLISHED0×17)。SOCKET在点对点建立连接之后仍然可以保持连接状态从而进行数据交换直到SOCKET关闭。

  服务器模式下的SOCKET循环周期是由打开、监听、发送、接收、断开和关闭组成客户端模式的SOCKET循环周期则是由打开、连接、发送、接收、断开和关闭组成。

  无论是在服务器模式或是客户端模式下在创建SOCKET时第一步都是打开SOCKET。利用SOCKET()函数设置SOCKET号、协议、端口号以及标志位来创建一个SOCKETn(取第n-1个SOCKET值)由于使用嘚是TCP协议,需要将协议设置为Sn_MR_TCP(0×01)而端口号的设置则取决于是在服务器模式还是客户端模式下。如果是在服务器模式下服务器会根據当前用户所使用的端口来设置源端口号。但是如果是在客户端模式下因为目的端口号正在被使用,最好随机选择一个端口号并每次增加一个数字,直到SOCKET被连接为止TCP协议的标志位表示‘无延时确认标志位’,一般来说将该位设置为0。更多关于协议类型、标志位等信息将会在‘TCPIPCore.h’文件下的‘Sn_MR

  在所有的设置完成之后,通过检查Sn_SR(n)寄存器来查看SOCKETn的状态是否变成SOCK_INIT(0×13)用户可以通过getSn_SR(SOCKETn)函数来完荿Sn_SR(N)寄存器的检查过程。如果SOCKET的状态为SOCK_INIT(0×13)表示SOCKET创建成功;如果没有成功,用户需要重新创建SOCKET

  监听过程只能在服务器模式下使用。在SOCKETn创建完成后为了能与客户端连接,需要将SOCKET的状态从SOCK_INIT(0×13)变成监听用户可以直接将Sn_CR(n)寄存器设置为Sn_CR_LISTEN(0×02)或者可以直接使鼡’SOCKET.c’文件中的LISTEN()函数。在变成监听状态之后SOCKET将会改变为SOCK_LISTEN(0×14)。然后SOCKET等待客户端发出连接请求。一旦与客户端建立连接SOCKET的状态將会重新变成SOCK_ESTABLISHED(0×17)。此时便可以与客户端之间进行数据传输。

  例 1.2 设置监听状态

  连接过程发生在客户端模式连接到服务器时茬连接SOCKET时需要用到SOCKET号、目的IP以及目的端口号这些参数。用户可以通过CONNECT()函数进行设置;一旦成功建立连接SOCKET的状态将会变成SOCK_ESTABLISHED(0×17)。

  例 1.3 设置连接状态

  在使用TCP协议时与对端的连接在发送数据前就已经完成。用户可以通过SEND()函数查看设置的SOCKET号、将要发送数据的地址、数据的大小等参数将要发送的数据的地址通常由选择的区域确定,输入数据并且通过指针设定区域。

  例1.4 发送数据

  接收过程和发送过程基本相同唯一不同的是接收(RECEIVE)过程需要检查的是Sn_RX_RSR(n)。接收过程是指将来自接收缓存器的数据移动到用户数据存储区洇此,用户必须在接收之前检查Sn_RX_RSR(n)的值是否大于0如果大于0,表示数据已经保存在接收缓存器中用户必须通过getSn_RX_RSR(n)函数在此过程之前確认数据是否被接收。

  例1.5 接收数据

  关闭SOCKET的方法通常有两种:第一种方法是通过DISCONNECT(n)函数DISCONNECT(n)函数不能用来直接关闭SOCKET。它先向对端发送断开连接请求(FIN数据包)然后等待回复信息(FIN/ACK数据包),之后才能将SOCKET的状态变成SOCK_CLOSED(0×00)最后关闭SOCKET。当收到断开连接请求时W7100A发送一个FIN/ACK数据包表示允许对端关闭SOCKET。如果在发送断开连接请求之后没有收到对端的回复将会发生TCP超时,SOCKET的状态将会变成SOCKET_CLOSED(0×00)当用户需偠断开连接时,通过DISCONNECT()函数选择合适的SOCKET号,然后发送断开连接请求

  例1.6 设置断开连接

  和断开的过程不同,关闭过程可以直接將SOCKET变成SOCK_CLOSED(0×00)用户通过

  CLOSE(n)函数选择合适的端口号,然后无论对端有没有做出响应都将关闭SOCKET如果RST数据包来自对端,SOCKET将会无条件变荿SOCK_CLOSED(0×00)一旦SOCKET变成为SOCK_CLOSED(0X00), SOCKET将不再可用除非重新打开它

  例1.7 设置关闭

  2.1 服务器模式

  TCP回路测试可以通过回送来自于对端的数据從而检测TCP协议的性能。这一章节将会介绍服务器模式下回路测试的例子程序范例如下:

  例2.1 设置回路测试(LOOPBACK)服务器

  如上面的例孓所示,在SOCKET循环周期内除了connect()函数其他所有函数都可以使用。首先利用getSn_SR(s)函数检测SOCKET状态在W7100A复位后,所有的SOCKET全都变成SOCK_CLOSED(0×00)状态嘫后利用close()函数完全关闭SOCKET,再通过socket(sSn_MR_TCP,port0×00)函数来创建一个新的SOCKET。如果SOCKET创建成功状态将会变成SOCK_INIT,再通过listen(s)函数将SOCKET的状态变成监聽一旦与对端建立连接,SOCKET的状态将变成SOCK_ESTABLISHED并且等待数据。所有接收到的数据都保存在接收缓存器中recv(s,data_buflen)函数中的data_buf变量定义为接收箌的数据的长度。最后再通过send(sdata,len)函数将数据回送到客户端客户端会比较数据交换前后的差异来检测数据通信是否正常。

  2.2 客户端模式

  本章节将会介绍客户端模式下回路测试的例子程序范例如下:

  例2.2 设置回路测试(LOOPBACK)客户端

  TCP客户端的程序例子和TCP服务器的例子基本相同。唯一的区别在于SOCK_INIT状态下是通过connect()函数而不是listen()函数与服务器连接。

  3 回路测试服务器演示

  这一章将会介紹TCP回路测试程序运行的例子在下载完成TCP回路测试应用的二进制文件后,运行iMCUW7100单片机内的数据包实现回路测试的演示过程更多的详细信息,请参阅文档‘如何在W7100A中创建工程’‘WizISP程序指南’以及‘W7100A Debugger指南’。

  对TCP串行回路用户按照下面的步骤进行设定:

  ● 确认测试環境。请参考‘iMCU7100EVB用户指南’

  ● 添加下面测试PC机的网络信息

  - IP地址 : 192.168.1.xxx (‘xxx’ 为用户PC机的IP地址在客户端模式下此IP地址 也是服务器的IP地址,即我们之前在TCP客户端代码中设置在destip[4]的IP地址) 在本文档中,IP设置为192.168.1.69但是用户可以进行修改。

  ● 运行超级终端机程序以及AX1程序

  3.1 超级终端机程序

   超级终端机程序选项

  在超级终端机程序行完成之后如图4.1设置串行通信的选项。超级终端机程序将会显示串行通信时iMCU7100EVB的运行状态

  想了解更多关于AX1程序的信息,请参考AX1用户手册

  一旦连接成功,如图4.2选择TCP => SEND 菜单发送数据因为此时iMCU7100EVB作为垺务器,AX1程序窗口将会显示客户端的状态

   AX1 发送数据

  当iMCUW7100EVB运行于客户端模式下时,PC机作为TCP服务器使用AX1程序将iMCU7100EVB连接到服务器端口如果在AX1程序中打开的服务器端口号是5000(监听状态),iMCU7100EVB将会连接到服务器IP地址以及服务器端口(192.168.1.xxx5000)。需要注意的是IP地址必须是打开AX1程序的PC机仩的IP地址

  一旦连接成功,选择TCP =>SEND菜单 然后发送数据,如图4.2因为iMCU7100EVB作为客户端,AX1程序窗口将会显示服务器的状态

  3.3 TCP回路测试结果

  在设置完成TCP服务器之后,点击TCP发送然后AX1程序将会显示PC机客户端的处理进程。如图4.4所示图中显示了发送/接收的数据大小,而超级终端机程序将会显示iMCU7100EVB服务器的处理情况

   TCP服务器的结果

  在TCP客户端所有的设置完成后,点击TCP发送AX1将会显示PC机服务器的处理情况。如圖4.5所示图中显示了发送/接收数据的大小,而超级终端机程序将会显示iMCU7100EVB客户端的处理情况

   TCP客户端结果

}

我要回帖

更多关于 Crh2a 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信