OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14066|回复: 23

can 数据接收问题?主要是can单帧和多帧并存,求解析完整接收到can的方法或者思路

[复制链接]

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
发表于 2018-9-13 17:28:11 | 显示全部楼层 |阅读模式
38金钱
描述:项目中can 多帧数据接收时该如何处理的问题?在该项目的现场控制中会存在单帧、多帧两种形式的can数据,并且其中can数据传输频繁,在多帧传输的过程中一旦传输优先级较高的单帧会使多帧容易出现丢帧情况。另外,发送一个多帧数据(最多8帧数据)。

最佳答案

查看完整内容[请看2#楼]

最后暴力解决,并附上代码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-13 17:28:12 | 显示全部楼层
最后暴力解决,并附上代码

CAN收发 多帧发送接收.zip

3.6 MB, 下载次数: 3356

回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-9-13 18:13:06 | 显示全部楼层
用CRC校验处理接收到的数据,丢失的话,用中断来接收数据比较稳妥
你可以参考下这个的分析
http://www.go-gddq.com/html/QiTa-ZongHe_tx/2011-03/589225.htm
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-9-13 22:24:43 来自手机 | 显示全部楼层
CAN还需要CRC?
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 08:32:15 | 显示全部楼层
1208 发表于 2018-9-13 18:13
用CRC校验处理接收到的数据,丢失的话,用中断来接收数据比较稳妥
你可以参考下这个的分析
http://www.go ...

不需要CRC,我也是使用中断接收的,由于多帧是延时发送的,在接收时,若有优先级更高的帧出现在can总线上,多帧就会出现丢帧情况,丢帧情况不可避免,在设计专门多帧缓存时还需要定时清理弃帧。
回复

使用道具 举报

0

主题

109

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2018-9-2
在线时间
8 小时
发表于 2018-9-14 08:36:04 | 显示全部楼层
大神分享下,感谢
回复

使用道具 举报

26

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2017-4-1
在线时间
432 小时
发表于 2018-9-14 08:37:24 | 显示全部楼层
多帧CAN,没用过,感觉可以从协议中去优化解决中途插入其他单帧数据的问题,而且你说的丢帧是真的丢帧了还是因为高优先级单帧的插入导致解析不了?
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 08:39:42 | 显示全部楼层
陈皮皮 发表于 2018-9-14 08:37
多帧CAN,没用过,感觉可以从协议中去优化解决中途插入其他单帧数据的问题,而且你说的丢帧是真的丢帧了还 ...

高优先级单帧插入
回复

使用道具 举报

26

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2017-4-1
在线时间
432 小时
发表于 2018-9-14 08:47:49 | 显示全部楼层
rui9527 发表于 2018-9-14 08:39
高优先级单帧插入

可不可以尝试一下,根据多帧标识符识别,单独开辟一个缓存,在中断中直接缓存指定的多帧数据,其他单帧数据区别缓存!
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 08:54:56 | 显示全部楼层
陈皮皮 发表于 2018-9-14 08:47
可不可以尝试一下,根据多帧标识符识别,单独开辟一个缓存,在中断中直接缓存指定的多帧数据,其他单帧数 ...

可以的,我就是这样处理的,就是最后处理can多帧数据时卡住了,所以在调试
回复

使用道具 举报

26

主题

355

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1770
金钱
1770
注册时间
2017-4-1
在线时间
432 小时
发表于 2018-9-14 09:26:32 | 显示全部楼层
rui9527 发表于 2018-9-14 08:54
可以的,我就是这样处理的,就是最后处理can多帧数据时卡住了,所以在调试

接收如果没问题,就看你怎么解析了,比如数据包中有没有数据长度等信息,因为你的多帧数据帧数不定(1-8帧)
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 10:20:53 | 显示全部楼层
陈皮皮 发表于 2018-9-14 09:26
接收如果没问题,就看你怎么解析了,比如数据包中有没有数据长度等信息,因为你的多帧数据帧数不定(1-8 ...

嗯,就是解析这里卡住了,因为多帧帧数不定,另外,接收的出现丢了一帧,数据被破坏,那就要丢弃这个坏帧。因为会出现几种多帧,要全部识别,还有种情况就是:同一类型的多帧间隔时间在较短的时间内被接收,也要判断处理
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2018-9-14 11:06:31 | 显示全部楼层
本帖最后由 ufbycd 于 2018-9-14 11:21 编辑
rui9527 发表于 2018-9-14 10:20
嗯,就是解析这里卡住了,因为多帧帧数不定,另外,接收的出现丢了一帧,数据被破坏,那就要丢弃这个坏帧 ...

发送方在传输帧被冲突后没有自动重发?那你这发送方都没有遵循CAN总线规范吧。在发送方上解决问题才能治本。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-9-14 12:04:15 | 显示全部楼层

怎么感觉你像老师在指导我们,看到原子哥的视频是有提到自动加的,也可以自己在外面加来判断吧
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-9-14 15:22:05 来自手机 | 显示全部楼层
1208 发表于 2018-9-14 12:04
怎么感觉你像老师在指导我们,看到原子哥的视频是有提到自动加的,也可以自己在外面加来判断吧

硬件本身就有CRC功能,硬件都不能搞定,你软件再加CRC也没用。你认为两层软件的CRC比一层的CRC可靠性能提高多少?
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 15:33:35 | 显示全部楼层
ufbycd 发表于 2018-9-14 11:06
发送方在传输帧被冲突后没有自动重发?那你这发送方都没有遵循CAN总线规范吧。在发送方上解决问题才能治 ...

确实,那问题来了,如何让整个现场遵循CAN总线规范呢?求指点
发送邮箱就三个,需要发送的帧数会不止三帧,我这里为了统一单帧和多帧发送接口,整个发送都是使用延时发送。所以在接收时很容易出问题。
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 15:38:09 | 显示全部楼层
1208 发表于 2018-9-14 12:04
怎么感觉你像老师在指导我们,看到原子哥的视频是有提到自动加的,也可以自己在外面加来判断吧

can确实可以添加crc校验,保证接收数据正确。只要通信,使用crc检验都是比较好。
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-14 15:39:56 | 显示全部楼层
yklstudent 发表于 2018-9-14 15:22
硬件本身就有CRC功能,硬件都不能搞定,你软件再加CRC也没用。你认为两层软件的CRC比一层的CRC可靠性能提 ...

没错。
回复

使用道具 举报

3

主题

312

帖子

0

精华

高级会员

Rank: 4

积分
907
金钱
907
注册时间
2011-10-19
在线时间
196 小时
发表于 2018-9-15 08:52:16 | 显示全部楼层
rui9527 发表于 2018-9-14 15:33
确实,那问题来了,如何让整个现场遵循CAN总线规范呢?求指点
发送邮箱就三个,需要发送的帧数会不止三 ...

STM32的CAN硬件本身就是完全符合CAN总线规范的呀,硬件上就支持自动重发!配置问题!看看CAN_MCR寄存器的NART位描述:
Bit 4 NART :  No automatic retransmission
        0: The CAN hardware will automatically retransmit the message until it has been
        successfully transmitted according to the CAN standard.
        1: A message will be transmitted only once, independently of the transmission result
        (successful, error or arbitration lost).


回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2018-9-15 14:33:48 | 显示全部楼层
ufbycd 发表于 2018-9-15 08:52
STM32的CAN硬件本身就是完全符合CAN总线规范的呀,硬件上就支持自动重发!配置问题!看看CAN_MCR寄存器的 ...

那使用自动重传会不会阻塞在这的?
回复

使用道具 举报

13

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-3-26
在线时间
34 小时
发表于 2019-7-31 13:17:21 | 显示全部楼层
CAN发送多帧容易设置,但是我测试CAN接收每次最多3帧(每个邮箱的3级深度的FIFO),楼主你的接收多帧也是这样的吗?我从楼主发的工程代码中看不到CAN接收函数
回复

使用道具 举报

13

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-3-26
在线时间
34 小时
发表于 2019-7-31 13:18:12 | 显示全部楼层
另外CAN总线的两个邮箱能同时使用吗?该怎样设置?
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2019-8-21 09:54:45 | 显示全部楼层
baiyefengting 发表于 2019-7-31 13:17
CAN发送多帧容易设置,但是我测试CAN接收每次最多3帧(每个邮箱的3级深度的FIFO),楼主你的接收多帧也是这 ...

确实,这里接收的多帧只使用一个FIFO,把数据存储,再做处理,接收处理速度就会慢了2/3.
回复

使用道具 举报

2

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2017-7-21
在线时间
97 小时
 楼主| 发表于 2019-8-21 09:55:58 | 显示全部楼层
baiyefengting 发表于 2019-7-31 13:18
另外CAN总线的两个邮箱能同时使用吗?该怎样设置?

没搞过
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-16 02:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表