多机通信设计
我们选用总线型网络拓扑结构,各站直接连在总线上,由服务机统一管理网络总线,分配网络资源。使用类似于令牌总线网的协议,由服务机轮询每一客户机是否有数据发送,如果有分配发送时间,移交总线使用权,否则询问下一客户机;其中接口电路会将所接收到信号中继,并转发。因此网络中任意一台机器所发送的数据对其它机器都是可见的,并且在一定程度上保证了信号的可靠性。
系统网络拓扑设计如下图所示:
系统网络协议设计
我们拟定网络容量为1台服务机和62台客户机,客户机之间可以相互通信。客户机和服务机
之间也可以相互通信。我们提出的协议参考了停止等待协议,数据包参考了IP数据包而设计,但针对单片机我们进行了如下特别处理。
1)基于一是单片机可用RAM不够(AT89S52256字节,AT89S51128字节),不能暂存太多数据包;二是片内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)。
因此,每发一数据包都会请求对方的确认,如果没有确认,则会再重发一次,超过两次则
被视为对方不可达,发送失败;并且在被询问客户机有数据发送时,如果总线空闲,服务机将分配其使用时间片,在这个时间片内,如果数据未发送完成,服务机将强行收回。能发送完成,客户机要发送结束数据包,归还总线使用权。图示如下:
系统协议中数据包的设计
通信协议AT89S52SCON字定义如下:
因是多机通信,且单片机的数据帧只有8位,故有必要将短的数据帧组成带有地址标记的数据包。在这里我们置SM0SM110,即选择工作方式2。在此方式下,如果SM2=0,串口会在接收到有效停止位产生一个中断;如果SM2=1,串口只在接受第九位数据为1的情况下产生串口中断,因此我们可以利用这一功能来处理地址帧与数据帧之间的区分问题。
其中TB8位数据为要发送的第九位数据,RB8为收到的第九位数据;TIRI分别为接收中断和发送中断。
此种方式下数据发送的波特率计算方式如下:
波特率=2SMOD次方除以64再乘一个fosc,即当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
SMODPCON的最高位,是单片机上实现电源控制面附加的。在这里我们将SMOD1,即为1/32foscfosc为晶振频率(11.0592MHz),即345600Bps
5.1  数据包格式
数据包采用不定长数据包,其格式如下:

各部分定义如下:
A 数据包开始标记,最高位为0,低七位为目的地址,奇偶校验位为1,表示此字节为地址信息;B 保留,填充为0AAH
C 数据包长度,包括开始和结束地址的总长度;
D 数据包类型,此类型决定数据包格式和所携带的信息;
E 携带的数据;F FCS检验序列;
G 结束标记,最高位为1,低七位为数据包源地址,奇偶校验位为1,表示此字节为地址信息。
考虑到单片机的内存,所以数据包没有设置太多的控制单位,而将开始标记和目的地址合并到一个单元中;同时将结束标记和源地址也合并到一个单元中。将发送模式设为02模式,第九位数据可以作为地址与数据区别标记,AG的第九位数据全为1,其它全为0,这样有效的区分了数据和地址信息。
同时考虑单片机网络的通信量,尽量提高单个数据包的效率,开始和结束字节分别附上目的地址和源地址,由最高位识别开始与结束,在很大程度上提高了数据包的效率,降低数
据字节的占用率。
5.2  FCS序列
计算机网络中FCS序列是帧检验序列。数据链路层帧方式接入协议(LAPF)中的字段,是一个16比特的序列。它具有很强的检错能力,它能检测出在任何位置上的3个以内的错误、所有的奇数个错误、16个比特之内的连续错误以及大部分的大量突发错误。
但如果将这一检验机制用到单片机网络中却不合适,因单片机每一次只能发送一个数据帧,且开始和停止数据位以及奇偶校验位总长度最大为11位。如果用16位长度的比特来做FCS序列,会增加很大计算量,这对运算速度相对很慢的单片机CPU也不可取,因此对FCS序列做如下调整:1FCS序列长度为8比特;2)生成方式为数据包各字节异或;3)检测长度从开始标记开始到FCS前一字节为止。引入FCS序列,检测数据传送突发错误。
5.3  数据包实例
下面给出具体的数据包实例。
A:表示此数据包送达的目的地址为01 B:保留字,默认填入0AAH C:长度为07
D:类型值00H E:所携带的数据00H FFCS检验序列。
计算方法如下:
 
G:此数据包的源地址为7FH
总结
本数据包设计不仅适用于8位单片机处理,也适用于其它同规格的单片机网络。由于数据包有检测机制,提高了数据的可靠性;并且采用类似IP数据包的封装形式,每个数据包都封装了源地址、目的地址、长度字节和控制字节,这给数据包的使用方式提供了很大的自由,同时比定长数据包节约网络资源。由于每发送一个数据包设置了等待确认机制,进一步提高了可靠性。经过实验,此协议能正常的运行在基于AT89S52的单片机网络上,并且具有相当高的可靠性,能实现客户机与服户机之间的通信,以及客户机与客户机之间的通信,
解决8位单片机多机通信的问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。