8952|26

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

帮忙设计一下串口通信程序 [复制链接]

两个单片机相互通讯,数据包 = 3字节指令 + 1~4字节的数据。
一次大概有50个数据包。
一个单片机发送数据包,另外一个接收。
两个单片机都在一块板子内。

请问:这两个串口的程序该怎么设计,才能保证数据不会出错。(对数据的正确性要求很高)。请详细说下程序的架构,谢谢了。
在线等。

最新回复

参考下MODBUS协议  详情 回复 发表于 2010-2-20 13:13
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
3B指令+4B数据+1B校验码,正好8B
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
- -。
数据不一定是4B,
1B的校验码做什么用?校验和?不够吧?还是奇偶校验?
另外为什么要正好是8B。8B有什么玄机在里面?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
推荐一个简介的实用的通信协议吧,thanks
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主有NXP的RC或PN系列的IC的软件手册吗?
他们那种通讯协议方案 很很不错。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
针对楼主这种情况,我给你定义一种吧(类似于NXP的串口通讯协议格式)
1、1字节的前导码(可以为00,也可以为AA,自己定义)
2、3字节的指令
3、1字节指令的CCS(CCS+CM0+CM1+CM2=0x00)
4、1字节的数据长短LEN(用来标识数据是多少字节)
5、1字节LCS(LEN+LCS=0x00)
6、1-4字节的DATA(具体长度,看你具体发送多少字节的数据)
7、1字节的DCS(DCS+D0+D1+D2+D3=0x00)
8、1字节的后导码(结束码)
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 kyzf 的回复:
针对楼主这种情况,我给你定义一种吧(类似于NXP的串口通讯协议格式)
1、1字节的前导码(可以为00,也可以为AA,自己定义)
2、3字节的指令
3、1字节指令的CCS(CCS+CM0+CM1+CM2=0x00)
4、1字节的数据长短LEN(用来标识数据是多少字节)
5、1字节LCS(LEN+LCS=0x00)
6、1-4字节的DATA(具体长度,看你具体发送多少字节的数据)
7、1字节的DCS(DCS+D0+D1+D2+D3=0x00)
8、1字节的后导码(结束码)


顶这个。。。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

8
 
MODBUS
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 5 楼 kyzf 的回复:
针对楼主这种情况,我给你定义一种吧(类似于NXP的串口通讯协议格式)
1、1字节的前导码(可以为00,也可以为AA,自己定义)
2、3字节的指令
3、1字节指令的CCS(CCS+CM0+CM1+CM2=0x00)
4、1字节的数据长短LEN(用来标识数据是多少字节)
5、1字节LCS(LEN+LCS=0x00)
6、1-4字节的DATA(具体长度,看你具体发送多少字节的数据)
7、1字节的DCS(DCS+D0+D1+D2+D3=0x00)
8、1字节的后导码(结束码)
用这么多CS干什么?不费事么?
我估计数据长度都不需要,根据指令字该能确定有多少字节的数据. 所以"3B指令+4B数据+1B检验"足够了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
"前导码"有什么用?我觉得除了增加代码没有其它价值了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 8 楼 great_bug 的回复:
引用 5 楼 kyzf 的回复:
针对楼主这种情况,我给你定义一种吧(类似于NXP的串口通讯协议格式)
1、1字节的前导码(可以为00,也可以为AA,自己定义)
2、3字节的指令
3、1字节指令的CCS(CCS+CM0+CM1+CM2=0x00)
4、1字节的数据长短LEN(用来标识数据是多少字节)
5、1字节LCS(LEN+LCS=0x00)
6、1-4字节的DATA(具体长度,看你具体发送多少字节的数据)
7、1字节的DCS(DCS+D0+D1+D2+D3=0x00)
8、1字节的后导码(结束码)
用这么多CS干什么?不费事么?
我估计数据长度都不需要,根据指令字该能确定有多少字节的数据. 所以"3B指令+4B数据+1B检验"足够了


估计楼上都没用过要求比较安全和可靠性高的IC,
建议你去了解下PSAM 和高频的RFID,以及移动支付行业、银联POS的串行通讯 对应的串口的协议格式。

虽然知道3字节的指令,到时如果指令传输出错,你怎么知道,所以必修需要CCS
数据长度可变,你没有LEN,你当初传输的数据如果丢掉一个字节(比如0x00),你怎么知道?

没有前导码,你怎么什么时候传输数据,估计遇到EMC干扰,按照你们的格式,也会把EMC干扰对应信号,当成数据。

以上仅个人经验 和建议。楼主可以好好了解和参考,谢谢!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 5 楼 kyzf 的回复:
针对楼主这种情况,我给你定义一种吧(类似于NXP的串口通讯协议格式)
1、1字节的前导码(可以为00,也可以为AA,自己定义)
2、3字节的指令
3、1字节指令的CCS(CCS+CM0+CM1+CM2=0x00)
4、1字节的数据长短LEN(用来标识数据是多少字节)
5、1字节LCS(LEN+LCS=0x00)
6、1-4字节的DATA(具体长度,看你具体发送多少字节的数据)
7、1字节的DCS(DCS+D0+D1+D2+D3=0x00)
8、1字节的后导码(结束码)


后面再加入一个校验码就完美了。
9. 1字节的校验码(前面所有字节的异或后的值)
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用楼主 kongfo1019 的回复:
两个单片机相互通讯,数据包 = 3字节指令 + 1~4字节的数据。
一次大概有50个数据包。
一个单片机发送数据包,另外一个接收。
两个单片机都在一块板子内。

请问:这两个串口的程序该怎么设计,才能保证数据不会出错。(对数据的正确性要求很高)。请详细说下程序的架构,谢谢了。
在线等。

1、为什么需要“3字节指令”,需要这么多种指令吗?三个字节可是16777216种组合。我感觉用一个字节足矣。
2、既然是“1~4字节的数据”,那么完全可以每次都发送4个字节,无非不都使用而已,这样就可以发送固定长度的数据,便于处理。
3、“保证数据不会出错”这一点太过于理想。必须得考虑如果出错了怎么处理。加上校验码也只是识别一下是否出错了。以便出错后进行后续操作。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

14
 
对了,还要加入一个当前数据包的号码。
接收方每次收包先检验校验码,如果不对就丢掉,如果正确再解包。
最后,传输结束,发现有包连续号码中丢失的,要求发送端将丢失包重新发送。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

15
 
引用楼主 kongfo1019 的回复:
两个单片机相互通讯,数据包 = 3字节指令 + 1~4字节的数据。
一次大概有50个数据包。
一个单片机发送数据包,另外一个接收。
两个单片机都在一块板子内。

请问:这两个串口的程序该怎么设计,才能保证数据不会出错。(对数据的正确性要求很高)。请详细说下程序的架构,谢谢了。
在线等。
LZ的板子多半是个试验板,估计可以不考虑干扰造成的数据丢失,而且对可靠性要求并不严肃
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 5 楼 kyzf 的回复:
针对楼主这种情况,我给你定义一种吧(类似于NXP的串口通讯协议格式)
1、1字节的前导码(可以为00,也可以为AA,自己定义)
2、3字节的指令
3、1字节指令的CCS(CCS+CM0+CM1+CM2=0x00)
4、1字节的数据长短LEN(用来标识数据是多少字节)
5、1字节LCS(LEN+LCS=0x00)
6、1-4字节的DATA(具体长度,看你具体发送多少字节的数据)
7、1字节的DCS(DCS+D0+D1+D2+D3=0x00)
8、1字节的后导码(结束码)

CCS,LCS,DCS是什么?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
楼主自己定个协议
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用楼主 kongfo1019 的回复:
两个单片机相互通讯,数据包 = 3字节指令 + 1~4字节的数据。
一次大概有50个数据包。
一个单片机发送数据包,另外一个接收。
两个单片机都在一块板子内。

请问:这两个串口的程序该怎么设计,才能保证数据不会出错。(对数据的正确性要求很高)。请详细说下程序的架构,谢谢了。
在线等。

如果都在一个板子上,用spi多好呀!为什么要用串口?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 
我做法,用前导码 + 内容 + 校难码 + 后导码
而内容是2个Byte合成1个Byte的,纠错能力很强.
我的做法,是宁愿牺牲一点传输效率,也要保证传输安全.
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

20
 
#4的见解正确,这个协议是我用过的抗干扰不错的一个
另外,楼主不用SPI肯定有一些考虑,比如还有优先级更高的信号要处理吧。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表