4405|11

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于socketCAN 编程,can帧结构中的CRC字段,在socketCAN编程中可以使用吗 [复制链接]

关于socketCAN 编程,can帧结构中的CRC字段,在socketCAN编程中可以使用吗。

主要是想知道,在socketCAN 编程中,我们只需要在struct can_frame中填写id,dlc和data[],但是我想问问在真正的can帧中还有crc字段,socketCAN编程中对于CRC字段是自动编码后生成填写了,还是怎么的操作。

最新回复

我问的网友,他那么告诉我的,其它我也不知道了  详情 回复 发表于 2015-7-10 16:48
点赞 关注

回复
举报

111

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
具体没怎么研究这个,但是这个有可能是硬件自动CRC的,或者是不需要硬件关系的
 
 

回复

111

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
不需要软件关心的,CAN控制器负责处理帧,一个出错的帧理论上软件是收不到的
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

4
 
wsxzaq 发表于 2015-7-9 09:41
不需要软件关心的,CAN控制器负责处理帧,一个出错的帧理论上软件是收不到的

非常感谢您的解答。我还有个问题:应用SOCKET CAN 编程 对于使用 CAN_RAW_ERR_FILTER我有一些疑问。
我使用USB转CAN总线的接受盒子跟开发板相连。可以正常通信,如果断开CANL或者CANH都可以过滤收到错误帧。但是一般只收到了没有ACK应答的错误帧 即只收到can_id=0x00000020,我想得到其他的错误帧 例如can_id=0x00000010 data[4]=0x04。表示CAN_ERR_TRX_CANH_NO_WIRE。

希望能加您个qq。期待您的回复
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

5
 
wsxzaq 发表于 2015-7-9 09:41
不需要软件关心的,CAN控制器负责处理帧,一个出错的帧理论上软件是收不到的

如果收到了出错的帧,控制寄存器是否会有值的变化,上层是否有途径知道这种变化,表示有出错的帧呗废弃了。还是控制器处理直接废弃的出错的帧,不做改变提示。

点评

以STM32的CAN错误管理为例,摘自中文手册 如 CAN 协议所述,错误管理完全由硬件通过发送错误计数器( CAN_ESR 寄存器中的 TEC 值)和接收错误计数器( CAN_ESR 寄存器中的 REC 值)来处理,这两个计数器根据错误  详情 回复 发表于 2015-7-10 13:55
 
 
 

回复

111

帖子

1

TA的资源

一粒金砂(中级)

6
 
20130172 发表于 2015-7-9 16:45
如果收到了出错的帧,控制寄存器是否会有值的变化,上层是否有途径知道这种变化,表示有出错的帧呗废弃了 ...

以STM32的CAN错误管理为例,摘自中文手册
如 CAN 协议所述,错误管理完全由硬件通过发送错误计数器( CAN_ESR 寄存器中的 TEC
值)和接收错误计数器( CAN_ESR 寄存器中的 REC 值)来处理,这两个计数器根据错误
状况进行递增或递减。有关 TEC 和 REC 管理的详细信息,请参见 CAN 标准。
两者均可由软件读取,用以确定网络的稳定性。此外, CAN 硬件还将在 CAN_ESR 寄存器中
提供当前错误状态的详细信息。通过 CAN_IER 寄存器( ERRIE 位等),软件可以非常灵活
地配置在检测到错误时生成的中断。

点评

小白一枚,想请教如何访问你说的两个寄存器来获取我要的值。您能具体举个例子或者给个例子链接就不胜感激了  详情 回复 发表于 2015-7-10 16:40
LEC[2:0]: 上一个错误代码 (Last error code) 该字段由硬件置 1,其中的代码指示 CAN 总线上检测到的上一个错误的错误状况。如果消息 成功传送(接收或发送)且未发生错误,该字段将清为“ 0”。 LEC[2:0] 位可  详情 回复 发表于 2015-7-10 13:56
 
 
 

回复

111

帖子

1

TA的资源

一粒金砂(中级)

7
 
本帖最后由 wsxzaq 于 2015-7-10 13:58 编辑
wsxzaq 发表于 2015-7-10 13:55
以STM32的CAN错误管理为例,摘自中文手册
如 CAN 协议所述,错误管理完全由硬件通过发送错误计数器( CA ...

LEC[2:0]: 上一个错误代码 (Last error code)
该字段由硬件置 1,其中的代码指示 CAN 总线上检测到的上一个错误的错误状况。如果消息
成功传送(接收或发送)且未发生错误,该字段将清为“ 0”。
LEC[2:0] 位可由软件置为 0b111 值。这些位由硬件更新,以指示当前通信状态。
000:无错误
001:填充错误
010:格式错误
011:确认错误
100:位隐性错误
101:位显性错误
110: CRC 错误
111:由软件置 1

因此软件可以直到上一个帧数据是否发生错误,由于CAN的硬件处理,只有正确的帧数据和经过过滤的帧才能够进入接收队列,因此出错的帧理论上是访问不了的。


这是我问一个网友的,只能帮到这了,其它的我也不懂了


点评

能要到您网友的联系方式吗,您8楼的东西我不是很懂,我用的开发板式ATMEL 主要在Linux 应用层做软件开发  详情 回复 发表于 2015-7-10 16:44
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

8
 
wsxzaq 发表于 2015-7-10 13:55
以STM32的CAN错误管理为例,摘自中文手册
如 CAN 协议所述,错误管理完全由硬件通过发送错误计数器( CA ...

小白一枚,想请教如何访问你说的两个寄存器来获取我要的值。您能具体举个例子或者给个例子链接就不胜感激了
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

9
 
wsxzaq 发表于 2015-7-10 13:55
以STM32的CAN错误管理为例,摘自中文手册
如 CAN 协议所述,错误管理完全由硬件通过发送错误计数器( CA ...

小白一枚,想请教如何访问你说的两个寄存器来获取我要的值。您能具体举个例子或者给个例子链接就不胜感激了
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

10
 
wsxzaq 发表于 2015-7-10 13:56
LEC[2:0]: 上一个错误代码 (Last error code)
该字段由硬件置 1,其中的代码指示 CAN 总线上检测到的上 ...

能要到您网友的联系方式吗,您8楼的东西我不是很懂,我用的开发板式ATMEL 主要在Linux 应用层做软件开发

点评

我问的网友,他那么告诉我的,其它我也不知到了  详情 回复 发表于 2015-7-10 16:48
 
 
 

回复

111

帖子

1

TA的资源

一粒金砂(中级)

11
 
20130172 发表于 2015-7-10 16:44
能要到您网友的联系方式吗,您8楼的东西我不是很懂,我用的开发板式ATMEL 主要在Linux 应用层做软件开发

我问的网友,他那么告诉我的,其它我也不知道了

点评

特别感谢你的帮忙,不知道你能不能帮忙把这个帖子的链接发给你的问的网友,能不能直接跟他交流到。有很多关于CAN总线和socket CAN的问题  详情 回复 发表于 2015-7-12 16:20
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

12
 
wsxzaq 发表于 2015-7-10 16:48
我问的网友,他那么告诉我的,其它我也不知道了

特别感谢你的帮忙,不知道你能不能帮忙把这个帖子的链接发给你的问的网友,能不能直接跟他交流到。有很多关于CAN总线和socket CAN的问题
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表