关于串口通讯数据位被错认为起始或停止位的疑惑

[复制链接]
10723|5
 楼主| 电子混混 发表于 2009-9-8 14:37 | 显示全部楼层 |阅读模式
各位大侠,请问一个关于串口通讯的问题,如下:
      由于串口通讯主机和从机上电并不一定同步,假使发送机先在发送数据,而接收机接收慢了一点,那么就会有这样的问题,当接收机错过了起始位的0,而就有可能错把第一个数据0当成起始位进行同步,当刚好顺序下来第10位又是1时,接收机就会将其认为是停止位而认为是正确的接收了一帧数据,那么显然,这帧数据是错误的。
      我的问题是,是不是只有添加校验位才能解决呢?那这样是不是还需要发送一些应答命令请求来避免数据丢失?各位大侠做串口通讯有什么好的方法及思想请分享一下
chunyang 发表于 2009-9-8 14:43 | 显示全部楼层
用协议解决才是本质上的解决方法,校验则是协议的组成部分,带校验位的方法只适合简单应用。
xwj 发表于 2009-9-8 15:03 | 显示全部楼层
接收机接为什么会“收慢了一点"、会”过了起始位的0“呢???

数据要传输要想可靠,必要的检验和重发机制是必不可少的。
这不是一个检验位能解决的问题,而应该如春阳所说:置顶完整的协议来保证。
渤海三叠浪 发表于 2009-9-8 15:12 | 显示全部楼层
两位大侠都支招了  混混 还不照着做:@
 楼主| 电子混混 发表于 2009-9-8 15:49 | 显示全部楼层
回xwj大侠,当发送机一直发送,接收机错过起始位的0的情况肯定会有的,比如,接收机上电复位慢于发送机,接收机软复位等,这样开启接收时就会慢于发送机发送,就会出现我说的情况。
    至于协议部分,假使通信协议由“同步字段+控制字段+长度字段+帧头校验字段+数据字段+帧结束字段”构成,那么想请问,是否在完整接收此协议内容再去判断是否错误?如是如此,会不会太慢?当出现收到错误数据后,会不会出现一直收不到正确的一帧?还是说应该发一段数据后等待应答正确后才发下一段?
    有些单片机如PIC,其串口通讯错误时会返回错误标志(如当停止位检测时发现不是1等),假使发送机正在发送的是协议的中间内容,那接收机是应该马上发数据错误的命令给发送机让其停止发送么?
    这么说,串口通讯都应该做成全双工么?即不论发送机还是接收机,都应该写有发送和接收的程序。
mohanwei 发表于 2009-9-8 15:59 | 显示全部楼层
串口速度对于单片机的速度,就像走路速度和跑车速度的关系……如果你的数据速率真的很高,本来就不该用uart的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部