查看: 995  |  回复: 1
W7500 M0+MAC+TCP/IP 以太网单芯片方案 W7500 W7500EVB用户...
WSGustin
29
主题
48
回复
发表于2018-03-21 18:38:45 | 只看该作者
1# 电梯直达
W7500(W7500P)芯片简介: 
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。

全硬件TCP/IP核的最大优点是他在执行联网操作时不需要占用MCU的运行资源,大大增加了MCU的工作效率。

       UDP例程可以让W7500EVB实现UDP协议,进行非连接,快速的数据传输。但UDP协议传输数据本身是不稳定的,不会建立连接也不会检查应答,所以可能会造成丢包,但同时由于数据传输过程不需要进行连接过程,也不需要判断响应等,所以其传输速度比TCP协议会快很多。


想了解更多关于WIZnet W7500更多信息,或者有技术问题请联系我们:gustin@wisioe.com
深圳炜世科技—WIZnet官方代理商,全程技术支持,价格绝对优势!
电话:0755-86568556
邮箱:support@wisioe.com
WSGustin
29
主题
48
回复
发表于2018-03-21 18:43:39   |  只看该作者
2#

第二十一章 UDP

21.1 UDP例程概述

       UDP例程可以让W7500EVB实现UDP协议,进行非连接,快速的数据传输。但UDP协议传输数据本身是不稳定的,不会建立连接也不会检查应答,所以可能会造成丢包,但同时由于数据传输过程不需要进行连接过程,也不需要判断响应等,所以其传输速度比TCP协议会快很多。

21.2 UDP协议简介

UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。在网络中它与TCP协议一样,处于TCP/IP协议体系中的传输层,处于IP协议的上一层,用于处理数据包。与TCP不同的是,UDP是一种无连接的协议。也就是说,UDP发送数据之前不需要先建立连接(当然发送数据结束时也没必要释放连接),因此减少了时间上的开销。同时,UDP不使用拥塞控制,也不保证可靠交付,因此主机不需要维持具有许多参数的、复杂的连接状态表。总体来说,UDP是一种不可靠的数据传输协议,能提供比较快速的数据传输速度,但是并不保证数据的正确性。这些特性与TCP刚好相反。

UDP协议支持单播、广播和多播(组播)的通信。

网络之间的节点就好像人们在通话一样,如果一个人跟另外一个人说话,那么就可以称作是单播,单播是一对一通信,一次只能将数据传输给一个目的地址。网络上绝大部分的数据是以单播形式传输的,比如收发电子邮件、浏览网页。

广播通信则可理解为,一个人通过广播喇叭对在场所有人讲话,是一对多,信息一下子就散播开来。广播通信使用广播地址(255.255.255.255),将数据发送给所有的可接收的目的地址。

多播,又叫组播。与广播不同,它是把信息同时传递给一组目的地址,即与多个、在多播组注册的目的地址进行通信。

但广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。在某些情况下,UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,严重影响速度。反观UDP,由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证;在给定的主机上能识别多个目的地址,同时允许多个应用程序在同一台主机上工作,并能独立地进行数据报的发送和接收,包括视频会议、网络电话在内的众多网络应用都需要使用UDP。基于UDP的应用层协议有:TFTPSNMPNFSDNSBOOTP

21.3 UDP数据报格式

采用UDP的端口来标识,首先UDP端口号可以是固定的,发送方只需要发送数据到指定端口即可。对于不同功能可以分配不同的端口号,来区分不同功能的数据。对于标准功能,也可以预先分配端口号,实现该功能的程序可以申请该端口号,这样,就可以将数据包发往申请的端口来实现此功能。

 


21.3.1UDP报文组成结构

UDP源端端口和目的地端口指定了216bit的端口号。源端端口号可选,如果指定了,则相应数据包发往该端口,如果没有指定,则设为0

UDP用户包长度表示了整个UDP数据包的8bit字节数据的数量,包含头部和数据部分,最小为8(数据可以为0)。

UDP校验和用以保证UDP数据包的完整性。该字段可选,没有计算校验和的UDP数据包应该将该字段设为0

20.4 UDP例程解析

       例程初始化部分就不再赘述,有需要的可以查看Network install例程中初始化部分的讲解。下面我们具体分析UDP应用函数。


1.     int32_t udps(uint8_t sn, uint8_t* buf, uint16_t port)
2.     {
3.       uint16_t size;
4.       
5.       switch(getSn_SR(sn))         /*获取socket的状态*/
6.       {
7.         case SOCK_UDP :          /*socket初始化完成*/
8.             if((size = getSn_RX_RSR(sn)) > 0)
9.             {
10.            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
11.            ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport);/*W7500接收计算机发送来的数据*/
12.            printf("%s\r\n",buf);
13.            if(ret <= 0)
14.            {
15.              #ifdef _LOOPBACK_DEBUG_
16.              printf("%d: recvfrom error. %ld\r\n",sn,ret);
17.              #endif
18.              return ret;
19.            }
20.            size = (uint16_t) ret;
21.            sentsize = 0;
22.            while(sentsize != size)
23.            {
24.              ret = sendto(sn, buf+sentsize, size-sentsize, destip, destport);/*W7500把接收到的数据发送给Remote*/
25.              if(ret < 0)
26.              {
27.                #ifdef _LOOPBACK_DEBUG_
28.                printf("%d: sendto error. %ld\r\n",sn,ret);
29.                #endif
30.                return ret;
31.              }
32.              sentsize += ret;
33.            }
34.          }
35.      break;
36.      case SOCK_CLOSED:                    /*socket处于关闭状态*/
37.          if((ret = socket(sn, Sn_MR_UDP, port, 0x00)) != sn)  /*初始化socket*/
38.            return ret;
39.          #ifdef _LOOPBACK_DEBUG_
40.          printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, port);
41.          #endif
42.      break;
43.      default :
44.      break;
45.    }
46.    return 1;
47.  }


       SOCK_UDP 的状态,默认是关闭,37行初始化SOCK_UDP。之后8行则是判断是否有数据发送到数据缓冲区,11行判断如果有就将数据复制到buf数组内,然后打印串口信息,并且将数据回发到发送方。

       至此,UDP例程代码解析就结束了。将UDP例程编译烧录后打印串口信息结果如图20.4.1

  


20.4.1UDP例程打印结果

       使用网络调试助手,测试PCW7500EVB,是否能收发数据。结果如图20.4.2,连接成功,收发数据正常。W7500EVB设置为UDP协议成功。

 


20.4.2 UDP数据交互


主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部