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