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

描述

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_LOSTARB  0x00000002U

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

controller problems控制器出错

#defineCAN_ERR_CRTL  0x00000004U

当错误帧结构体中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_PROT  0x00000008U

当错误帧结构体中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表明间歇

收发状态错误

#define CAN_ERR_TRX  0x00000010U

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

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

嵌入式主板

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

嵌入式主板

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

无ACK错误

#defineCAN_ERR_ACK  0x00000020U

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

总线关闭

#define CAN_ERR_BUSOFF  0x00000040U

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

总线错误

#define CAN_ERR_BUSERROR  0x00000080U

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

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

控制器重启

#define CAN_ERR_RESTARTED  0x00000100U

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分