从CAN报文中输出帧类型 标准帧 还是 扩展帧 || 远程帧 还是 数据帧

目录

CAN总线是干嘛的

CAN中的整个链路层处理数据流程

CAN总线中的总线总裁

ISO 11898(High speed)

CAN总线中的数据帧

CAN总线的遥控帧

CAN总线的错误帧

CAN总线的过载帧

CAN中的位时序

CAN中的硬同步

CAN中的重新同步

从CAN报文中输出帧类型代码实现


CAN总线是Controller Area Network的缩写,是一种用于控制器局域网的标准。

以下是一些CAN总线的重要知识点:

  1. CAN总线是一种串行通信协议,它能够实现分布式实时控制。
  2. CAN总线的数据传输速度最高可达1Mbps,通信距离最远可达10km。
  3. CAN总线使用非破坏性仲裁技术,确保多个节点同时发送数据时,优先级低的节点会主动停止发送,避免数据冲突。
  4. CAN总线使用CRC校验技术,确保数据传输的可靠性。
  5. CAN总线支持标准格式和扩展格式,标准格式的标识符位为11位,扩展格式的标识符位为29位。
  6. CAN总线使用同步跳转模式,可以实现高速数据传输和低功耗节能。
  7. CAN总线可以使用多主结构,多个节点可以同时发送数据,也可以通过节点优先级来控制数据传输顺序。
  8. CAN总线可以与其他网络集成,实现分布式控制和监控。

总之,CAN总线是一种强大的串行通信协议,具有高速、远程、可靠、节能等优点,被广泛应用于工业自动化、汽车电子、医疗设备、智能家居等领域。

CAN总线是干嘛的


CAN总线是一种强大的车辆总线设计,它允许标准的微控制器和设备进行通信,而无需彼此的应用程序。它是一种基于消息的协议,最初设计用于汽车内的多路电气布线以节省铜线,但它也可以用于许多其他环境。CAN总线被广泛用于工业自动化、船舶、医疗设备、工业设备等领域,以实现大数据量短距离通信或者长距离小数据量,并且对实时性要求比较高,多主多从或者各个节点平等的现场中使用。

CAN总线的特点包括:

  1. 数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序。
  2. 多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞。
  3. 通信距离最远可达10KM(速率低于5Kbps),速率可达到1Mbps(通信距离小于40M)。
  4. CAN总线传输介质可以是双绞线,同轴电缆。

总之,CAN总线是一种广泛应用于各种领域的通信协议,具有强大的功能和高效的数据传输能力。

CAN中的整个链路层处理数据流程


CANController Area Network)总线是一种用于控制器局域网的标准。整个CAN链路层处理数据流程包括以下步骤:

  1. 数据段编码:将应用程序数据编码为数据段(Data Segment)。数据段由数据字节和远程传输请求(RTR)位组成。数据字节可以是8位或16位,RTR位表示是数据帧还是遥控帧。
  2. 帧类型编码:将数据段和帧类型(Remote Transmission Request、Data、Error、Overload)一起编码为帧格式(Frame Format)。
  3. 优先级编码:将帧类型和优先级(0-15)一起编码为优先级段(Priority Segment)。
  4. 仲裁场编码:将优先级段和标识符(Identifier)一起编码为仲裁场(Arbitration Field)。
  5. 数据场编码:将数据段和保留位(Reserved Bit)一起编码为数据场(Data Field)。
  6. 校验场编码:将校验段(CRC Field)和应答场(ACK Field)一起编码为校验场(Checksum Field)。
  7. 帧传输:将整个CAN帧(包括帧起始、仲裁场、数据场、校验场和帧结束)发送到CAN总线上。
  8. 错误检测和处理:接收节点在接收到CAN帧后,会进行错误检测和处理。如果检测到错误,接收节点会发送一个错误标志(Error Flag)到总线上,以通知发送节点重新发送数据。
  9. 数据接收和处理:接收节点在接收到正确的CAN帧后,会将其解码为应用程序数据,并进行相应的处理。

总之,CAN链路层处理数据流程包括数据段编码、帧类型编码、优先级编码、仲裁场编码、数据场编码、校验场编码、帧传输、错误检测和处理以及数据接收和处理等步骤。这些步骤保证了CAN总线上的数据传输稳定和可靠。

CAN总线中的总线总裁


CAN总线中的总线总裁是指控制CAN总线通信的物理层和数据链路层的设备或组件。总线总裁负责管理总线上的数据传输,确保数据传输的正确性和可靠性。

CAN总线中,总线总裁通常由CAN控制器或CAN收发器担任。CAN控制器是负责管理数据链路层的设备,它接收来自应用程序的数据,并将其发送到CAN总线上。CAN收发器是负责管理物理层和数据链路层的设备,它接收来自CAN控制器的数据,并将其发送到CAN总线上,同时从CAN总线上接收数据并将其发送到CAN控制器上。

总线总裁在CAN总线中起着重要的作用,它的性能和可靠性直接影响到CAN总线的性能和可靠性。因此,选择合适的总线总裁是确保CAN总线通信可靠性的关键。

ISO 11898(High speed)


ISO 11898是用于道路交通信信息系统的一种通信协议标准。该标准规定了两种通信模式,分别为高速度(High speed)模式和低速度(Low speed)模式。

高速度模式通信协议主要应用于短距离通信,如车辆与路边设备之间的通信。该模式下,通信速率最高可达1Mbps,通信距离最远可达100m。高速度模式通信协议采用了CAN总线协议,因此具有CAN总线协议的所有优点,如非破坏性仲裁、CRC校验、同步跳转模式等。

低速度模式通信协议主要应用于长距离通信,如车辆与车辆之间的通信。该模式下,通信速率较低,最高可达125Kbps,通信距离最远可达10km。低速度模式通信协议也采用了CAN总线协议,但为了降低功耗和成本,一些CAN总线协议的功能被简化或省略。

ISO 11898标准的应用可以实现车辆与路边设备之间的信息共享和交互,提高道路交通安全性和效率。

CAN总线中的数据帧


CAN总线中的数据帧是用于传输数据的基本单元。数据帧由七个段组成,包括:

  1. 帧起始:表示数据帧的开始,使用1个位的显性电平表示
  2. 仲裁段:表示该帧的优先级,包括标识符位和远程发送请求位。标识符位是一个11位的功能性地址,CAN接收器通过标识符来过滤数据帧。远程发送请求位(RTR)表示该帧是远程帧还是数据帧。
  3. 控制段:表示数据的字节数及保留位的段,由6个位构成,表示数据段的字节数。
  4. 数据段:包含要传输的实际数据,最多可以发送8个字节。
  5. CRC段:检查帧的传输错误,使用16位CRC进行校验。
  6. ACK段:表示确认正常接收,使用2个位构成。
  7. 帧结束:表示数据帧的结束,使用7个位的隐性电平表示

CAN总线中的数据帧有两种格式:标准格式和扩展格式。标准格式的标识符位为11位,扩展格式的标识符位为29位。在标准格式中,标识符位的最高权重位(MSB)位于ID10,最低权重位(LSB)位于ID0,按照ID10~ID0的顺序进行传输。在扩展格式中,标识符位的最高权重位(MSB)位于ID28,最低权重位(LSB)位于ID0,按照ID28~ID0的顺序进行传输。

总之,CAN总线中的数据帧是一种用于传输数据的结构,具有完整的结构和严格的规则,以确保数据传输的可靠性和稳定性。

CAN总线的遥控帧


CAN总线的遥控帧是用于接收单元向发送单元请求发送数据所用的帧。遥控帧由6个段组成,包括帧起始、仲裁段、控制段、CRC段、ACK段和帧结束。

遥控帧的构成如下:

  1. 帧起始:表示遥控帧的开始,使用1个位的显性电平表示。
  2. 仲裁段:表示该帧的优先级,包括标识符位和远程发送请求位。标识符位是一个11位的功能性地址,CAN接收器通过标识符来过滤遥控帧。远程发送请求位(RTR)表示该帧是远程帧还是数据帧。
  3. 控制段:表示数据的字节数及保留位的段,由6个位构成,表示数据段的字节数。
  4. CRC段:检查帧的传输错误,使用16位CRC进行校验。
  5. ACK段:表示确认正常接收,使用2个位构成。
  6. 帧结束:表示遥控帧的结束,使用7个位的隐性电平表示

遥控帧与数据帧的区别在于遥控帧没有数据段,而数据帧有数据段。遥控帧用于接收单元向发送单元请求发送数据,因此没有数据段。遥控帧的RTR位恒为隐性1,数据帧的RTR位恒为显性0

总之,CAN总线的遥控帧是用于接收单元向发送单元请求发送数据所用的帧,它由6个段组成,包括帧起始、仲裁段、控制段、CRC段、ACK段和帧结束。

CAN总线的错误帧


CAN总线的错误帧是用于检测和处理总线上的错误的帧。当总线上的某个节点检测到错误时,它会发送一个错误帧,以通知其他节点发生了错误。

错误帧由8个段组成,包括:

  1. 帧起始:表示错误帧的开始,使用1个位的显性电平表示。
  2. 仲裁段:表示该帧的优先级,包括标识符位和远程发送请求位。标识符位是一个11位的功能性地址,CAN接收器通过标识符来过滤错误帧。远程发送请求位(RTR)恒为隐性1。
  3. 控制段:表示错误的类型,包括主动错误标志和被动错误标志。主动错误标志是由处于主动错误状态的单元检测出错误时输出的错误标志,为6个位的显性电平。被动错误标志是由处于被动错误状态的单元检测出错误时输出的错误标志,为6个位的隐性电平。
  4. 错误界定符:由8个位的隐性电平构成,表示错误帧的结束。

错误帧的类型包括:

  1. 主动错误帧:当某个节点检测到总线上的错误时,它会发送一个主动错误帧,以通知其他节点发生了错误。
  2. 被动错误帧:当某个节点检测到其他节点的错误时,它会发送一个被动错误帧,以通知自身和其他节点发生了错误。

错误帧的处理包括:

  1. 重新发送:当某个节点检测到错误时,它会重新发送数据帧或遥控帧,以避免数据丢失或通信失败。
  2. 关闭总线:当某个节点检测到严重错误时,它会发送一个主动错误帧,并关闭总线,以避免错误的扩散和数据的丢失。

总之,CAN总线的错误帧是用于检测和处理总线上的错误的帧,它由8个段组成,包括帧起始、仲裁段、控制段、错误界定符等。错误帧的类型包括主动错误帧和被动错误帧,处理方式包括重新发送和关闭总线。

CAN总线的过载帧


过载帧(Overload Frame)是CAN总线中的一种特殊帧,用于在接收节点发生过载时通知其他节点暂时停止发送数据。过载帧的格式与标准的数据帧和遥控帧不同,它由过载标志(Overload Flag)和过载定界符(Overload Delimiter)组成。

过载标志是由6个显性位组成的特殊标志,用于指示接收节点发生了过载。过载定界符是由8个隐性位组成的标志,用于指示过载帧的结束。当接收节点检测到过载标志时,它会立即停止接收数据,并发送一个过载帧到总线上。其他节点在接收到过载帧后,会暂时停止发送数据,等待接收节点的重新开始发送通知。

过载帧的作用是防止数据传输过程中发生数据拥塞,使得节点之间能够协调数据传输,保证数据的稳定和可靠。

CAN中的位时序


CAN总线中,位时序是指位传输过程中的时间序列。它包括以下几个参数:

  1. 同步段:用于同步每个比特位的传输时间,由11个位的显性电平组成。
  2. 传播段:用于表示比特位传输时间的延迟,由符号位和间隔位组成。符号位表示前一个比特位的结束,间隔位表示符号位和数据位之间的时间间隔。
  3. 数据段:用于传输实际的数据,由5个位的显性电平或隐性电平组成。
  4. 确认段:用于确认接收到的数据,由1个位的隐性电平组成。
  5. 帧结束:用于表示一帧数据的结束,由7个位的隐性电平组成。

CAN总线中,位时序的重要性在于确保数据传输的稳定和可靠。正确的位时序可以保证节点之间的同步和数据传输的正确性。因此,CAN总线中的位时序是经过精心设计的,以确保其稳定性和可靠性。

CAN中的硬同步


CAN总线中,硬同步是指将接收到的信号进行同步,以避免数据丢失或通信失败。硬同步通过使用同步段来实现,它由11个位的显性电平组成。当接收节点接收到同步段时,它会将时钟信号复位,并开始等待下一个位。如果接收到的位是隐性电平,则接收节点会继续等待下一个位。如果接收到的位是显性电平,则接收节点会将时钟信号更新为当前位,并开始接收下一个位。通过使用硬同步,接收节点可以确保接收到的数据与发送节点发送的数据同步,从而避免数据丢失或通信失败。

CAN中的重新同步


CAN总线中,重新同步是指当接收节点检测到同步丢失或相位跳变时,重新与发送节点进行同步的过程。重新同步的重要性在于确保接收节点接收到的数据与发送节点发送的数据同步,以避免数据丢失或通信失败。

重新同步的原理是在数据传输过程中,发送节点会在每个字节的末尾添加一个附加位,以帮助接收节点进行同步。当接收节点检测到同步丢失或相位跳变时,它会发送一个请求帧,要求发送节点重新发送数据。发送节点在收到请求帧后,会重新发送数据,并在每个字节的末尾添加一个附加位,以帮助接收节点进行同步。

重新同步的过程包括以下步骤:

  1. 接收节点检测到同步丢失或相位跳变时,会发送一个请求帧,要求发送节点重新发送数据。
  2. 发送节点在收到请求帧后,会重新发送数据,并在每个字节的末尾添加一个附加位,以帮助接收节点进行同步。
  3. 接收节点在接收到附加位时,会将其视为同步段,并重新与发送节点进行同步。
  4. 一旦接收节点重新与发送节点同步,它会继续接收数据,并进行错误检测和处理。

总之,重新同步是CAN总线中确保数据传输稳定和可靠的重要机制。它通过在数据传输过程中添加附加位来帮助接收节点重新与发送节点进行同步,从而避免数据丢失或通信失败。

从CAN报文中输出帧类型代码实现


给一串16进制数07 11 22 33 44 55 66 77 88 99 12化成2进制数的前3字节为描述部分,字节1为帧信息,字节1中的第7位(FF)表示帧格式,在标准帧中FF=0,扩展帧FF=1,字节1中第6位(RTR)表示帧的类型,字节1中RTR=0表示数据帧,RTR=1表示远程帧。

DLC表示在数据帧时实际的数据长度。

标准数据帧的ID有11个位。从ID10到ID0依次发送。禁止高7位都为隐形(禁止设定:ID=1111111XXXX)

字节2~3为报文识别码,其高11位有效。

字节4~11为数据帧的实际数据,远程帧时无效。

#include <stdio.h>

typedef struct {
    int frameFormat; // 帧格式:0表示标准帧,1表示扩展帧
    int frameType; // 帧类型:0表示数据帧,1表示远程帧
    int dataLength; // 数据帧长度
} FrameInfo;

FrameInfo analyzeFrame(unsigned char* hexData) {
    FrameInfo info;
    unsigned char byte1 = hexData[0];


    // 解析帧格式
    info.frameFormat = (byte1 >> 7) & 0x01;

    // 解析帧类型
    info.frameType = (byte1 >> 6) & 0x01;

    // 解析数据帧长度
    if (info.frameType == 0) {
        info.dataLength = byte1 & 0x0F;
    } else {
        info.dataLength = 0; // 远程帧时数据帧长度为0
    }

    return info;
}

int main() {
    unsigned char hexData[] = {0x07, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x12};
    FrameInfo info = analyzeFrame(hexData);

    printf("帧格式: %s\n", info.frameFormat == 0 ? "标准帧" : "扩展帧");
    printf("帧类型: %s\n", info.frameType == 0 ? "数据帧" : "远程帧");

    if (info.frameType == 0) {
        printf("数据帧长度: %d\n", info.dataLength);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/131480167
今日推荐