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为真时,表明控制器重启。
硅晶圆上直接生长石墨烯实现高灵敏生化传感平台
为什么智能门锁的购买量这么小
自动驾驶汽车为什么需要高精度定位
音圈电机无人机在巡河中的应用
骁龙Elite Gaming:采用先进的异构计算设计,增强游戏战斗力
英创信息技术关于新CAN驱动的错误帧定义
电瓶修复技术学习年底班开始招生了
基于RFID技术的固定资产管理系统
麒麟980发布骁龙845稳步上新 小米8系列新机驾临
CES Asia展6月开启 国内首款高度集成自动驾驶控制器Titan惊艳亮相
简单介绍继电器工作原理及驱动电路
改进的模糊控制器在加热炉智能控制系统中的应用研究
自复式过欠压保护器作用_自复式过欠压保护器怎么安装
俄罗斯军队现代化武器和技术装备的相关情况分析
不断增长的物联网环境要如何去管理
航空工业贵飞的首架批产海军型山鹰飞机已顺利总装下线并交付试飞站
二级倒立摆的模糊控制研究
ZigBee和蓝牙分析与比较详解
群创设印度业务中心和MicroLED业务部门
运算放大器的偏置电流及消除偏置电流影响