CAN协议类比modbus学习法

can简介

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在北美和西欧,CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。

CAN协议经过ISO标准化后有两个标准ISO11898标准和IS011519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准(闭环),而IS011519-2是针对通信速率为125Kbps以下的低速通信标准(开环)。

注意:

Kbps:总线的通信速率,指的是位速率。或称为比特率(和波特率不是一回事),表示的是:单位时间内,通信线路上传输的二进制位的数量,其基本单位是 bps 或者 b/s (bit per second)。

CAN的组成一般有两种方式:

                1:CPU与CAN控制器集成到一起、再外接CAN收发器;

                2:另一种是CPU与CAN控制器分开的,使用的时候需要配置CAN接口电路,比较麻烦。

        STM32和DSP中就是采用第一种方式,将CAN接口集成在芯片内,使用的时候再外接CAN收发器(顾名思义,可发送,可接收),常用的有TJA1050或者82C250。

CAN收发器是用于TTL电平与差分电压信号相互转换的,TTL电平即单片机引脚直接提供的电平,逻辑0代表低电平,逻辑1代表高电平;而差分电压信号则为固定的电压值。 

CAN只用到了协议七层模型中的物理层、链路层、传输层。

物理层

CAN是一种两线制总线,CAN_High、CAN_Low。

按照定义:

  • CAN_High - CAN_Low < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1",即高电平。

  • CAN_High - CAN_Low > 0.9V 时候为显性的,逻辑信号表现为"逻辑0",即低电平。

CAN数据格式

1.数据帧:用于发送节点向接收节点传送数据的帧(类似modbus的主向从发送数据)。

 2.远程帧:用于接收节点向具有相同ID的发送节点传送数据的帧(数据请求,我需要ID为XX的数据,请持有该数据的节点发送给我(似于modbus的主站请求数据))。

 3.错误帧:用于当检测出错误时向其他节点通知错误的帧。

 4.过载帧:用于接收节点通知其尚未做好准备的帧。

 5.帧间隔:用于将数据帧及远程帧与前面的帧分隔开来。

标准帧和扩展帧

数据帧和远程帧都可以使用标准帧格式或者扩展帧格式

数据帧是在 CAN 通讯中最主要、最复杂的报文,它以一个显性位(逻辑 0)开始,以 7 个连续的隐性位(逻辑 1)结束。在它们之间,分为仲裁段、控制段、数据段、CRC 段和 ACK 段。

以扩展数据帧为例:

        SOF:帧开始,由1个0显性位开始

        标识符(仲裁段Identify(ID)):本数据帧的 ID 信息, ID 信息的作用:① 如果同时有多个节点发送数据时,作为优先级依据(仲裁机制);② 目标节点通过 ID 信息来接受数据(验收滤波技术)

        RTR:远程发送请求位,数据帧为0显性,程帧为1隐性

        SRR:代替远程请求位(在扩展格式中在RTR位置,所以得此名),该位为隐性位。在这个地方占个位以保持标准帧和扩展帧IDE对齐,便可以判断标准帧优先于扩展帧。

        IDE:标识符扩展位,标准帧为0显性,扩展帧为1隐性

        R0、R1:保留位。

        DLC:数据长度位。(由 4 位组成,MSB 先行(高位先行),它的二进制编码用于表示本报文中的数据段含有多少个字节,DLC 段表示的数字为0到8,若接收方接收到 9~15 的时候并不认为是错误)

        CRC:校验位。

        CRC分隔符:隐性位

        ACK:应答位和应答界定位。在应答域中,发送器发出两个隐性位。接收器接收到报文后,在应答位期间,用显性位填充应答位作为回应,应答界定则为保持隐性。

        EOF:帧结束,由7个1隐性位组成。 

对于一帧报文,我们只需要关心仲裁段(帧ID和远程帧还是数据帧RTR),控制段(标准还是扩展帧IDE和数据段长度DLC(4位)),数据段(传输的数据data(64位))。除了这三个其他的不用管了,都是固定流程自动生成。以上位机说明需要设置的内容如下:

1.1.1、数据帧

        SOF帧起始:数据帧开始的段。

        仲裁场:该帧优先级的段。

        控制场:数据的字节数以及保留位。

        数据场:数据内容。

        CRC场:校验数据。

        应答场:确认正常接收的段。

        帧结尾:数据帧结束的段。

仲裁机制

运用到线与机制和回读机制

对各个消息的标识符(即ID号)进行逐位仲裁(比较),如果某个节点发送的消息仲裁获胜,那么这个节点将获取总线的发送权,仲裁失败的节点则立即停止发送并转变为监听(接收)状态。

显性的优先级高于隐性,即仲裁比较的就是哪个ID中的0多。

报文在发送的过程是广播的形式,所有节点都会监听总线上的ID,只有监听到自己的ID时才会回复。

CAN的名词解释

  • CAN ID(Identifier):如前面所解释,CAN ID主要用于标识总线上的不同消息帧。它不是直接代表设备地址,而是用来区分不同的消息类型、优先级和目标接收者。所有连接到CAN总线的节点都会监听总线上的所有ID,但仅处理与其配置接收ID匹配的消息。因此,ID更多地关联于消息的类型和优先级,而非特定设备的位置。
  • 2. CAN邮箱(Mailbox):这是CAN控制器内部的一个数据结构,用于存储待发送或已接收的CAN消息帧。每个邮箱可以配置一个或多个ID滤波器,用于决定哪些消息应该被接收或发送。邮箱不是设备地址;它是硬件或软件资源,帮助管理通信过程中的消息。在硬件层面上,邮箱数量有限,每个邮箱可以被看作是一个临时存储和处理消息的槽位,与实际的设备地址或身份无关。
  • 总结来说,CAN ID用于在总线上区分不同的消息,而CAN邮箱是控制器用来暂存这些消息的内部结构。两者都不直接等同于设备地址,但共同参与了消息的收发与管理过程。在CAN通信中,设备地址的概念通常隐含在对特定ID的响应和处理逻辑中,而非直接由邮箱或ID单独定义。
  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jarrett_Zheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值