之前的博文中已经介绍过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—传输控制协议提供的是面向连接、可靠的字节流服务。当客户和server彼此交换数据前。必须先在两方之间建立一个TCP连接,之后才干数据传输。TCP提供超时重发。丢弃反复数据,检验数据,流量控制等功能,保证数据能从一端传到还有一端。

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

UDP—用户数据报协议是面向无连接的。每一个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中无论其顺序。数据到达收端后再进行排序组装,遇有丢失、差错和失序等情况。通过请求重发来解决。

它的效率比較高,是一个简单的面向数据报的运输层协议。UDP不提供可靠性。它仅仅是把应用程序传给IP层的数据报发送出去,可是并不能保证它们能到达目的地。因为UDP在数据传输报前不用在客户和server之间建立一个连接。且没有超时重发等机制,故而传输速度非常快。

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地址 和port 发送数据 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 作为UDPport。

假设读取 socket 0为UDP模式则向 目标 IP地址 和port 发送数据 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 port8080

开发板IP:192.168.1.90 port8080

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

五 总结

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

很多其它学习笔记:

W5500EVB TCP Client模式设置说明

W5500EVB TCP Server演示

欢迎登陆:

WIZnet官方中文站点:http://www.iwiznet.cn

WIZnet官方微博:http://weibo.com/wiznet2012

转载于:https://www.cnblogs.com/jzssuanfa/p/6825998.html

W5500EVB UDP模式的測试与理解相关推荐

  1. Loopback測试软件AX1用户手冊 V3.1

    点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip™的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip™评估 ...

  2. 第4代白盒測试方法介绍--理论篇

    关键词: 白盒測试 第4代 測试方法 4GWM 在线測试 持续測试 灰盒 脚本驱动 脚本桩 摘  要: 本文是第4代白盒測试方法的理论介绍,描写叙述3个关键领域内9项关键特征的概念与固有特征.同一时候 ...

  3. Selenium2 Python 自己主动化測试实战学习笔记(五)

    7.1 自己主动化測试用例 无论是功能測试.性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验.能力以及对项目的深度理解. 7.1.1 手工測试用例与自己主动化測 ...

  4. atitit.jndi的架构与原理以及资源配置and单元測试实践

    atitit.jndi的架构与原理以及资源配置and单元測试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin  <database> ...

  5. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  6. 測试人员的核心能力与素养

    声明:该文不是我的原创作品.是我的同事魏增艺的大作,独家授权我来进行发表. 在<測试人员的角色>一文的最后,我们相信优秀的測试人员是项目的前灯.是整个研发系统的反馈回路.那么什么是优秀的測 ...

  7. JMeter 压力測试使用函数和 CSV 文件參数化 json 数据

    在 http Load Testing 中.json 数据的提交是个让人头疼的问题.本文具体介绍怎样进行 JMeter 的 json 測试提交,以及怎样将其參数化.         Step 1 ht ...

  8. Android自己主动化測试之Monkeyrunner用法及实例

    眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...

  9. GCD and LCM Aizu - 0005(辗转相除)+GCD LCM Inverse POJ - 2429(java或【Miller Rabin素数測试】+【Pollar Rho整数分解】)

    题目:GCD and LCM Aizu - 0005 Write a program which computes the greatest common divisor (GCD) and the ...

最新文章

  1. BZOJ2298 [HAOI2011]problem a
  2. JavaScript实现使用 BITWISE 方法查找集合的幂集算法(附完整源码)
  3. Laravel核心解读--Database(四) 模型关联
  4. Java 基础系列:异常
  5. imx6q LINUX 启动时间优化
  6. 个人笔记上传 -- linux简单命令
  7. 同程艺龙解除合作,同程支付艺龙3000万补偿金
  8. krpano中视角js动态指向
  9. 约翰·卡马克和他的id Software
  10. O2O优惠券使用新人赛数据发掘工程
  11. MQTT断线重连订阅无法接收
  12. Chap.6 总结《CL: An Introduction》 (Vyvyan Evans)
  13. 2013传智播客视频--.ppt,.pptx,.doc,.docx.目录
  14. RERAN:安卓系统的定时和点击的录制和回放——(2)
  15. COM, COM+ 和 .NET 的区别
  16. 使用html2canvas实现录取通知书
  17. 漏洞扫描之OpenVas
  18. 专科生也有大梦想吗?
  19. php获取中国银行汇率,用Simple Html Dom Parser 获取中国银行汇率
  20. 记使用HTML5 + JS 构建水果忍者游戏

热门文章

  1. linux 自动ping脚本,linux上ping脚本及zabbix3.xx上自动发现
  2. java 打破双亲委派_JVM - 打破双亲委派机制(模拟热加载)
  3. java 8位随机数_JAVA中生成指定位数随机数的方法总结
  4. WARN ServletController:171 - Can't find the the request for xxxx's Observer
  5. 百度网络推广带你了解网站文章锚文本优化需要注意的事项?
  6. 网络营销外包下字节跳动如此优秀私有市场估值远超拼多多与京东
  7. 浅析企业网站软文效果是如何展现的?
  8. mysql 行自动增量为23,Mysql Innodb:自动增量非主键
  9. jq选中单选框后文本框不可编辑_打开速度最快最强大的PDF免费工具,编辑+阅读功能一体...
  10. python画数组曲线_python – 在matplotlib中如何填充由两组不同数组定义的两条曲线?...