UDP协议直接位于IP协议的顶层。根据OSI参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
UDP报文格式如图2.12所示。源端口号和目的端口号的范围为0~65535。其中0~1023为熟知端口号, 1024~49151为注册端口号,其余为动态端口号。若源主机是客户端,则在大多数情况下源端口号就是动态端口号。若源主机是服务器端,则在大多数情况下源端口号是熟知端口号。
源端口号(16b) 目的端口号(16b)
UDP长(16b) UDP校验和(16b)
数 据
图2.12 UDP报文格式
UDP封装的子程序就是根据UDP头部格式要求,在应用数据的前面添加UDP头部。在本设计中,UDP头部的具体设置为:源端口号49200,目的端口号49200,不使用校验和。UDP解包的子程序根据UDP头部的信息提取出应用数据。
应用层主要功能是将UDP中的数据复制到指定的内存区域,以便主程序对相应的数据进行处理。
2.4.4 网口数据帧格式
(1)帧头为数据帧开始标志,长度2个字节。终端至ARM方向为 0FF81H,ARM至终端方向为0FF82H。
(2)帧长指从帧标志开始至本帧结束的所有数据的长度,不包括帧头、帧长本身,单位为字节数,长度为1个字节。
(3)帧标志用以指示本帧数据的内容属性,长度为1个字节,不同类型帧的数据长度和帧标志具体定义不同。
2.5 串口程序设计
2.5.1串口参数设置
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
(1)波特率
波特率是衡量通信速度的参数。它表示每秒钟传送的bit的个数。本系统的波特率为115200,即串口时钟是115200Hz。这意着串口通信在数据线上的采样率为115200Hz。
(2)数据位
数据位是衡量通信中实际数据位的参数。当计算机通过串口发送一个信息包,实际的数据不一定会是8位的,标准的值是5、7和8位。比如,标准的ASCII码是7位,扩展的ASCII码是8位。每个信息包包括开始/停止位,数据位和奇偶校验位。本系统串口的数据位为8位。
(3)停止位
停止位用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。本系统串口的停止位为1位。
(4)奇偶校验位
奇偶校验是串口通信中一种简单的检错方式。它有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位,用一个值确保传输的数据有偶个或者奇个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够判断接收数据的正确性。本系统串口没有使用奇偶校验位。
以上参数均在AT91SAM9G20的USART模块的模式寄存器US_MR中设置。串口的时钟由AT91SAM9G20的主时钟MCK分频得到。本系统串口参数为:波特率115200、数据位8位、停止位1位、校验位无。
2.5.2 发送数据
串口发送数据的时序图如图2.13所示。由于AT91SAM9G20的USART模块能自动生成停止位,只需将待发送的字符发送到发送保持寄存器(US_THR)中。发送器在通道状态寄存器(US_CSR)中有2个状态位:TXRDY(发送就绪)表示US_THR空,即所有写入US_THR中的字符已开始处理。当前字符处理完成,最后写入US_THR的字符送入发送器移位寄存器中,且US_THR变空,此时TXRDY 置位,表明写入的数据已发送。 电路板故障检测仪软件设计仿真+流程图(7):http://www.youerw.com/tongxin/lunwen_2634.html