UDP提供不可靠、无连接的数据报文传输,它在没有建立连接时仍然能够处理数据。这样,可能会造成UDP信息的丢失、重叠或者改变。当数据包以高速方式传输时,接收端无法处理所有的数据。在这种情况下,用户必须考虑UDP是否符合自己的应用需求。由于UDP能够广播数据包,所以它通常用在多播系统下。
1. UDP SOCKET
用户可以使用W7100A所支持的8个socket作为UDP通信中的协议。但是,首先必须创建SOCKET。在创建SOCKET时需要用到socket号、使用的协议、使用的端口号以及设定的标志位。因为UDP协议是由Sn_MR_UDP(0×02)寄存器设定的(后面将会介绍)。Socket号则是由用户自己确定,可以选择W7100中0到7这8个socket中的任意一个或者全部8个socket。除此,用户也可以指定UDP协议中要使用的端口号。在打开UDP socket时,通过WIZnet提供的SOCKET()函数,来完成上面提到的各项参数的设定。1.1 网络初始化
W7100A单片机的网路配置需要用到IP地址、网关、子网掩码以及MAC地址。网络参数的处理如图2.2.1所示。除此以外,还需要设置每一个socket的TX/RX缓存器以及其它寄存器的大小。
<图2.1> 设定网络配置
由于UDP不需要建立连接就可以进行通信,可以通过调用socket()函数轻松创建UDP
socket。如图2.2.2所示为创建UDP socket的例程。
<图2.2> UDP socket的创建
1.3 接收(RECEIVE)
图2.2.3显示了数据的接收过程。在接收数据之前,用户可以通过检查Sn_RX_RSR来确定要接收的数据的长度。一旦有数据被接收到,用户便可以利用recvfrom()函数来执行接收过程。
<图2.3> 接收数据
1.4 发送(SEND)
在发送UDP数据报文之前,用户必须设置目的地IP地址和端口;一旦设置完成,用户再通过sendto()函数将UDP数据报文送出。
<图2.4>发送UDP数据
2. UDP回路测试程序
这一章节将会介绍如何利用第二章中的函数来实现UDP回路测试。UDP回路测试程序是一种编码,它可以将从对端接收到的数据准确无误的发送回去。下面就是UDP串行回路测试程序的例子:
<图3.1> UDP回路测试程序
后面将会介绍UDP回路测试程序的代码示例。首先,设置IP或端口等网络信息,然后打开Sn_SR寄存器。Sn_SR在UDP模式下存在两种状态:一种是SOCK_UDP, 此时UDP socket已经成功打开并且可以进行UDP通信。在此状态下,在接收到UDP数据后,通过recfrom()函数和sento()函数再将数据回送。另一种状态是SOCK_CLOSED,UDP在这种状态下是未被打开的,必须先通过close()函数关闭socket,之后重新调用socket()函数打开socket。
3. UDP回路测试演示
在这一章节,将会用具体的示例代码程序来演示UDP回路测试。首先,下载UDP回路测试程序的应用文件到iMUCW7100EVB开发板,执行该程序确认iMCUW7100EVB是否可以正常进行回路测试。更多的详细信息,请参阅文档‘如何在W7100中建立工程(project)’,‘WizISP程序指南’以及‘W7100A Debugger指南’。对于UDP回路测试程序,用户可以按照下面的步骤操作:
l 确认测试环境。详细信息,请参阅文档‘iMCUW7100EVB用户指南’。
用UTP线连接PC测试机和iMCUW7100EVB
用串行线连接PC测试机和iMCUW7100EVB
连接5V电源适配器到iMCUW7100EVB,并打开电源
l 确认测试PC机的网络信息:
源IP地址 : 192.168.1.2
网关IP地址: 192.168.1.1
子网掩码: 255.255.255.0
l 运行超级终端机程序和AX1程序
3.1 超级终端机
<图4.1> 超级终端机选项
运行超级终端机,如图4.1所示,设置串行通信选项,超级终端机程序将会然后通过串行通信显示iMCU7100EVB开发板的状态。
3.2 AX1程序
<图4.2> AX1设置为UDP通信
运行AX1程序,然后将AX1程序设置为UDP通信方式,如上图4.2所示。关于AX1程序设置的更多详细信息请参考AX1用户手册。如果要想使用UDP发送,请选择菜单栏中的UDP => SEND,然后点击OK按钮,AX1程序将会显示客户端PC机的状态。
3.3 UDP回路测试程序演示
在所有的设置完成后,点击UDP发送按钮。AX1将会显示PC机的进程,如图4.3中显示了发送/接收数据的大小,同时如图4.4超级终端机程序将会显示服务器iMCU7100EVB的处理进程。
<图4.3>使用UDP发送临时数据
<图4.4> 超级终端机程序窗口
没有评论:
发表评论