WIZnet 之前已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)数据传输的实现过程,那么传输控制协议中,UDP也是非常常用的,这种无连接的协议在更多场合为用户提供了便捷,比如发电子邮件,QQ聊天发收消息等…好,那今天就学习一下,UDP模式在W5500EVB上的简单实现。

  一 实验硬件及其连接

  二 UDP实验相关知识

  W5500是一款全硬件TCP/IP嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案。W5500集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY),用户无需特别关注TCP 和 UDP的实现过程,只需最好相应配置和查询工作即可。下面主要讲解TCP和UDP区别,供参考

  1 基于连接与无连接

  TCP—传输控制协议提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

  每个数据包的传输过程是:先建立链路、数据传输、然后清除链路。数据包不包含目的地址。受端和发端不但顺序一致,而且内容相同。它的可靠性高。

  UDP—用户数据报协议是面向无连接的,每个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中不管其顺序,数据到达收端后再进行排序组装,遇有丢失、差错和失序等情况,通过请求重发来解决。它的效率比较高,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

  2、对系统资源的要求(TCP较多,UDP少)

  3、UDP程序结构较简单

  4、流模式与数据报模式

  5、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证

  6、TCP是面可靠的字节流服务 ,UDP 并不提供对 IP协议的可靠机制、流控制以及错误恢复功能等

  下图为TCP 和UDP应用

  三 关键程序介绍

  3.1编译工具为IAR5.4

  3.2 1-5 UDP实验例程实现功能:

  以UDP模式不断向 目标 IP地址 和端口 发送数据 test:ecountr,同时若收到 目标IP发来信息,将信息copy回复。本例中用网线直接和PC机相连接。PC机ip作为 目标ip ,注意PC机的IP与EVB IP处于同一网段内。

  3.3 实验函数流程:

  Step 1 :初始化STM32时钟 GPIO USART 等

  Step2: 初始化SPI 和W5500

  Step3: 配置MAC地址 本机IP地址 子网掩码 默认网关等信息,配置完后再读取以上信息,并打印到串口

  Step4:初始化8 个socket

  Step5 :实时读取socket 0状态,如果是socket 0是关闭的,则打开socket 0 作为UDP端口。如果读取 socket 0为UDP模式则向 目标 IP地址 和端口 发送数据 test:ecountr,同时若收到 目标IP发来信息,将信息copy回复。

  3.4 部分子程序讲解

  uint8 getSn_SR(SOCKET s)//获取SOCKET s状态

  {

  return IINCHIP_READ(Sn_SR(s));

  }

  /*W5500 SPI 通信协议的实现

  W5500 SPI数据帧 有三种 依次为数据段 控制段 和数据段 */

  uint8 IINCHIP_READ(uint32 addrbsb)

  {

  uint8 data = 0;

  IINCHIP_ISR_DISABLE(); //关闭中断

  IINCHIP_CSoff(); // CS=0, SPI使能片选

  IINCHIP_SpiSendData( (addrbsb & 0x00FF0000)>>16);// 写入地址段高8位 Address byte 1

  IINCHIP_SpiSendData( (addrbsb & 0x0000FF00)>> 8);// 写入地址段低8位Address byte 2

  IINCHIP_SpiSendData( (addrbsb & 0x000000F8)) ;// 以读模式写入控制段

  data = IINCHIP_SpiSendData(0×00); // 写入数据段

  /*SPI主从接口相当于一个循环串行移位寄存器,主机(STM32)发送数据 0×00,从机(W5500)就会接手0×00,并移数据到主机当中,该函数返回值就是读的数据*/

  IINCHIP_CSon(); // CS=1, SPI end 失能片选

  IINCHIP_ISR_ENABLE(); // 打开关中断

  return data;

  }

  Sn_SR(s)函数原型为 (0×000308 + (ch<<5)) 为目的是获取socket s的状态寄存器地址,类似函数还有很多,主要是获取寄存器绝对地址

  其中0×0003为socket n的状态寄存器 16位偏移地址,就是SPI通信的地址段

  08 + (ch<<5) 为控制段,指出偏移地址的归属,读写模式和

  SPI工作模式 ,08 = 00001000

  SPI 控制段:

  

  BSB4 BSB3 BSB2 就是ch表示地址是socket ch的状态寄存器地址

  BSB1 BSB0 为选择寄存器类型 01指选择 socket寄存器

  RWB :0读 1写

  OM1 OM0 控制SPI为可变数据长度工作模式还是 固定数据长度工作模式

  00 可变数据长度 (推荐使用可变数据长度工作模式)

  01 1字节数据长度

  10 2字节数据长度

  11 4字节数据长度

  四 程序下载和实验现象

  4 .1 下载

  打Flash loader 找到EVB的com 口,按BOOT0键使之为1,进入ISP模式进行下载。

  4.2观察实验现象

  运行网络调试助手软件,

  PC机IP :192.168.1.119 端口8080

  开发板IP:192.168.1.90 端口8080

  常态下 开发板发送 test 并计数 ,收到信息时会回复,关闭PC机端口并再次打开会发现,部分UDP数据已经丢失了,这个和TCP 模式是不一样的。说明UDP在一定情况下会丢包,对数据完整性要求高的场合不能用。

  五 总结

  可通过本例程学习通过SPI接口配置W5500工作在UDP模式的方法。

欢迎登陆,新华龙电子官网查看更多WIZnet W5500的信息:http://www.xhl.com.cn/ylogin/w5500.asp

W5500EVB UDP模式的测试与理解-新华龙电子的更多相关文章

  1. W5500EVB UDP模式的測试与理解

    之前的博文中已经介绍过W5500EVB 在TCP模式下的两种(Server及Client)传输数据的实现过程,那么传输控制协议中,UDP也是很经常使用的.这样的无连接的协议在很多其它场合为用户提供了便 ...

  2. TODO:Golang UDP连接简单测试慎用Deadline

    TODO:Golang UDP连接简单测试慎用Deadline UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interco ...

  3. 用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据的解决办法

    用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据(实际显示的是Response Times Over Time),解决办法:在GUI模式 ...

  4. 简单使用SOCKET,TCP,UDP模式之间的通信

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中, ...

  5. javascript创建对象的方法--工厂模式(非常好理解)

    javascript创建对象的方法--工厂模式(非常好理解) 一.简介 创建对象的方法 本质上都是把"属性"和"方法",封装成一个对象 创建对象的基本模式 普通 ...

  6. java工厂模式的测试

    /** * 工厂模式的测试 * <p> * 工厂方法模式 * 工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽 ...

  7. 新华龙电子推出最新网络开发板(W5100&W5500方案)

    2014/12/16 | Filed under: TCP/IP芯片 and tagged with: C8051, W5100, W5500, 新华龙电子, 网络开发板 42 Views 深圳新华龙 ...

  8. W5500 keep-alive的用途与用法--新华龙电子

    大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了.为什么?下面对这个问题进行解释说明,并提出解决办法. 图1中的上位机程序作为客户端,连接W ...

  9. Testing - 测试基础 - 理解

    理解 目的 测试就是要找到关键信息,有关项目和产品的关键决策都是根据这些信息做出. 对产品质量做出总体评估. 找出并报告团队所有可能会对产品价值产生消极影响的问题(但并不意味着能发现所有问题). 重心 ...

随机推荐

  1. Java笔记7-多态父类静态

    多态的应用-面向父类编程 1.对象的编译时类型写成父类 2.方法的返回类型写成父类 3.方法的参数类型写成父类 编译时类型:对象的声明时类型,在于编译期间 运行时类型:new运算符后面的类型 编译时类 ...

  2. Eclipse 关于“The type * is not accessible due to restriction on required library”问题的解决办法

    The type * is not accessible due to restriction on required library”的错误, 意思是所需要的类库由于受限制无法访问. 解决办法: 1 ...

  3. oracle 执行计划查看

    1)  sql command窗口里explain plan for select * from emp: 2) select * from table(dbms_xplan.display);

  4. sql join,left join,rigt join

    left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录.right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录.inner join: 内连接,又叫等 ...

  5. STM32学习笔记——OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  6. 浅谈声明与定义的区别 分类: C/C++ 2015-06-01 15:08 157人阅读 评论(4) 收藏

    以下代码使用平台是VS2012. 清楚明白声明与定义是一名合格的程序猿的基本要求. 本人认为,C++编码过程中谈及"声明"和"定义"是因为我们要使用一个变量.类 ...

  7. Struts2 之 对xwork的理解

    对象的生命周期的管理是面向对象编程亘古不变的话题,从syntax的角度,面向对象的高级编程语言都是以“对象”为核心,而对象之间的继承关系.嵌套引用关系构成的对象树结构为我们进行对象级别的逻辑操作提供了 ...

  8. 嵌套循环中break、continue的用法

    在循环语句中经常会用到break.continue语句,基本用法如下: 一.break语句为退出当前循环,在嵌套循环中结果如下: var num=0; for(var i=0;i<5;i++){ ...

  9. KO中对象数组排序时,两个属性的优先顺序不一致时的排序实现

    function FromSort(left, right, asc) {    if (left.属性1 != "") {        if (right.属性1 != &qu ...

  10. Oracle用法集锦

    查询第一条数据 修改表名 ALTER TABLE tablename RENAME TO newtablename 修改列名: ALTER TABLE BD_PRI RENAME COLUMN EU_ ...