永发信息网

如何设计一种串行通信协议

答案:2  悬赏:50  手机版
解决时间 2021-01-02 12:04
如何设计一种串行通信协议
最佳答案
简单的说要做一个协议,首先要考虑你的总线拓扑形式。是点对点的方式传输(是一主一从,还是两个为对等的节点),还是一个主机下挂了多个从节点(节点和主机如何链接,是星形链接、树形链接,还是总线型连接)。   如果是一主一从的点对点那是最简单的。如果是两个对等的节点或者一对多总线节点,那就需要考虑总线竞争、冲突、地址设计、超时处理等问题。   那最简单的主从点对点来说(封闭式网络,即设备节点数确定,且非相设备协议不相同无法接入该网络)。   首先你的波特率设置,最好是所有节点都定一个波特率,有人做过不同波特率通信的,反正我没玩过。而且波特率的大小要从你总线的数据量开销、处理器/控制器的速度、应用的环境中电磁复杂程度、硬件设备的带宽(频率高了会不会受影响,导致丢包率增大,或影响其他设备)   然后一个帧开头应该带有帧标识,让对方判断收到的是数据帧还是应答帧。点对点通信,最少应该具备一个数据命令帧和应答帧。数据命令帧是包含主要设信息的,应答帧是告诉对方是正确否收到数据,如没有,请重发。另外如果收的帧标识都不是这两种的,就说明可能总线出现问题/受干扰/接入其他未知设备。   其次考虑你传输的数据量有多大,是否需要数据包定长。如果传输的数据时而多(十几/几十个个字节),时而少(不到一个字节),那就不能定长。这样的话就需要在第二第三个字节(放帧标识的字节前后)加上包/帧的长度信息。   然后是地址,虽然只有两个点在面对面对话通信,但建议加上源地址和目标地址。这个只是建议,在点对点通信中可选。   之后应该加上一个序列号,用以表示为第几次发送。比如说,我发了一次Hello给你,下一次应该发一个World给你,但你反馈应答帧说没收到或者收到错误,然后我再发一次Hello给你,这时的Hello这帧中的序列号应为2了。   接下来是数据内容……   最后是校验,CRC ……异或……什么的,对前面所有的数据从帧头到帧尾的位做数据校验。防止传输过程中,任何一个bit出错。   现在想到的就是这么点。吐个槽,记得当年我们一组人做铁路信号设备的协议,研究院的人看了我们两周想出来的协议后(基于RS584),说:协议是这么简单就搞出来的么!没试验个一年的工夫都不敢说整出一个安全的强壮的协议来。
全部回答
回答的不错
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
广西到云南多少公里
腰腿疼应该挂什么科
单选题下列各组物质中既不属同系物,又不属同
微信里面怎么看自己的二维码,怎么制作自己的
《湖心亭看雪》的练习题
连云港到福州多少公里
87版红孩儿扮演者
司友是什么意思
怎样制作一个网页
玛卡切片后怎么存放
安宁金色理想的房子是多少钱一平方
幼儿园常规示范园需要哪些
农村贫困户申请书怎么写
关于母亲的格言
背长篇课文怎样才能背的快
推荐资讯
瑜伽怎么学
惯性的定义
课外书中你还知道哪些名人小故事
千克的单位是什么
为什么手机一直显示无服务呢
单选题OfthetwoAustralianstudents,Mash
关于北京地理位置的述说,不正确的是A.位于北
怎么看数值是什么格式
风干腊鸡怎么做好吃
条形码如何生成,条形码证书申请下来之后如何
怎样在91助手for iphone版里找到酷狗、QQ音乐
中超的球队都是哪些个城市的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?