0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术关于新CAN驱动的错误帧定义

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-05 10:27 次阅读

CAN总线产生的错误以错误帧的形式上报给应用层。设置注册表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1] BusErrorReport项为1可以让驱动上报CAN总线错误帧,为0,驱动不会上报错误帧。

帧格式

CAN帧结构体定义如下,当CAN_FRAME中CAN_ID的error为1时,表示该帧为错误帧。

typedefstruct{

unsignedintid:29;

unsignedinterror:1;

unsignedintremote:1;

unsignedintextended:1;

}CAN_ID;

typedefstruct_can_frame

{

CAN_ID can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */

BYTE can_dlc; /* frame payload length in byte*/

BYTE data[CAN_MAX_DLEN];

} CAN_FRAME, *PCAN_FRAME;

错误帧定义

可以参考例程中库头文件sdk_can.h,错误帧标记为CAN_ID的error,错误类型存放在CAN_ID中,根据不同类型的错误,详细信息存放在帧结构体CAN_FRAME的data中。

一个错误帧中,可以包含多种错误类型的错误信息。

CAN_ERR_TX_TIMEOUT错误

WINCE中暂时保留。

lost arbitration仲裁丢失错误

#defineCAN_ERR_LOSTARB0x00000002U

当错误帧结构体中CAN_ID& CAN_ERR_LOSTARB为真时,表明该错误产生。

controller problems控制器出错

#defineCAN_ERR_CRTL0x00000004U

当错误帧结构体中CAN_ID& CAN_ERR_CRTL为真时,表明该错误产生。

详细信息存放在错误帧结构体data[1]中。

接收buffer溢出

data[0] &0x01为真,表明该错误产生。

需要及时处理接收到的数据包。

发送buffer溢出

data[0] &0x02为真,表明该错误产生。

可能由于瞬间发送的数据包过多导致。

接收错误达到警告级别

data[0] &0x04为真,表明该错误产生。

当该错误提示,表明短期内接收产生的错误较多。

发送错误达到警告级别

data[0] &0x08为真,表明该错误产生。

当该错误提示,表明短期内发送产生的错误较多。

接收错误达到严重错误级别

data[0] &0x10为真,表明该错误产生。

当该错误提示,表明短期内接收产生的错误过多。应当暂停CAN通信,检查错误原因。

发送错误达到严重错误级别

data[0] &0x20为真,表明该错误产生。

当该错误提示,表明短期内发送产生的错误过多。应当暂停CAN通信,检查错误原因。

恢复到错误激活状态

data[0] &0x40为真,表明恢复到错误激活状态。

CAN通信协议出错

#defineCAN_ERR_PROT0x00000008U

当错误帧结构体中CAN_ID& CAN_ERR_PROT为真时,表明该错误产生。

详细信息存放在错误帧结构体data[2]和data[3]中,其中data[2]表明协议错误类型,data[3]表明协议出错的位置

(类型)单bit出错

data[2] &0x01为真,表明协议单bit出错。

(类型)帧格式出错

data[2] &0x02为真,表明帧格式出错。

(类型)位填充出错

data[2] &0x04为真,表明位填充出错。

(类型)dominant bit发送失败

data[2] &0x08为真,表明dominant bit发送失败。

(类型)recessive bit发送失败

data[2] &0x10为真,表明recessive bi发送失败。

(类型)总线过载

data[2] &0x20为真,表明总线过载。

(类型)active error announcement

data[2] &0x40为真,active error announcement。

(类型)传输出错

data[2] &0x80为真,传输出错。

位置

data[3]为0x03表明协议SOF帧头位置

data[3]为0x02表明协议ID第28-21bits(SFF:10-3)

data[3]为0x06表明协议ID第20-18bits(SFF:2-0)

data[3]为0x04表明协议substitute RTR位(SFF:RTR)

data[3]为0x05表明协议identifier extension标准扩展位

data[3]为0x07表明协议ID第17-13bits

data[3]为0x0F表明协议ID第12-5bits

data[3]为0x0E表明协议ID第4-0bits

data[3]为0x0C表明协议RTR位

data[3]为0x0D表明接收bit 1

data[3]为0x09表明接收bit 0

data[3]为0x0B表明DLC位

data[3]为0x0A表明DATA位

data[3]为0x08表明CRC序列

data[3]为0x18表明CRC分隔符

data[3]为0x19表明ACK应答位

data[3]为0x1B表明ACK分隔符

data[3]为0x1A表明帧尾

data[3]为0x12表明间歇

收发状态错误

#defineCAN_ERR_TRX0x00000010U

当错误帧结构体中CAN_ID& CAN_ERR_TRX为真时,表明在收发时CAN状态有误。

详细信息存放在错误帧结构体data[4]中,data[4]中1个字节8bit中,高4位表示CANL值,分别代表如下CANH错误

高4位表示CANH值,分别代表如下CANL错误

高低位值以排列组合方式存在。

无ACK错误

#defineCAN_ERR_ACK0x00000020U

当错误帧结构体中CAN_ID& CAN_ERR_ACK为真时,表明该错误产生。

总线关闭

#defineCAN_ERR_BUSOFF0x00000040U

当错误帧结构体中CAN_ID& CAN_ERR_BUSOFF为真时,表明总线关闭。

总线错误

#defineCAN_ERR_BUSERROR0x00000080U

当错误帧结构体中CAN_ID& CAN_ERR_BUSERROR为真时,表明该错误产生。

该错误通常与其它错误一起发出。

控制器重启

#defineCAN_ERR_RESTARTED0x00000100U

当错误帧结构体中CAN_ID& CAN_ERR_RESTARTED为真时,表明控制器重启。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6062

    浏览量

    34590
收藏 人收藏

    评论

    相关推荐

    如何让stm32f4发出错误呢?

    文档里面说can外设支持CAN协议。在can协议里面,有错误的概念。 当发现 Bit Check Error的时候,如何让stm32f4发
    发表于 03-28 06:15

    CAN总线错误及其排查方法简单介绍#汽车CAN总线 

    CAN总线汽车电子
    北汇信息POLELINK
    发布于 :2024年03月15日 14:14:40

    CAN总线上可以同时存在标准和扩展吗?

    今天做实验,can总线上同时存在标准和扩展,从上位机上观察到这样的现象:标准可以正常接收,但是扩展时断时时好??请大神们拍砖解释啊
    发表于 02-05 07:41

    CAN发送速度太慢的原因?

    ; ECU 通电 -> 软复位(应用程序或系统复位) -> CAN 以正确的差异发送 ECU 断电 -> ECU 通电 -> 软复位(应用程序或
    发表于 01-31 08:30

    如何用示波器排查CAN的各种错误帧呢?

    如何用示波器排查CAN的各种错误帧呢? 导言: 控制器局域网络(Controller Area Network,CAN)是一种常用的现场总线通信协议,广泛应用于汽车电子系统、工业自动化等领域。然而
    的头像 发表于 12-07 11:09 605次阅读

    分享一种用CAN波形的幅度和脉宽信息来精确定位错误帧来源的方法

    我们先从基础的讲起。CAN节点的电路一般如下图所示,MCU内置了CAN控制器用来将MCU的数据封装为CAN帧格式,同时它也负责CAN帧的校验和错误
    的头像 发表于 10-08 15:52 831次阅读
    分享一种用<b class='flag-5'>CAN</b>波形的幅度和脉宽<b class='flag-5'>信息</b>来精确定位<b class='flag-5'>错误</b>帧来源的方法

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    CAN总线错误分析与解决

    1、CAN总线的常见故障 CAN总线错误分析与解决 当CAN总线出现故障或数据传输异常时,往往会出现多种奇怪的故障现象,如仪表板显示异常,车辆无法启动,启动后无法熄灭,车辆动力性能下降
    的头像 发表于 09-14 16:30 1754次阅读
    <b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>分析与解决

    STM32 CAN接收/发送错误寄存器如何清零?

    中,每一个节点都有一个CAN控制器,CAN控制器通过内部寄存器和接口与CAN总线连接。其中,在CAN传输过程中,如果出现错误,会在
    的头像 发表于 09-14 14:22 2669次阅读

    示波器破解CAN错误帧/BusOff的经验分享

    MCU内置了CAN控制器用来将MCU的数据封装为CAN帧格式,同时它也负责CAN帧的校验和错误帧的处理。控制器封装好的逻辑报文经TX RX送到CAN
    发表于 09-08 09:19 756次阅读

    认识CAN总线错误 CAN总线错误分析与解决

    认识CAN 总线错误的第一步就是了解认识CAN 总线协议和它的具体功能,这样才能更容易地理解CAN 总线是如何去发现并解决错误的。
    发表于 08-14 15:18 3472次阅读
    认识<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b> <b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>分析与解决

    一文读懂CAN总线错误处理

    为了防止故障节点干扰甚至阻塞整个CAN网络系统,CAN协议实现了复杂的故障限制机制。为了保证通信的正常,CAN 2.0 总线协议总线中各节点需要采取以下措施进行错误检测:
    发表于 06-21 17:14 2022次阅读
    一文读懂<b class='flag-5'>CAN</b>总线<b class='flag-5'>错误</b>处理

    2023年中海达星推官系列直播再度启航,与您一起探讨空间信息技术

    信息技术
    中海达
    发布于 :2023年06月21日 11:45:49

    CAN 总线错误检测机制#can总线

    CAN 总线
    北汇信息POLELINK
    发布于 :2023年05月26日 13:54:03

    S32G2 FlexCAN CAN FD使用DMA接收字节顺序错误的原因?怎么解决?

    我在 goldbox 上以 DMA 模式使用 flexcan 时遇到字节字节序错误。因为没有DMA,发送正常。当接收到第一CAN FD报文时,报文中的字节顺序没有问题,可以接收到CAN
    发表于 04-27 07:09