打印本文 关闭窗口 | |
一个简单实用的HDLC出错重发协议来源于瑞达科技网 | |
作者:佚名 文章来源:不详 点击数 更新时间:2011/12/29 文章录入:瑞达 责任编辑:瑞达科技 | |
|
|
设为首页 EN | 繁体 首页新闻中心最新产品设计应用在线座谈紧缺人才培训研讨会电子商城解决方案电子百科博客技术论坛技 术 频 道 嵌入式系统 电源管理 3G手机 汽车电子 数字电视 消费电子 传感器 通信技术 工业控制 测试测量 可编程逻辑 中国RoHS DSP与MCU 无源元件 电子制造 模拟电路哈佛结构 运算放大器 非结晶硅太阳电池DSP MCU双核 数据转换器 MODEM专用型DSP 检波器 通用型DSP请您来编写词条 更多>>一个简单实用的HDLC出错重发协议江西联创通信有限公司 贺晔晔 引 言 在现代通信中,通信的可靠性往往是一个非常重要的课题。因为在现实世界中各种干扰无所不在,单纯依靠硬件电路及物理线路上采取的各种屏蔽措施往往还不能解决全部问题。这就需要在软件及通信协议上采取措施,并与硬件及各种物理设备结合起来,共同解决通信的不稳定性问题,从而提高系统性能及可靠性。 笔者通过对各种通信协议的比较、分析,总结出它们各自的优缺点,并通过多次实践,提出了一种相对比较简单的点对点HDLC协议。 1 协议内容 发送方与接收方事先约定好数据通信格式、数据发送速率,并为每个要发送的数据包添加一个包序号字节(放在每个数据包的最后字节)。具体内容如下: ①发送方每隔50 ms(该时间可根据具体情况进行调整)检查自己的发送缓冲区,看是否有数据需要发送。若无数据发送,则返回;若有数据要发送,则连续发送10个数据包。其中,每个数据包之间的时间间隔为50 ms,若要发送的数据包不够10个,则不够的数据包用空闲包代替。每个数据包与空闲包的最后一个字节用作数据包包序号,分别标记为0~9。 ②接收方设有一个接收包序号字节变量(初始值为0),用于表示下一个要接收到的包的包序号。接收方每收到一个数据包,就将该接收包序号字节变量的值与接收到的数据包的序号值相比较。若相等,则表示数据包接收正确,并将接收包序号字节变量加1,准备接收下一个数据包。若不相等,则表示出现了漏数据包现象,接收方往发送方回送一个NAK包,告诉对方出现了漏数据包现象;当发送方收到了该NAK包时,重发上次所发的10个数据包,接收方继续重复上述接收过程。但每次发送最多只重发3次,若已重发3次,接收方还未正确接收,则发送方和接收方都跳过当前数据包的发送,准备下一次数据包的发送。若已成功地接收到发送方所发的10个数据包,则接收方向发送方回送一个ACK包,告诉发送方已成功接收到发送方所发的10个数据包。 ③若发送方连续发送10个数据包,接收方在规定的时间内没有回送消息,则发送方重发这10个数据包。若重发3次,接收方仍未回送消息,则退出当前数据包的发送,准备下一次数据包的发送。 2 收发流程 发送方发送流程如图1所示。发送方发送过程可在定时器或主程序中被定时调用。 接收方接收流程如图2所示。 3 应用实例 MT8952受工业控制计算机(或8051)的操作与控制。通信双方通过中断方式完成对数据的接收,通过定时方式完成对数据的发送。系统组成关系如图3所示。 这里以工业控制计算机方的协议实现为例,采用C语言编写该协议的实现例程,供大家参考(阅读该程序代码时,须将发送程序代码与接收程序代码相结合,来了解其具体实现过程)。 编者注:发送和接收程序代码略。 发送方与接收方都采用如下的数据包格式: 其中,地址字节用于MT8952通信芯片内部自己的校验,高层应用程序不涉及该字节;校验字节等于0,表示为自己所要的数据。 4 结 论 各种实验证明,使用了该出错重发协议的系统比起那些没有采用任何纠错的系统,在性能上有了很大的改进,大大增强了系统的抗干扰能力,提高了通信的可靠性,而且在实现上也比较容易,具有一定的应用推广价值。 |
|
打印本文 关闭窗口 |