本帖最后由 wahe2008 于 2025-3-26 19:53 编辑
#申请原创#
一、先说说CAN总线的特点及相关概念。
1. 差分信号传输
CAN总线使用两根信号线(CAN_H和CAN_L)进行数据传输,通过这两根线上的电压差来表示逻辑0和逻辑1。在隐性状态时,两根线的电压差为0V;在显性状态时,电压差至少为2V。这种差分信号传输方式具有抗干扰能力强、时序定位精确的优点。
2. 报文广播与优先级仲裁
CAN总线采用广播通信方式,所有节点都可以发送和接收数据。当一个节点发送数据时,它会将数据和标识符(ID)一起发送到总线上。标识符不仅用于标识消息类型,还用于确定消息的优先级。如果多个节点同时发送数据,CAN总线会通过标识符的逐位仲裁机制解决冲突,优先级高的节点继续发送,优先级低的节点停止发送并转为接收状态。
3. 帧结构与数据传输
CAN总线通过帧(Frame)进行数据传输,帧分为四种类型:
数据帧:用于发送数据。
远程帧:用于请求数据。
错误帧:用于通知总线错误。
过载帧:用于在数据帧之间提供延时。
数据帧由多个字段组成,包括帧起始、仲裁段、控制段、数据段、CRC段等,确保数据的完整性和可靠性。
4. 多主控制与错误处理
CAN总线支持多主控制,所有节点在总线空闲时都可以发送数据。此外,CAN总线具有强大的错误检测和处理能力,包括错误检测、错误通知和错误恢复功能,确保系统的高可靠性。
5. 物理层与网络扩展
CAN总线的物理层通常使用非屏蔽双绞线(UTP),最大传输速率为1Mbps,最大网络扩展距离为40米。在总线两端通常会连接120欧姆的终端电阻,以减少信号反射和提高信号质量。
通过以上机制,CAN总线实现了高效、可靠的数据传输,广泛应用于汽车、工业自动化等领域。
二、CAN 控制器的工作模式
CAN 控制器有 3 种工作模式:
睡眠模式
系统复位之后, CAN 控制器处于睡眠模式, 该模式下 CAN 的时钟停止,因此可以节省电能,但软件仍然
可以访问邮箱寄存器, 同时 TX 管脚的内部上拉电阻被禁用。
冻结模式
软件对 CAN 控制器的初始化,只能在冻结模式下进行。对 CAN 控制器的 14 组过滤器组(包括模式、位宽、
FIFO 关联、激活和过滤器值)进行初始化可以在非冻结模式下进行。当 CAN 处于冻结模式时,禁止报
文的接收和发送。
通讯模式
在冻结工作模式配置完成后,控制 CAN 进入通讯工作模式,开始报文收发过程。
三、CAN总线协议本身存在握手机制,主要通过以下机制确保通信的可靠性:
1. 应答确认(ACK)机制
工作原理:发送节点在数据帧末尾添加一个ACK时隙,接收节点若成功接收数据,则在该时隙内发送显性电平(逻辑0)作为应答;若未收到应答,发送节点会触发错误处理机制并重传数据。
作用:通过物理层的即时反馈,确保单帧数据的有效传输。
2. 错误检测与重发机制
错误类型:包括位错误、CRC校验错误、格式错误等。
处理流程:检测到错误后,节点立即发送错误帧中止当前通信,并自动重传数据,直至达到最大重试次数或成功发送3。
优先级保障:错误帧具有最高优先级,可快速终止错误数据的传播。
3. 非破坏性仲裁机制
冲突解决:当多个节点同时发送数据时,通过帧ID的逐位仲裁(显性电平优先)决定发送顺序,避免总线冲突。
隐性握手:仲裁过程本质是节点间通过电平竞争达成一致的“握手”,确保高优先级数据优先传输。
4. CAN高层协议的扩展握手(如CANopen SDO)
应用层握手:在CANopen协议中,服务数据对象(SDO)通过分段传输+ACK确认实现多帧数据的可靠传输。
示例:发送端分段传输数据后,接收端逐段确认,若某段未收到ACK则重传。
CAN总线的基本机制,尤其是ACK的部分。ACK在CAN协议中是一个重要的应答机制。发送节点在发送完数据帧后,会在ACK槽监听是否有接收节点应答。
ACK字段由两位组成,ACK槽和ACK界定符。发送节点在发送数据时,会在ACK槽放置隐性位(1),而接收节点如果正确接收到数据,就会将ACK槽拉成显性位(0)。这时候,发送节点通过检测ACK槽的电平变化来判断是否有节点正确接收。这个过程涉及到总线的线与机制,因为多个接收节点可以同时拉低电平,只要有一个节点正确接收,ACK槽就会显性,发送节点就知道数据被成功接收了。
另外,错误处理方面,如果发送节点在ACK槽检测到隐性位,说明没有接收节点应答,这时候会触发ACK错误,发送节点会启动重传机制。同时,ACK的检测是发送节点的责任,接收节点则通过改变ACK槽的电平来应答,而不是发送完整的帧,这有助于提高效率。
ACK的结构位置位于数据帧的末尾,CRC之后,发送节点在发送完数据后进入监听状态,检查ACK槽的状态。同时,不同的版本比如CAN FD可能有不同的机制,在标准CAN上,可以简要说明标准帧的结构,但不需要深入FD部分。
还要注意,错误检测中的ACK错误属于发送节点需要检测的类型,而接收节点可能检测其他类型的错误如CRC错误等。
总结来说,识别ACK的关键点在于发送节点在特定位置监听电平变化,利用总线的线与特性,通过显性位判断应答,并结合错误处理机制确保可靠性。
四、CAN总线通过以下机制识别ACK应答:
1.ACK字段的结构与位置
ACK字段位于CAN数据帧的末尾,紧接在CRC校验字段之后,由ACK槽(1位)和ACK界定符(1位)组成。
发送端行为
发送节点在ACK槽和ACK界定符处默认发送隐性位(逻辑1)。
2.ACK识别机制
接收节点应答
接收节点若成功接收数据,会在ACK槽将总线电平拉为显性位(逻辑0)。由于CAN总线“线与”特性,只要有一个接收节点应答,总线电平即显性。
发送节点检测
发送节点在发送完数据帧后进入监听状态,通过检测ACK槽电平判断是否被应答:
若ACK槽为显性位:表示至少一个节点成功接收。
若ACK槽保持隐性位:触发ACK错误(未应答错误),发送节点启动重传流程。
3.错误处理与ACK的关系
ACK错误判定
发送节点若未检测到显性ACK槽,则记录ACK错误并累计发送错误计数器(TEC),当TEC超限时节点进入“被动错误”状态。
多节点协同机制
CAN总线的多主架构允许任意节点作为发送方,ACK机制确保所有节点均可参与应答,但仅需一个显性位即可完成全局确认。
4.实际应用场景
故障排查
通过分析错误帧中的ACK段(如显性位缺失或异常波形),可定位通信故障节点。例如,周期性干扰可能导致ACK槽电平异常。
协议兼容性
CAN 2.0(标准帧和扩展帧)与CAN FD均沿用ACK机制,但高速CAN(<1Mbps)和低速CAN(<125kbps)在时序细节上存在差异。
综上,CAN总线通过硬件层的电平检测与协议层的错误计数器协同工作,实现高效可靠的ACK识别与错误处理。
@21小跑堂
|
此文章已获得独家原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。
从CAN总线的特点及相关概念介绍切入,到CAN控制器的工作模式,引出CAN的握手机制探讨。
感谢分享,欢迎了解原创奖励活动https://bbs.21ic.com/icview-3431776-1-1.html