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

  • 相关阅读:
    Selenium+Java(三)Selenium元素定位
    Selenium+Java(二)Selenium打开IE浏览器
    Selenium+Java(一)Selenium基础环境配置
    Spring缓存注解@Cacheable
    [阿里云] 阿里云修改主机名
    [openwrt]openWrt安装管理界面中文包
    [Git] 仅仅Pick一次commit 合并到另一个分支
    [线程池]线程池参数设置
    [Kibana] Kibana 语法
    [mybatis]list的foreach的使用
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6825998.html
Copyright © 2011-2022 走看看