完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CAN总线产生的错误以错误帧的形式上报给应用层。设置注册表[HKEY_LOCAL_MACHINEDriversBuiltinCAN1] BusErrorReport项为1可以让驱动上报CAN总线错误帧,为0,驱动不会上报错误帧。 帧格式 CAN帧结构体定义如下,当CAN_FRAME中CAN_ID的error为1时,表示该帧为错误帧。 typedef struct{ unsigned int id:29; unsigned int error:1; unsigned int remote:1; unsigned int extended:1; }CAN_ID;
typedef struct _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仲裁丢失错误 #define CAN_ERR_LOSTARB 0x00000002U 当错误帧结构体中CAN_ID& CAN_ERR_LOSTARB为真时,表明该错误产生。 controller problems控制器出错 #define CAN_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通信协议出错 #define CAN_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错误 #define CAN_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为真时,表明控制器重启。 成都英创信息技术有限公司 http://www.emtronix.com |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 02:21 , Processed in 0.542459 second(s), Total 40, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号