CAN FD的工作原理
1. 双速率传输
CAN FD数据帧的传输可以使用两种不同的比特率:
-
仲裁阶段:
- 在这一阶段,网络中的所有节点需要竞争发送权限。因此,传输速率被限制为1 Mbit/s。这个速率可以确保所有节点能够在同一时间访问总线,避免冲突。
-
数据阶段:
- 一旦某个节点获得发送权限,它可以在数据阶段提高传输速率,最高可达到8 Mbit/s。这是因为此时只有一个节点在发送数据,其他节点无需同步。
2. 数据有效负载的扩展
在传统CAN协议中,每个数据帧的最大有效负载为8字节。而在CAN FD中,这一限制被扩展到64字节。这意味着一个消息可以包含更多的数据,这对于需要频繁发送大量数据的应用场景非常重要。
例子说明
背景
假设我们在设计一款现代汽车,其中有多个电子控制单元(ECU),如引擎控制单元(ECU1)、刹车控制单元(ECU2)、车身控制单元(ECU3)和信息娱乐系统(ECU4)。这些ECU需要不断交换信息以确保车辆的安全和性能。
使用传统CAN的局限性
-
数据传输:
- 例如,引擎控制单元需要定期发送多个传感器数据(如温度、压力、速度等)给车身控制单元。由于最大有效负载为8字节,引擎控制单元可能需要发送多个消息,增加了通信延迟和网络负载。
-
实例:
- 假设ECU1需要发送以下数据:
- 发动机温度:4字节
- 机油压力:4字节
- 排气温度:4字节
- 车辆速度:4字节
- 由于有效负载限制,这些信息需要分成多个帧发送(例如,每帧8字节),增加了发送次数。
- 假设ECU1需要发送以下数据:
使用CAN FD的优势
-
高效的数据传输:
- 通过CAN FD,ECU1可以将所有传感器数据打包成一个数据帧,在数据阶段以更高的比特率(例如4 Mbit/s)发送,且可以一次性发送最多64字节的数据。这大大提高了传输效率。
-
实例:
-
假设ECU1需要发送以下数据:
- 发动机温度:4字节
- 机油压力:4字节
- 排气温度:4字节
- 车辆速度:4字节
- 其他传感器数据(如氧传感器、节气门位置等)总计:最多可达到64字节。
-
在使用CAN FD的情况下,所有这些数据可以打包在一个消息中发送,大幅减少了发送次数和网络占用时间。比如,所有传感器数据的总和为40字节,可以在一个数据帧中以4 Mbit/s的速率快速发送给ECU3。
-
节点同步
在CAN FD中,尽管可以在数据阶段提高比特率,但在发送ACK位之前,所有节点需要重新同步。这是为了确保在数据传输期间,如果有新的节点需要加入或发送ACK,它们仍然能够正确接收和发送数据。这种设计确保了网络的稳定性和数据的完整性。
总结
CAN FD通过在仲裁阶段和数据阶段使用不同的比特率,以及扩展数据有效负载的大小,克服了传统CAN协议的局限性。这使得其在现代汽车等需要高效、可靠通信的应用场景中,成为了一种理想的选择。通过减少消息发送次数和提高数据传输速率,CAN FD大幅提升了网络的整体性能和响应速度。
CAN FD的效率提升
-
更大的有效负载:
- 使用CAN FD协议,数据帧的有效负载可以达到64字节,显著提高了协议的效率。相比于传统CAN协议的最大8字节有效负载,增加的有效负载使得一次性发送更多数据成为可能,从而减少了消息发送的次数。
-
更高的吞吐量:
- 在仲裁阶段,CAN FD通常采用1 Mbit/s的比特率,而在数据阶段则可以提高到8 Mbit/s。这种比率(1:8)导致了吞吐量的显著提升,理论上可以实现约六倍的吞吐量提升。这是因为即使在帧头和CRC字段中使用了更多的比特,整体的高效性依然得以保持。
CAN FD的协议细节
-
帧区分:
- 为了区分CAN控制器(CAN CC)数据帧和CAN FD数据帧,CAN FD协议引入了一个以前保留的比特,称为FD帧(FDF)位。
- 当FDF位为非显性值(recessive)时,后续的比特序列将被解释为CAN FD数据帧。
- 当FDF位为显性值(dominant)时,则被视为CAN控制器数据帧或远程帧。
-
比特率切换位:
- 比特率切换(BRS)位:这是新引入的比特,用于在数据阶段切换到第二个比特率。
- 如果BRS位为非显性值(r),则在数据阶段使用更高的比特率(如8 Mbit/s)。
- 如果BRS位为显性值(d),则数据阶段仍使用仲裁阶段的比特时间设置(如1 Mbit/s)。
具体示例
假设我们有一个现代汽车的电子控制单元(ECU),需要通过CAN FD协议发送发动机数据。以下是具体的帧格式和发送流程示例:
帧结构示例
- CAN FD 数据帧示例:
- 帧头(控制字段、FDF位、BRS位等):包含信息以指示这是一个CAN FD数据帧。
- 数据有效负载:可以包含来自多个传感器的数据(如温度、压力、速度等),总共可达64字节。
- CRC字段:用于错误检测。
数据传输示例
-
仲裁阶段:
- ECU1需要发送数据。在仲裁阶段,所有ECU以1 Mbit/s的速率竞争发送权限。
-
数据阶段:
- 一旦ECU1获得发送权限,它将FDF位设为非显性,指示后续帧为CAN FD数据帧,并将BRS位设为非显性,以使用8 Mbit/s的速率发送数据。此时,ECU1可以将64字节的数据打包在一个消息中快速发送。
-
接收和确认:
- 其他ECU在接收到数据后,需要发送ACK位,以确认成功接收。此时,所有节点将重新同步,以确保网络的稳定性。
总结
CAN FD通过更大的有效负载和可变的比特率显著提高了数据传输效率和吞吐量。通过引入FD帧位和比特率切换位,CAN FD协议能够有效地区分不同类型的数据帧,并在必要时快速切换传输速率。这些改进使得CAN FD成为现代汽车和其他高性能应用中理想的通信协议。
CAN FD数据帧结构
CAN FD数据帧的结构与传统CAN CC数据帧相似,但引入了一些扩展。以下是CAN FD数据帧的主要字段及其描述:
字段 | 描述 |
---|---|
SOF | 起始帧(Start of Frame):指示数据帧的开始。通常为1个比特位,值为显性(dominant)。 |
ID | 标识符(Identifier):用于唯一标识数据帧的内容。CAN FD支持11位和29位标识符,分别对应于FD基本帧格式(FBFF)和FD扩展帧格式(FEFF)。 |
DLC | 数据长度代码(Data Length Code):指示数据字段的长度,最大为64字节。 |
数据 | 数据字段(Data Field):实际传输的数据内容,长度由DLC字段指定。 |
CRC | 循环冗余校验(Cyclic Redundancy Check):用于错误检测,确保接收的数据没有被破坏。 |
ACK | 确认(Acknowledgement):接收节点发送的确认信号,表明数据已成功接收。 |
EOF | 帧结束(End of Frame):指示数据帧的结束。通常为7个比特位,值为显性(dominant)。 |
IMF | 间歇字段(Intermission Field):在数据帧之间的间隔,用于区分连续的数据帧。 |
关键特征
-
标识符格式:
- 11位标识符:使用FD基本帧格式(FBFF)。
- 29位标识符:使用FD扩展帧格式(FEFF)。
-
支持的帧类型:
- CAN FD协议控制器同时支持CAN CC帧和CAN FD帧。
- 两者在ISO 11898-1:2015标准中得到了国际标准化。
- 不支持远程请求数据帧:CAN FD协议不允许通过远程请求来获取数据,这与CAN CC协议有所不同。
例子
1. 数据帧发送示例
假设某个电子控制单元(ECU)需要发送一条包含多个传感器数据的CAN FD数据帧:
- 标识符:假设使用11位标识符为
0x1A3
。 - 数据长度:假设传输的数据长度为16字节(例如:温度、压力等)。
- 数据内容:例如,温度数据为
0x7C
,压力数据为0x4B
等。
数据帧结构示例:
SOF | ID (0x1A3) | DLC (0x10) | 数据 (16字节) | CRC | ACK | EOF | IMF
2. 帧处理过程
- 起始帧(SOF):ECU开始发送数据帧。
- 标识符(ID):发送标识符,告知其他节点数据帧的内容。
- 数据长度(DLC):指示数据长度为16字节。
- 数据字段:实际发送的传感器数据。
- CRC:发送循环冗余校验码以进行错误检测。
- 确认(ACK):接收节点在确认接收数据后,向发送节点发送ACK信号。
- 结束帧(EOF):指示数据帧的结束。
- 间歇字段(IMF):在数据帧之间的间隔,准备发送下一帧。
总结
CAN FD数据帧通过扩展数据有效负载和支持更高的比特率,显著提高了通信效率。其帧结构与传统CAN CC数据帧相似,但通过引入FD帧位和比特率切换位,实现了对不同数据传输需求的支持。这使得CAN FD在现代汽车和其他高性能应用中,成为一种更优的选择。
以下是关于CAN FD帧格式的详细说明,包括控制字段的结构、各字段的描述以及其与CAN CC数据帧的区别。
CAN FD帧格式概述
CAN FD协议引入了两种帧格式:FD基本帧格式(FBFF)和FD扩展帧格式(FEFF)。在这两种格式中,控制字段包含了一些额外的比特,这些比特在传统的CAN CC数据帧中并不存在。以下是这些字段的详细描述:
字段 | 描述 |
---|---|
RRS | 远程请求替代(Remote Request Substitution):用于指示是否替代远程请求,通常在CAN FD中始终为显性(dominant)。 |
SRR | 替代远程请求(Substitute Remote Request):该位在CAN FD中被忽略。 |
IDE | 标识符扩展(Identifier Extension):指示使用扩展标识符(29位),在FEFF格式中为非显性(recessive)。 |
FDF | 灵活数据速率格式(Flexible Data Rate Format):指示数据帧使用CAN FD格式。 |
d | 显性值(Dominant):比特位值为显性。 |
r | 非显性值(Recessive):比特位值为非显性。 |
r0 | 保留位(Reserved):保留供将来使用。 |
控制字段细节
-
FDF位:
- FDF位指示数据帧使用FD帧格式。如果该位为显性,表示是传统CAN CC帧;如果为非显性,表示是CAN FD帧。
-
BRS位(比特率切换位):
- 在BRS位的采样点执行比特率切换,以确保最大程度的鲁棒性。此位允许在数据阶段切换到更高的比特率(例如8 Mbit/s),以提高数据传输速度。
-
ESI位(错误状态指示位):
- ESI位提供有关错误状态的信息。当该位为显性值时,指示处于错误活动状态;当为非显性值时,指示处于错误被动状态。
示例
控制字段的帧结构示例
以下是一个CAN FD数据帧的控制字段结构示例,假设使用FEFF格式,包含FDF、BRS和ESI位:
RRS | SRR | IDE | FDF | BRS | ESI
d | d | r | r | r | d
- RRS:设为显性(d),指示远程请求替代。
- SRR:设为显性(d),但在CAN FD中该位被忽略。
- IDE:设为非显性(r),表示使用扩展标识符。
- FDF:设为非显性(r),指示使用CAN FD格式。
- BRS:设为非显性(r),允许数据阶段切换比特率。
- ESI:设为显性(d),指示当前处于错误活动状态。
总结
CAN FD帧格式通过引入控制字段和灵活的数据传输方式,提供了更高的传输效率和更强的错误检测能力。与传统CAN CC数据帧相比,CAN FD支持更大的数据有效负载和更高的比特率,适应了现代汽车和其他高性能应用的需求。控制字段中的FDF、BRS和ESI位为协议的灵活性和鲁棒性提供了重要支持。
以下是对CAN FD协议中相关字段的详细说明,包括标识符扩展、灵活数据速率格式、比特率切换、错误状态指示和数据长度代码的定义及其功能:
CAN FD关键字段解释
字段 | 描述 |
---|---|
IDE | 标识符扩展(Identifier Extension):指示是否使用扩展标识符(29位)。如果为显性(dominant),则表示使用标准11位标识符;如果为非显性(recessive),则表示使用扩展29位标识符。 |
FDF | 灵活数据速率格式(Flexible Data Rate Format):该位用于指示数据帧是CAN FD格式。如果为非显性(recessive),则表示数据帧采用灵活数据速率格式;如果为显性(dominant),则表示为传统CAN CC数据帧。 |
BRS | 比特率切换位(Bit Rate Switch):指示在数据阶段是否切换到较高的比特率。如果该位为非显性(recessive),则在数据阶段使用较高的比特率;如果为显性(dominant),则保持原有的比特率(通常为1 Mbit/s)。 |
ESI | 错误状态指示位(Error State Indicator):用于指示节点的错误状态。如果该位为非显性(recessive),表示节点处于错误被动状态;如果为显性(dominant),则表示节点处于错误活动状态。 |
DLC | 数据长度代码(Data Length Code):指示数据字段的长度,以字节为单位,最大为64字节。DLC字段的值可用于确定随数据帧一起发送的有效载荷的大小。 |
示例
CAN FD数据帧中的字段结构
假设我们有一个使用CAN FD格式的数据帧,其控制字段结构如下:
IDE | FDF | BRS | ESI | DLC
r | r | r | d | 0x10
- IDE:设为非显性(r),表示使用29位扩展标识符。
- FDF:设为非显性(r),指示该数据帧为CAN FD格式。
- BRS:设为非显性(r),允许在数据阶段切换到较高的比特率。
- ESI:设为显性(d),表示当前节点处于错误活动状态。
- DLC:设为
0x10
,表示数据字段长度为16字节。
总结
通过引入IDE、FDF、BRS、ESI和DLC等字段,CAN FD协议提供了更高的灵活性和数据传输效率。每个字段都在数据帧中扮演着重要角色,确保数据的正确传输和有效管理。这些增强功能使得CAN FD在现代汽车及其他高性能应用中能够满足更复杂的通信需求。
在CAN FD协议的标准化过程中,为了提高通信的可靠性,引入了一些额外的安全措施。这些措施主要体现在循环冗余校验(CRC)字段的设计上。
CRC字段的详细结构
-
CRC位数:
- 17位CRC:适用于有效负载(payload)不超过16字节的帧。
- 21位CRC:适用于有效负载超过16字节的帧。
这种设计确保了对不同大小数据的有效校验,提升了数据传输的准确性。
-
附加字段:
- 8位填充比特计数器:用于记录在CRC字段中插入的填充比特(stuff bits)的数量。填充比特用于避免连续相同位的出现,增强了信号的稳定性。
- 奇偶校验位:用于额外的错误检测,确保数据的完整性。
-
固定填充比特(FSB):
- CRC字段中的填充比特采用与前一个比特值相反的固定填充比特(Fixed Stuff Bits, FSB)。这种策略有助于提高冗余校验的有效性,确保任何单个故障在所有条件下都能被检测到。
效果与优势
- 单点故障检测:这些安全措施确保所有单点故障都能在所有条件下被有效检测,提升了系统的可靠性。
- 多点故障检测的改进:引入的机制甚至增强了检测多个故障的可能性,提升了整体的通信可靠性。
非ISO CAN FD控制器
中期可能会出现一些非ISO CAN FD控制器,这些控制器不符合ISO 11898-1标准,且没有实现上述的额外安全特性。这意味着,这些控制器在可靠性方面可能不如符合标准的CAN FD控制器,使用时需特别注意可能的通信问题。
总结
通过在CRC字段中引入额外的安全措施,CAN FD协议显著提高了数据传输的可靠性和准确性。这些增强的检测功能确保了在复杂和高风险的通信环境中,数据的完整性和系统的稳定性。