多机通信协议设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多机通信设计
我们选用总线型网络拓扑结构,各站直接连在总线上,由服务机统一管理网络总线,分配网络资源。

使用类似于令牌总线网的协议,由服务机轮询每一客户机是否有数据发送,如果有分配发送时间,移交总线使用权,否则询问下一客户机;其中接口电路会将所接收到信号中继,并转发。

因此网络中任意一台机器所发送的数据对其它机器都是可见的,并且在一定程度上保证了信号的可靠性。

系统网络拓扑设计如下图所示:
4 系统网络协议设计
我们拟定网络容量为1台服务机和62台客户机,客户机之间可以相互通信。

客户机和服务机之间也可以相互通信。

我们提出的协议参考了停止等待协议,数据包参考了IP 数据包而设计,但针对单片机我们进行了如下特别处理。

1)基于一是单片机可用RAM 不够(AT89S52是256字节,A T89S51是128字节),不能暂存太多数据包;二是片内CPU 速度不理想,控制多个时钟,CPU 资源消耗太多,会大大降低系统性能。

因此,我们取消了停止等待协议有发送窗口这一机制,而采用发送一个数据包就等待当前数据包的确认包。

超时再发,超过两次视不可达。

即可以理解为发送窗口为1。

2) 对于IP 数据包,源地址和目的地址都在首部。

但本协议因为要标界,即必须标出一个数据包的起始与结束。

8位单片机一次只能处理一个8位的数据帧,这样就必须想办法把多个数据帧组合成包,增加信息携带量和数据标识信息。

利用这个边界和奇偶校验位,来携带目的地址和源地址,以最高位来识别目的地址和源地址,以便经济,节约了资源。

数据包的具体设计如下:(1)精简首部项,只保留目的地址、源地址、长度、FCS 、类型字和 一个保留字,以备第二次开发用,以增加数据携带量。

(2)对于FCS ,采用8位异或的方式,即数据包的每一个字节(除最后一个字节源地址外和FCS 本身)相异或,得到8位检验码作为FCS 。

这样有一定的检错功能,也降低了计算强度。

(3)吸取IP 数据包可变长度的特点,设置长度可变(6-16字节),这样有利于节约网络资源,减少处理时。

(4)保留IP 数据包的控制字,以便标识数据包类型,提高数据包使用的灵活性。

经过综合分析和优化处理,制定如下单片机多机通信协议: 服务机协议:
(1)服务机按1/384的间隔发送询问数据包;
(2)将当前询问地址加1,判断,如果大于63则置当前询问地址为
1,如果小于1则置当前询问地址为62,转下一步; (3)向当前询问地址机器发送一询问数据包; (4)等待一个发送间隔时间;
(5)如果没有收到确认包则转到将当前数据包重发,重发计数器加1,计数器大于2则转向(6);如果收到确认包转到(7); (6)设置发送失败标记,重发计数器清0,转到(2); (7)设置发送成功标记,重发计数器清0,转到(8);
(8)查看被询问客户机是否有数据要发送,有则分配总线使用权和时间片,转到(9),否则转到(2);
(9)等待被询问客户机的发送结束数据包,如果收到转到(2)。

在一个时间片(1/384s )内,没有收到,视为超时。

服务机收回总线使用权,转到(2)。

客户机协议:
(1)接收属于本机的数据包;
(2)如果是询问数据包,检查本机是否有数据要发送,如果有,则发送“有数据发送信息”到服务机,并捎带确认转到(3),否则发送“没有数据发送信息”到服务机,并捎带确认,转到(1);其它类型数据包不处理,转到(1);
(3)等待网络资源分配数据包,收到则发送确认包,转到(5);超时,停止等待转到(1);
(4)等待上一数据包的确认,收到则转到(5),否则转到(7);
(5)检查是否还有数据要发送,有则发送数据包转到(6);否则发送“结束发送信息”到服务机,转到(1)。

(6)检查是否超时,如果超时结束发送转到(1),否则转到(4)。

(7)重发,是否超过两次,是则当前发送失败,转到(5),否则转到(4)。

因此,每发一数据包都会请求对方的确认,如果没有确认,则会再重发一次,超过两次则被视为对方不可达,发送失败;并且在被询问客户机有数据发送时,如果总线空闲,服务机将分配其使用时间片,在这个时间片内,如果数据未发送完成,服务机将强行收回。

能发送完成,客户机要发送结束数据包,归还总线使用权。

图示如下:
5 系统协议中数据包的设计 AT89S52的SCON 字定义如下:
因是多机通信,且单片机的数据帧只有8位,故有必要将短的数据
帧组成带有地址标记的数据包。

在这里我们置SM0,SM1为
10,即
选择工作方式2。

在此方式下,如果SM2=0,串口会在接收到有效停止位产生一个中断;如果SM2=1,串口只在接受第九位数据为1的情况下产生串口中断,因此我们可以利用这一功能来处理地址帧与数据帧之间的区分问题。

其中TB8位数据为要发送的第九位数据,RB8为收到的第九位数据;TI,RI分别为接收中断和发送中断。

此种方式下数据发送的波特率计算方式如下:
波特率=2的
SMOD次方除以64再乘一个fosc,即当SMOD=1时,波特
率为1/32fosc,当SMOD=0时,波特率为1/64fosc。

SMOD是PCON的最高位,是单片机上实现电源控制面附加的。

在这里我们将SMOD置1,即为1/32fosc,fosc为晶振频率(11.0592MHz),即345600Bps。

5.1 数据包格式
数据包采用不定长数据包,其格式如下:
各部分定义如下:
A:数据包开始标记,最高位为0,低七位为目的地址,奇偶校验位为1,表示此字节为地址信息;B:保留,填充为0AAH;
C:数据包长度,包括开始和结束地址的总长度;
D:数据包类型,此类型决定数据包格式和所携带的信息;
E:携带的数据;F: FCS检验序列;
G:结束标记,最高位为1,低七位为数据包源地址,奇偶校验位为1,表示此字节为地址信息。

考虑到单片机的内存,所以数据包没有设置太多的控制单位,而将开始标记和目的地址合并到一个单元中;同时将结束标记和源地址也合并到一个单元中。

将发送模式设为02模式,第九位数据可以作为地址与数据区别标记,A和G的第九位数据全为1,其它全为0,这样有效的区分了数据和地址信息。

同时考虑单片机网络的通信量,尽量提高单个数据包的效率,开始和结束字节分别附上目的地址和源地址,由最高位识别开始与结束,在很大程度上提高了数据包的效率,降低数据字节的占用率。

5.2 FCS序列
计算机网络中FCS序列是帧检验序列。

数据链路层帧方式接入协议(LAPF)中的字段,是一个16比特的序列。

它具有很强的检错能力,它能检测出在任何位置上的3个以内的错误、所有的奇数个错误、16个比特之内的连续错误以及大部分的大量突发错误。

但如果将这一检验机制用到单片机网络中却不合适,因单片机每一次只能发送一个数据帧,且开始和停止数据位以及奇偶校验位总长度最大为11位。

如果用16位长度的比特来做FCS序列,会增加很大计算量,这对运算速度相对很慢的单片机CPU也不可取,因此对FCS序列做如下调整:1)FCS序列长度为8比特;2)生成方式为数据包各字节异或;3)检测长度从开始标记开始到FCS前一字节为止。

引入FCS序列,检测数据传送突发错误。

5.3 数据包实例
下面给出具体的数据包实例。

A:表示此数据包送达的目的地址为01; B:保留字,默认填入0AAH;C:长度为07;
D:类型值00H; E:所携带的数据00H; F:FCS检验序列。

计算方法如下:
G:此数据包的源地址为7FH。

6 总结
本数据包设计不仅适用于8位单片机处理,也适用于其它同规格的单片机网络。

由于数据包有检测机制,提高了数据的可靠性;并且采用类似IP数据包的封装形式,每个数据包都封装了源地址、目的地址、长度字节和控制字节,这给数据包的使用方式提供了很大的自由,同时比定长数据包节约网络资源。

由于每发送一个数据包设置了等待确认机制,进一步提高了可靠性。

经过实验,此协议能正常的运行在基于AT89S52的单片机网络上,并且具有相当高的可靠性,能实现客户机与服户机之间的通信,以及客户机与客户机之间的通信,解决8位单片机多机通信的问题。

相关文档
最新文档