C++项目之CAN协议

LX-CAN通讯帧传输协议

LX_CAN 通讯帧传输协议定义了 LX_CAN 协议规范中的通讯模式,以及LX_CAN 网络中各个节点按照数据传输协议实现相互之间的数据交换。通过 LX_CAN 通讯帧传输协议能够保证LX_CAN 网络中通讯数据传输的确定性和可靠性。

1.1 LX_CAN协议通讯模式

LX_CAN 协议采用灵活的通讯模式,支持主从方式通讯模式和事件触发通讯模式。生产者消费者通讯模式用于 LX_CAN 网络中的生产者对于消费者的访问。

1.1.1 生产消费者模式

  LX_CAN协议的CAN网络中,最常用的是生产消费者通讯模式。通讯网络中,某个模块负责产生数据,这些数据由另一个模块来负责处理,产生数据的模块,就称为生产者;而处理数据的模块,就称为消费者。在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式。就够如图:

 C++项目之CAN协议_第1张图片

生产者消费者模式在LX_CAN协议中有三种方式:

1.广播方式

所有的消费者必须接受广播方式命令帧。地址0xFF用于识别广播通信。在广播报文中目标节点地址为0xFF,如下:

 C++项目之CAN协议_第2张图片

 

2.组地址(一对多)

LX_CAN协议中,组地址方式是一种一对多的模式,即一个组地址多个不同的地址号和通信对象。如下图:

C++项目之CAN协议_第3张图片

3.物理地址(点对点)

LX_CAN协议中,生产者消费之模式下的物理地址的方式是一对一的点对点方式。如下图:

 C++项目之CAN协议_第4张图片

 

 

1.2 LX_CAN协议报文处理过程

 生产者根据应用软件所需要的操作确定消费者源地址、功能码、以及所要的操作资源节点和数据参数,按LX_CAN报文格式封装发送到LX_CAN网络节点上。

消费者接收到生产者的报文后,需要根据报文中的目标节点、功能码、资源节点以及数据参数进行判断,以决定该报文是否为合法的报文。如果为合法的报文则执行相应的操作,并返回正常的响应报文;如果为非法的报文,则丢弃接收的报文,返回异常响应报文,并根据错误在异常响应报文中指明错误代码,以供消费者决定下一个操作。LX_CAN协议报文处理过程,如下:

 C++项目之CAN协议_第5张图片

1.3 LX_CAN报文传输协议

1.3.1 LX_CAN 帧格式

   1.命令帧

  CAN网络的源节点负责发起通讯,主控节点一般是命令帧。命令帧格式如下:

优先级

源地址

目的地址

ACK=0

重复位

保留

分段码

0-7个数据

 

ACK表示需要目标节点应答,当目的地址=0XFF时命令帧为广播帧时,广播帧可以设置ACK=1

  2.正常响应帧

如果LX_CAN的网络节点收到命令帧,并成功处理后,目标节点发送“正常响应帧”至网络。

正常响应帧格式如下:

优先级

源地址

目的地址

ACK=1

重复位

保留

分段码

0-7个数据

ACK=1 表示为响应帧,无需应答。功能码 与“命令帧”的 功能码 相同,表示本帧为正常响应。

3.异常响应帧

如果 LX_CAN 网络的目标节点在收到“命令帧”后,无法对该命令帧进行处理(例如功能码不支持、参数错误时等) ,则发送“异常响应帧”至网络。

异常响应帧的格式如下:

优先级

源地址

目的地址

ACK=1

重复位

保留

分段=0x00

0-7个数据

ACK=1 表示为响应帧,无需应答。分段码=0x0F 表示本帧为回应错误代码。错误码如下:

错误码

描述

01

功能码不存在

02

资源不存在

03

命令不支持

04

参数非法

05

操作无效

 

 

1.3.2 LX_CAN分段帧格式

LX_CAN命令/响应帧中,最多传送7字节数据,为了实现更多字节数据地传输,LX_CAN协议规范定义了分段传输协议。

 

1.LX_CAN分段帧格式

 

        “命令帧”格式:

优先级

源地址

目的地址

ACK=0

重复位

保留

分段码

0-7个数据

 

         “响应帧”格式:

优先级

源地址

目的地址

ACK=1

重复位

保留

分段码

0-7个数据

 

LX_CAN 协议使用 CAN 报文数据部分的第 字节用于指示分段传输,该字节的格式定义如下:

分段码

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Segpolo

SegNum

 

SegPolo 表示分段标志,SegNum 表示分段编号,SegPolo的位定义如下:

DD

含义

00

未分段

01

分段数据第一段

10

分段数据中间段

11

分段数据结尾段

 

采用分段传输时,第 1 分段的 SegFlag=0x40,最后的分段 SegFlag=0xC0 值。当报文分段传输时,接收节点(目标节点)只在接收完最后分段后才做出响应。

2.LX_CAN分段传输规则

在传送大于 7 个字节长度的数据时, 需要采用分段传输报文的方法。 当命令报文使用分段传输时,从站在接收完所有的分帧报文后才向主站回送响应报文。

你可能感兴趣的:(3.,嵌入式)