CAN(Controller Area Network)总线是一种常用于嵌入式系统中的串行通信系统。其中,CAN总线通过双线结构实现节点间的通信。节点可以是传感器、执行器或者控制器等设备。由于CAN总线具有高速通讯、高可靠性、抗干扰性强等特点,因此在汽车电子、航空航天、工业自动化等领域被广泛应用。
CAN节点在通信过程中可能会出现异常情况,此时可以通过异常码来指示异常情况类型。CAN总线的异常码分为错误帧和错误通知帧两种类型。其中,错误帧指出数据传输时出现错误,如格式错误、CRC校验错误、位错误等。错误通知帧则指出总线处于错误状态,如总线仲裁失败、总线错误等。
在CAN通信中,控制器会在特定条件下生成错误帧并发送到总线上,具体来讲,当以下情况发生时会生成错误帧:
(1) 校验和出现错误;
(2) ACK槽位(用于传输唤醒码)未被正确发送和接收;
(3) 重传计数器超过阈值(通常为128);
(4) 接收器未收到有效数据或仲裁场信号;
控制器生成错误通知帧的条件包括:错误帧出现次数达到阈值、总线上检测到错误(如总线被短路)等。此时,所有节点都会接收到错误通知帧,并根据其中的错误码进行相应操作,以保证系统的正常运行。
CAN异常码包含两种:指示错误帧的传输错误码和指示错误通知帧的错误状态码。
在标准CAN2.0B协议中,错误帧的传输错误码包括:
(1) 0x00 无错误;
(2) 0x01 传输错误(未完成数据传输);
(3) 0x02 报文丢失错误;
(4) 0x03 位错误;
(5) 0x04 校验错误;
(6) 0x05 丢弃错误(错误计数到达上限);
(7) 0x06 错误帧。
而错误通知帧的错误状态码包括:
(1) 0x00 通讯结束,无错误;
(2) 0x01 发生总线仲裁错误;
(3) 0x02 数据丢失错误;
(4) 0x03 错误的控制器应答;
(5) 0x04 错误的控制器状态;
(6) 0x05 错误的报文;
(7) 0x06 保留(错误状态码不使用);
(8) 0x07 错误的通讯。
当CAN总线出现异常码时,需要进行相应的处理以保证系统正常运行。具体处理方法如下:
(1) 首先需要根据异常码类型确定异常原因,如是数据传输错误还是总线状态出现问题等。
(2) 根据异常原因进行针对性的处理,如进行数据重传、休眠唤醒、重新初始化等。
(3) 在异常处理完成后,需要将错误计数器清零,以避免异常码的积累导致系统崩溃。
总的来说,对于CAN异常码的处理需要具有一定的技术功底和相关经验,因此建议在处理异常码时应该寻求专业技术人员的帮助,以提高系统运行的稳定性和可靠性。