打印

关于28335与CPU进行SCI通讯掉数据的问题

[复制链接]
1359|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fishyy|  楼主 | 2015-10-4 21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家有没有遇见这种情况,比如我用串口调试助手循环发11 22 33 44 55 这5组数据给DSP,然后在程序里写入a[5]这个数组进行读取,按理来说a[0]=11,a[2]=22,a[3]=33,a[4]=44,a[5]=55.而且应该一直保持不变,但过一段时间(时间有长有短),数组读数就会发生错位,而且错位位数不定,比如变成a[0]=44,a[2]=55,a[3]=11,a[4]=22,a[5]=33.请教大神,这是什么原因呢?我觉得是丢了数据导致赋值错位,我的波特率是115200,发送间隔10ms,没有用FIFO,用普通中断接收,换了好几种调试助手都没有用。大家觉得是DSP的问题还是串口芯片的问题还是CCS3.3的问题还是波特率误差的原因呢?这种现象是不是丢了数据呢?为什么会这样?

相关帖子

沙发
zhangmangui| | 2015-10-7 10:17 | 只看该作者
这是有可能的      不用FIFO通信就有这个不好处  
所以一般都会增加针头等处理   

使用特权

评论回复
板凳
fishyy|  楼主 | 2015-10-7 15:36 | 只看该作者
zhangmangui 发表于 2015-10-7 10:17
这是有可能的      不用FIFO通信就有这个不好处  
所以一般都会增加针头等处理     ...

也就是说用FIFO就可以避免这种掉数据的情况吗?还有帧头怎么加呢?

使用特权

评论回复
地板
andyjian| | 2015-10-8 08:18 | 只看该作者
1.增加帧头帧尾(自己定义,属于应用层)
2.增加时间片分帧

使用特权

评论回复
5
fishyy|  楼主 | 2015-10-8 09:49 | 只看该作者
andyjian 发表于 2015-10-8 08:18
1.增加帧头帧尾(自己定义,属于应用层)
2.增加时间片分帧

请问第二个是什么意思,您知道掉数据的原因吗

使用特权

评论回复
6
andyjian| | 2015-10-8 12:51 | 只看该作者
数组是a[5],还是a[6]

使用特权

评论回复
7
fishyy|  楼主 | 2015-10-8 15:05 | 只看该作者
andyjian 发表于 2015-10-8 12:51
数组是a[5],还是a[6]

是a[5],就是把11,22,33,44,55这五个八位放进5个元素里,你说的帧头我是不是可以把11就当做帧头呢

使用特权

评论回复
8
zhangmangui| | 2015-10-9 00:04 | 只看该作者
串口的通信都是   你发带有一定格式的数据包    然后接收方去解析
如果解析成功了   再给你回复一个数据    这样就算通信完成了
不然一直发

使用特权

评论回复
9
andyjian| | 2015-10-9 08:31 | 只看该作者
fishyy 发表于 2015-10-8 15:05
是a[5],就是把11,22,33,44,55这五个八位放进5个元素里,你说的帧头我是不是可以把11就当做帧头呢 ...

你可以定义数据帧格式如下:
帧头+用户数据(11 22 33 44 55)+CRC(可选)+帧尾
1.既然串口已经能正常发送接收数据了,说明底层已经调通了
2.你可以按照上面的数据帧结构构造一个数据帧,再进行发送,接收方接收解析正常后,说明成功接收到了数据帧
3.更形象的是在接收中断中加判断语句
if(帧头 == 某个数 && 帧尾 == 某个数)
{
      if(CRC正确)
      {
             提取数据 11 22 33 44 55
             接收正确进行应答
      }
      
}
够详细了吧亲:lol

使用特权

评论回复
10
fishyy|  楼主 | 2015-10-10 09:13 | 只看该作者
andyjian 发表于 2015-10-9 08:31
你可以定义数据帧格式如下:
帧头+用户数据(11 22 33 44 55)+CRC(可选)+帧尾
1.既然串口已经能正常发送 ...

谢谢,不过我还有一个疑问,SCI传输的时候帧头也应该是当做一般的数据传下来吧,那我还是要正常的从SCIRXBUF里面读取啊,你的意思是不是我定义两个数组,第一个用来放包括帧头帧尾在内的所有数据,第二个用来方判断成立之后的数据呢?

使用特权

评论回复
11
fishyy|  楼主 | 2015-10-10 09:15 | 只看该作者
zhangmangui 发表于 2015-10-9 00:04
串口的通信都是   你发带有一定格式的数据包    然后接收方去解析
如果解析成功了   再给你回复一个数据   ...

你是说SCI底层就有这种约定,不是我上位机设计的对吗?如果判断帧头的话就算我人为多加了一层协议?

使用特权

评论回复
12
andyjian| | 2015-10-10 11:54 | 只看该作者
fishyy 发表于 2015-10-10 09:13
谢谢,不过我还有一个疑问,SCI传输的时候帧头也应该是当做一般的数据传下来吧,那我还是要正常的从SCIRX ...

可以那么做:lol

使用特权

评论回复
13
fishyy|  楼主 | 2015-10-10 15:41 | 只看该作者

那么是不是说明我会丢失大量数据呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

35

帖子

1

粉丝