zoukankan      html  css  js  c++  java
  • W5500EVB UDP模式的測试与理解

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

    一 实验硬件及其连接

    W5500EVBUDP1

    二 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应用

    W5500EVBUDP2

    三 关键程序介绍

    3.1编译工具为IAR5.4

    W5500EVBUDP3

    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 控制段:

    W5500EVBUDP6

    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模式进行下载。

    W5500EVBUDP4

    4.2观察实验现象

    W5500EVBUDP5

    执行网络调试助手软件,

    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

  • 相关阅读:
    httpcontext in asp.net unit test
    initialize or clean up your unittest within .net unit test
    Load a script file in sencha, supports both asynchronous and synchronous approaches
    classes system in sencha touch
    ASP.NET MVC got 405 error on HTTP DELETE request
    how to run demo city bars using sencha architect
    sencha touch mvc
    sencha touch json store
    sencha touch jsonp
    51Nod 1344:走格子(贪心)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6825998.html
Copyright © 2011-2022 走看看