CAN总线

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的特性

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

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发现一旦发出的电平和收到的不同,就会停止发送)

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android CAN总线是指Android系统上运行的应用程序通过控制器区域网络(Controller Area Network,CAN)总线与外部设备进行通信的一种方式。CAN总线是一种串行通信协议,常用于汽车电子系统等领域。 在Android系统中,通过使用CAN总线,应用程序可以与各种支持CAN总线通信的外设进行数据交换。这些外设包括车载传感器、车载仪表盘、控制器、发动机控制单元、空调系统等。通过CAN总线,应用程序可以通过读取和发送CAN消息来监测和控制这些外设的状态和行为。 为了在Android系统中使用CAN总线,首先需要确保设备具有CAN控制器硬件支持。可以通过使用CAN总线接口卡或通过集成CAN控制器芯片来实现。然后,需要使用适当的驱动程序来与CAN控制器进行通信。 使用Android的CAN总线功能,应用程序可以实现诸如车辆诊断、车载娱乐系统控制、车速监测、油耗计算等各种功能。通过CAN总线,应用程序可以读取车辆传感器的数据,并根据需要发送控制指令给车辆各个系统。这为开发车联网和智能交通系统提供了便利和灵活性。 总之,Android CAN总线为Android应用程序与外部CAN总线设备之间的通信提供了一种标准化的解决方案。它为开发者提供了一种便捷的方式来实现与车辆电子系统的交互,并为车联网和智能交通系统的开发提供了技术支持。 ### 回答2: Android CAN总线是指在Android系统中使用控制器局域网络(Controller Area Network,CAN)总线技术进行通信的一种方式。CAN总线是一种高可靠性、实时性强的串行通信协议,主要用于汽车电子和工业控制领域。 Android作为一种流行的移动操作系统,通过支持CAN总线技术,可以实现与各种汽车电子设备和工业控制设备之间的通信。通过Android系统的CAN总线接口,可以实现对CAN总线的读取和写入操作。这使得开发者可以通过Android设备与车载控制单元进行通信,从而实现诸如车辆状态监控、故障诊断、远程控制等功能。 在Android应用程序开发中,可以使用CAN总线接口库来编写CAN通信相关的代码。通过CAN总线接口库,开发者可以实现CAN消息的发送和接收,以及监听CAN总线上的消息。开发者可以根据具体需求,编写相应的逻辑代码,对CAN总线上的消息进行解析和处理,并根据解析结果进行相应的操作。 在汽车电子领域,Android CAN总线的应用非常广泛。通过与车辆的CAN总线进行通信,可以获取诸如车速、油耗、转速、温度等数据。这些数据可以用于实时监控和驾驶辅助功能的开发。此外,通过CAN总线还可以实现对车辆的远程控制,如远程启动、远程解锁等。 总之,Android CAN总线技术的应用使得Android设备可以与CAN总线上的设备进行通信,极大地拓展了Android系统的应用领域。从汽车电子到工业控制,Android CAN总线为各种应用场景提供了便捷的通信方式,为开发者提供了更多的创新空间。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值