嵌入式软件工程师-硬件接口与通信协议-CAN总线_CAN总线错误检测与处理机制.docx

嵌入式软件工程师-硬件接口与通信协议-CAN总线_CAN总线错误检测与处理机制.docx

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE1

PAGE1

CAN总线概述

CAN(ControllerAreaNetwork)总线是一种用于实时应用的串行通信协议,特别适用于汽车和其他工业自动化环境中的数据通信。它由Bosch公司在1983年开发,旨在提供一种高效、可靠且成本效益高的通信方式,以满足现代车辆中电子控制单元(ECU)之间的数据交换需求。CAN总线的设计目标是实现无主节点的多主通信,允许多个设备同时发送数据,但只有具有最高优先级的消息能够被传输。

1CAN总线的物理层

CAN总线的物理层通常使用双绞线进行通信,这种双绞线由两条信号线组成,分别称为CAN_High和CAN_Low。在空闲状态下,两条线上的电压差为0,表示逻辑“1”。当总线被激活时,电压差会变为逻辑“0”,这通常是由发送节点将CAN_High线拉低,同时将CAN_Low线拉高来实现的。这种差分信号传输方式提高了CAN总线的抗干扰能力。

2CAN总线的数据链路层

CAN总线的数据链路层负责数据的封装和解封,以及错误检测和处理。数据链路层包括两个子层:逻辑链路控制(LLC)子层和媒体访问控制(MAC)子层。LLC子层负责数据的封装和解封,而MAC子层则负责错误检测和处理,以及仲裁总线访问权。

1CAN总线错误检测基础

CAN总线的错误检测机制是其可靠通信的关键。错误检测主要通过以下几种方式实现:

1.1位填充

在CAN总线中,为了确保数据的正确传输,使用了位填充技术。位填充是指在连续的5个相同位之后插入一个相反的位。例如,如果连续发送了5个“1”,则会自动插入一个“0”。这种技术有助于接收节点同步,防止位滑动。

1.2循环冗余校验(CRC)

CAN总线使用CRC校验来检测数据帧中的错误。CRC是一种基于多项式除法的校验码,可以检测出数据传输中的大多数错误。在发送数据帧时,发送节点会计算一个CRC值,并将其附加到数据帧的末尾。接收节点在接收到数据帧后,会重新计算CRC值并与接收到的CRC值进行比较。如果两个CRC值不匹配,接收节点会认为数据帧中存在错误。

1.2.1CRC计算示例

假设我们有一个数据帧,其数据部分为0CRC多项式为0x1021。下面是一个使用Python计算CRC值的示例代码:

defcrc16(data,poly=0x1021):

计算CRC16校验值

:paramdata:输入数据,十六进制形式

:parampoly:CRC多项式,十六进制形式,默认为0x1021

:return:CRC16校验值

crc=0xFFFF

forbyteindata:

crc^=byte8

for_inrange(8):

ifcrc0x8000:

crc=(crc1)^poly

else:

crc=1

returncrc0xFFFF

data=[0x12,0x34,0x56,0x78]

crc_value=crc16(data)

print(CRC值为:0x{:04X}.format(crc_value))

在这个示例中,我们首先定义了一个crc16函数,该函数接受数据和CRC多项式作为输入参数。然后,我们使用一个示例数据0计算CRC值。最后,我们打印出计算得到的CRC值。

1.3应答位(ACK)

在CAN总线中,每个数据帧的末尾都有一个应答位(ACK)。当接收节点成功接收到数据帧时,它会发送一个显式位(逻辑“0”)作为应答。如果发送节点没有接收到应答位,或者接收到的是隐式位(逻辑“1”),则会认为数据帧传输失败。

1.4错误帧

当CAN总线上的节点检测到错误时,它会发送一个错误帧。错误帧由错误标志和错误界定符组成,用于通知其他节点数据传输中存在错误。错误标志可以是位错误标志或填充错误标志,具体取决于错误的类型。错误界定符用于结束错误帧,并重新同步总线上的所有节点。

1.5错误处理

当节点检测到错误时,它会根据错误的类型和严重程度采取不同的处理措施。例如,如果检测到的是位错误,节点可能会尝试重新发送数据帧。如果检测到的是填充错误,节点可能会停止发送数据帧,并等待总线空闲后再重新发送。如果错误非常严重,节点可能会进入错误被动模式,停止发送数据帧,并仅接收数据帧。

在CAN总线中,错误处理机制还包括错误计数器。每个节点都有一个发送错误计数器和一个接收错误计数器。当节点发送或接收数据帧时,如果检测到错误,相应的错误计数器

您可能关注的文档

文档评论(0)

kkzhujl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档