CAN总线

您所在的位置:网站首页 can功能是什么意思啊 CAN总线

CAN总线

2024-07-17 05:15| 来源: 网络整理| 查看: 265

CAN总线与其他总线的关系

在这里插入图片描述

CAN协议的差分信号

在这里插入图片描述 在这里插入图片描述 CAN协议通过调节PBS1段 和 PBS2段来抵抗干扰

SS段(SYNC SEG)

用作同步,一般为1Tq长,若跳边沿处在SS段内,则认为通讯是同步的。若跳边沿落在第二个Tq时,与设备认为的时序不同,所以将采样点后移一个Tq

PTS段(PROP SEG)

传播时间段,用来补偿网络的物理网络延迟时间,一般为1-8Tq,用来控制采样点

PBS1段(PHASE SEG1)

相位缓冲段,用来补偿边沿阶段的误差,大小为1-8Tq

PBS2段(PHASE SEG2)

另一个相位缓冲段,功能和PBS1相同 在这里插入图片描述

SyncJumpWidth

定义了在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元

CAN的波特率

关于CAN的波特率,比如需求为波特率500K,意思是每秒500K的数据位,而一个数据位由多个Tq组成, 在这里插入图片描述 在这里插入图片描述 所以要实现10MHz的那个需求,首先一个数据位是20个Tq,一个Tq的长度等于 1/10M,所以当时钟为10MHz,数据位长度为20Tq,所以波特率为 10MHz / 20 = 500K

CAN的特性 使用双线差分信号(CAN_H,CAN_L)发送数据采用广播的方式,所有节点都能收到数据,每个节点根据自己的能力选择是否进行数据处理多主站(各个节点平等),优先权由报文ID决定报文通过网络中唯一的标识符识别 CAN的报文

数据的前面加上 传输起始标签,片选标签,控制标签 数据的尾段加上CRC校验标签,应答标签,传输结束标签 在这里插入图片描述

数据帧的结构

在这里插入图片描述 帧开始 SOF(Start of Frame) 只有一个数据位,为显性电平,用来通知各个节点有数据传输,各个节点通过SOF来进行硬同步

仲裁段 11位或者29位(拓展ID) 存放本数据帧的标识符(ID信息) ID号越小优先级越高(由线与特点实现),两个节点同时发送信号时,若有一方先发出隐形电平时,就会失去总线控制的功能 各个节点也根据ID来过滤自己需要的数据

RTR位 用来区分数据帧 和 遥控帧,数据帧时RTR为显性电平(0),遥控帧为隐形电平(1)

IDE位 1为扩展数据帧,拓展数据帧并没有增加数据的长度,只是增加了ID的长度 0为标准帧

SRR位 只存在于拓展数据帧,用来代替标准格式中的RTR位,拓展帧中,真正的RTR在后面,标准帧的优先级比拓展帧的优先级高

控制段 r1 r0 控制段中的r1 和 r0位保留位,默认设置成显性位

DLC段 长度为4bit,1单位表示1个byte,表示本报文的数据段含有多少个字节,一共是0~8。比如值为0100的话,表示本报文有4bytes。

数据段 高位先行(MSB)

CRC段 存储校验和

ACK段 接收方来响应是否接收成功

CAN CONTROLLER

ABOM自动离线管理 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

CAN发送邮箱

用来缓存发送的报文

CAN FIFO

用来接收数据

CAN 的筛选器Filter

在这里插入图片描述 可以分成两种模式,一种为白名单模式,另一种为MASK模式

白名单模式

标识符和白名单对上才接收报文(存进FIFO),可以调整筛选ID的长度和过滤模式

MASK模式

相当于关键字搜索

在这里插入图片描述

CAN-FD

以下为CAN-FD的数据帧格式,新增了EDL、BRS、ESI位 在这里插入图片描述

EDL位:(Extended Data Length)原CAN数据帧中的保留位r, 该位功能为: 隐性: 表示CAN FD 报文 (采用新的DLC编码和CRC算法) 显性: 表示CAN报文

BRS位:( Bit Rate Switch)该位功能为: 隐性:表示转换可变速率 显性:表示不转换速率

ESI(Error State Indicator),该位的功能为: 隐性:表示发送节点处于被动错误状态(Error Passive) 显性:表示发送节点处于主动错误状态(Error Active)

EDL位可以表示CAN报文还是CAN FD报文;BRS表示位速率转换,该位为隐性位时,从BRS位到CRC界定符使用转换速率传输,其他位场使用标准位速率,该位为显性时,以正常的CANFD总线速率传输;通过添加ESI位,可以非常方便的知道当前发送节点所处的状态。

DLC编码

在这里插入图片描述 CAN-FD支持的数据场长度为0-64字节,当数据场长度在0-8字节,编码呈线性长度,当长度为12-64字节,使用非线性编码

CAN是否支持FD

首先要看controller(数据链路层)是否支持,然后要看transciver(物理层)是否支持1M以上的速率,两个支持才是FD。

CAN调试

首先注意时钟分频,是不是分成了标准的波特率

1. 硬件问题:

a. 注意终端电阻的模式,62欧为终端模式,1.5K为非终端模式

2. 软件问题

a. 在程序初始化结束之前,不要进入full communication状态,即controller要在stop状态,否则初始化中断后,还没初始化结束,就被can的中断打断,导致系统出错,即在第一个任务设置成full communication的状态。 b. 若OE显示没有收到来自板子的ACK信号,可能是波特率和电平的问题,但是OE显示有ACK(信号发送正常),则要考虑是不是被过滤掉了,被过滤会导致没有中断 c. 注意PORT是否设置正确,若设置错误,会导致引脚没有输出

CAN_BUSY

如何判断总线忙碌,成功发出数据却收不到ACK信号(成功发出数据意味着CAN_H & CAN_L 可以正常拉高拉低) 在这里插入图片描述 上图为CAN_TX的电平

在这里插入图片描述 上图为CAN_RX的电平

CAN_BUS_OFF

比如CAN_H,CAN_L短接了,发出信号时,无法改变CAN_H或者CAN_L的信号(比如一直为3.3V),就被视为BUS_OFF,同时controller到transceiver的 CAN_RX无法收到CAN_TX上同样的信号(回读失败) 在这里插入图片描述 上图为CAN_TX的电平

在这里插入图片描述 上图为CAN_RX的电平 每次TX发出的信号,RX都会回读(发回给controller,作为校验机制,要是controller发现一旦发出的电平和收到的不同,就会停止发送)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3