CAN总线所传输的数据又称为报文,是一帧一帧地传送,每帧数据由一组二进制数或数字脉冲组成,这组二进制数按功能又分为一段一段的,每一段称为帧的域或场。
CAN总线所传输的数据有数据帧、远程帧、错误帧和过载帧4种类型。
CAN的帧有两种不同的帧格式,不同之处为识别符的长度不同:具有11位识别符的帧称为标准帧,而含有29位识别符的帧为扩展帧。
1.数据帧
数据帧的功能是将数据从发送器传到接收器。数据帧南开始域、仲裁域、控制域、数据域、安全域、应答域和结束域7个不同的域组成,如图2-13所示。
图2-13 数据帧的组成
(1)开始域 标志数据帧的起始,仅由一个“显性”(即0)位组成,带有约5V的电压的1位被送入CAN高位传输线,带有约0V电压的1位被送入CAN低位传输线。开始域由控制芯片完成。
(2)仲裁域 仲裁域包括标识符和远程发送请求位(RTR)。识别符代表数据的身份和优先权,标准格式下标识符的长度为11位,这些位按ID.10~ID.0的顺序发送,最低位是ID.0。7个高位(ID.10~ID.4)必须不能全是“隐性”。在标准帧里,识别符后是远程发送请求位(RTR),该位若为“显性”(即0),代表发送的信息是数据;若为“隐性”(即1),代表发送的信息是数据请求。
只要总线空闲,各控制单元均可向总线发送数据,如果各个控制单元要同时发送各自的数据,那么系统必须决定哪一个控制单元先进行发送。系统规定具有最高优先权的数据先发送,标识符的二进制值越小,其优先权就越高。不同数据的优先权根据数据的重要性和紧迫性等因素由人为编程时确定。
例如,发动机电控单元、ABS电控单元和自动变速器电控单元相比较,制动信号的优先权最高,三者仲裁域的标识符如下:
01010000000(发动机电控单元标识符)
00110100000(ABS电控单元标识符)
10001000000(自动变速器电控单元标识符)
可以看出,ABS电控单元的标识符数值设定得最小,优先权最高;自动变速器电控单元标识符数值最大,优先权最低;发动机电控单元标识符数值居中。当以上三个电控单元同时向总线发送数据时,系统就先发送ABS电控单元发送的数据,此时,发动机电控单元和自动变速器电控单元转化为接收器接收数据。总线一旦空闲,系统会发送其他电控单元的数据。
(3)控制域 控制域由6个位组成,其中4位是数据长度代码,即数据的字节数量,另两位作为扩展用的保留位。所发送的保留位必须“显性”。控制域供接收器检查是否已经接收到所传来的所有信息。接收器接收和认可所有由“显性”和“隐性”的任意组合在一起的位。
数据长度代码见表2-4。其中,DLC3~DLC0代表数据长度代码的位,DLC0是最低位,DLC3是最高位。数据长度代码最大为8,表示数据帧允许的数据长度为0~8字节。
表中“0”为“显性”,“1”为“隐性”。
(4)数据域 数据域由数据帧发送的数据组成,可以为0~8个字节,每字节包含了8个位,所以数据帧最大为64位。数据域是如何表示数据的呢?例如,要表达节气门开度信号,假如把节气门的开度按最大开度的百分数表示,每10%为一个等级,那么节气门开度信号在数据域的代码见表2-5。其中,“0%”表示节气门关闭,发动机处于怠速状态,“100%”表示节气门全开,发动机处于全负荷状态。
表2-4 数据长度代码
表2-5 4个位表示的节气门开度
同理,可以用更多的位表示更精确的节气门开度变化,如8个位可表示256个节气门开度位置变化。对更复杂的数据,如果1个字节不够表示,可以用2个字节或多个字节表示,但不能超过8个字节。
(5)安全域 安全域用来检测传递数据中的错误。CAN系统用于电噪声很大的环境,这个环境中的数据最容易丢失或破坏。CAN协议提供了5种错误检测和修正的方法,因此如果数据被破坏,能够被检测出来,而且网络中的所有的电控单元都会忽略这个数据。这5种错误检测类型分别为位错误、填充错误、校验(CRC)错误、形式错误和应答错误。(www.daowen.com)
1)位错误:各控制单元在发送位的同时也对总线进行监视。如果所发送的位值与所监视的位值不相符合,则在此位时间里检测到一个位错误。
2)填充错误:如果在使用位填充法进行编码的信息中,出现了第6个连续相同的位电平时,将检测到一个填充错误。
3)校验错误:校验序列包括发送器的校验计算结果,接收器计算校验的方法与发送器相同。如果接收器的计算结果与接收到校验序列的结果不相符,则检测到一个校验错误。
4)形式错误:当一个固定形式的域含有一个或多个非法位,则检测到一个形式错误。
5)应答错误:只要在应答间隙期间所监视的位不为“显性”,则发送器会检测到一个应答错误。
(6)应答域 应答域用来反映接收器通知发送器是否已经正确接收到数据。当接收器正确地接收到有效的数据,接收器就会在应答间隙期间内向发送器发送一个“显性”位以应答,而应答界定符始终是“隐性”位。
如果检查到错误,接收器立即通知发送器,然后发送器再发送一次数据,直到该数据被准确接收为止,但从检测出错误到下一数据的传送开始为止,发送时间最多为29个位的时间。
应答域长度为2个位,包含应答间隙和应答界定符,常态下发送两个“隐性”位。
(7)结束域 结束域标志着数据报告结束,由7个“隐性”位组成。这是显示错误并重复发送数据的最后一次机会。
2.远程帧
CAN总线上电控单元的数据发布,有以下两种基本形式。
第一种形式是按设定或需要主动发布。例如制动信号,当踩制动踏板时ABS电控单元就会主动发布,发动机电控单元接收后就会立即调控发动机转速由高速降为低速。
第二种形式是受请求后发布。例如A电控单元需要B电控单元的数据,A电控单元先发布请求信号,这个请求信号的数据形式就是远程帧。CAN总线上的所有电控单元都可接收到这个远程帧,并对远程帧中的标识符进行识别,需要则接收,不需要则不处理。在对各电控单元编程时,已设定B电控单元接收这个远程帧,并随即发布A电控单元所需要的数据。
例如,自动变速器在自动换档决策前,根据程序要求需要发动机的转速数据,以便确定最佳换档工况,那么自动变速器电控单元要先发布远程帧,请求发动机电控单元发布发动机的转速数据,发动机电控单元收到这个远程帧的请求后,随即发布发动机的即时转速数据,自动变速器电控单元收到发动机的转速数据后,再决定是否换档或等待发动机的转速达到一定数值后再换档。
远程帧由开始域、仲裁域、控制域、安全域、应答域和结束域6个不同的域组成。与数据帧相反,远程帧的远程发送请求位(RTR位)是“隐性”的(即逻辑“1”)。它没有数据域,数据长度代码的数值是不受制约的(可以标注为容许范围内0~8的任何数值)。其余域功能同数据帧。
3.错误帧
任何电控单元检测到总线错误就发出错误帧。错误帧的功能是对所发送的数据进行错误检测、错误标定及错误自检。错误帧由两个不同的域组成:第一个域为不同控制单元提供错误标志的叠加,第二个域是错误界定符。
(1)错误标志 错误标志包括主动错误标志和被动错误标志两种形式。主动错误标志由6个连续显性位组成,检测到错误条件的“错误主动”控制单元通过发送主动错误标志以指示错误。被动错误标志由6个连续隐性位组成,除非被其他CAN控制器的显性位改写,检测到错误条件的“错误被动”控制单元通过发送被动错误标志以指示错误。
(2)错误界定 错误界定符由8个隐性位组成。传送了错误标志以后,每一节点就发送一个隐性位,并一直监视总线直到检测出一个隐性位为止,然后就开始发送其余7个隐性位。
4.过载帧
过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。接收器在电路尚未准备好或在间歇域期间检测到一个“显性”位时,会发送过载帧,以延迟数据的传送。过载帧包括过载标志和过载界定符两个域。
5.帧间空间
数据帧或远程帧与其前面帧的隔离是通过帧间空间实现的,无论其前面的帧为何类型。所不同的是过载帧与错误帧之前没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。帧间空间包括间歇域和总线空闲域。
总线空闲域的长度是任意的。只要总线被认定为空闲,等待发送信息的控制单元就会访问总线。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。