CAN总线学习笔记 | CAN基础知识介绍

这篇具有很好参考价值的文章主要介绍了CAN总线学习笔记 | CAN基础知识介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、CAN协议

1.1 CAN协议简介

CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下:
CAN总线学习笔记 | CAN基础知识介绍

1.2 CAN物理层

CAN 通讯不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯

CAN 物理层的形式主要有两种

  • 遵循 ISO11898 标准的高速、短距离闭环网络,总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个120欧的电阻
  • 是遵循 ISO11519-2 标准的低速、远距离开环网络,最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻

CAN总线学习笔记 | CAN基础知识介绍
以TJA1050芯片作为CAN收发器的电路原理图如下图示
CAN总线学习笔记 | CAN基础知识介绍
差分信号又称差模信号,差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑 0 和逻辑 1,CAN中显性电平(差值为正)对应逻辑 0,隐性电平(差值小于或等于0)对应逻辑 1,显性电平比隐性电平更强
CAN总线学习笔记 | CAN基础知识介绍

1.3 CAN协议层

CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,CAN 使用位同步的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常

  • 位时序分解:为了实现位同步,CAN 协议把每一个数据位的时序分解成 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是 Tq,一个完整的位由 8~25 个 Tq 组成

CAN总线学习笔记 | CAN基础知识介绍

段名称 作用 Tq数
SS 段 (SYNC SEG) 同步段,若通讯节点检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的 1Tq
PTS 段 (PROP SEG) 传播时间段,用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍 1~8Tq
PBS1 段 (PHASE SEG1) 相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长 1~8Tq
PBS2 段 (PHASE SEG2) 另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短 2~8Tq
  • 波特率:总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以确定 CAN 通讯的波特率。

例如,假设上图中的 1Tq=1us,而每个数据位由 19 个 Tq 组成,则传输一位数据需要时间 T1bit=19us,从而每秒可以传输的数据位个数为:1x10次方/19 = 52631.6 (bps)。这个每秒可传输的数据位的个数即为通讯中的波特率。

  • 同步过程:波特率只是约定了每个数据位的长度,数据同步还涉及到相位的细节,此时就要用到数据位内的 SS、PTS、PBS1 及 PBS2 段了。根据对段的应用方式差异, CAN 的数据同步分为硬同步和重新同步。其中硬同步只是当存在帧起始信号时起作用,无法确保后续一连串的位时序都是同步的,而重新同步方式可解决该问题

硬同步:CAN节点通过总线发送数据时,会发送一个帧起始信号。而挂载到CAN总线上的节点在不发送数据时,会时刻检测总线上的信号。如下图,当总线出现帧起始信号时,节点检测到总线的帧起始信号不在节点内部时序的 SS 段范围,所以判断它自己的内部时序与总线不同步,因而这个状态的采样点采集得的数据是不正确的。所以节点以硬同步的方式调整,把自己的位时序中的 SS 段平移至总线出现下降沿的部分,获得同步,同步后采样点就可以采集得正确数据了

CAN总线学习笔记 | CAN基础知识介绍

重新同步:前面的硬同步只是当存在帧起始信号时才起作用,如果在一帧很长的数据内,节点信号与总线信号相位有偏移时,这种同步方式就无能为力了。因而引入重新同步方式,它利用普通数据位的高至低电平的跳变沿来同步。与硬同步方式相似的是它们都使用 SS 段来进行检测,同步的目的都是使节点内的 SS 段把跳变沿包含起来。重新同步分为超前和滞后两种情况,以总线跳变沿与 SS 段的相对位置进行区分。

  • 相位超前:节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前 2Tq,这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度,使得节点与总线时序重新同步。
  • 相位滞后:节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后 2Tq,这时控制器在前一个位时序中的 PBS2 段减少 2Tq 的时间长度,获得同步。

CAN总线学习笔记 | CAN基础知识介绍
CAN总线学习笔记 | CAN基础知识介绍

  • 报文种类及结构:对数据、操作命令 (如读/写) 以及同步信号进行打包,打包后的这些内容称为报文。CAN 一共规定了 5 种类型的帧

CAN总线学习笔记 | CAN基础知识介绍

数据帧的结构:数据帧是在 CAN 通讯中最主要、最复杂的报文,它的结构如下图

CAN总线学习笔记 | CAN基础知识介绍

段名称 作用 备注
帧起始 SOF,用于通知各个节点将有数据传输 1 个数据位(显性电平)
仲裁段 决定数据帧发送的优先级,也决定其它节点是否会接收这个数据帧。标准格式11位,扩展格式29位 RTR位标识是否远程帧(0 数据帧;1 远程帧),IDE位为标识符选择位(0 标准标识符;1 扩展标识符),SRR位为代替远程请求位(隐性位),代替了标准帧中的RTR位
控制段 表示数据段的字节数,由6个位构成 标准帧和扩展帧有所不同,r1和r0为保留位,默认为显性位; DLC为数据长度码,由4位组成,表示本报文中的数据段含有多少个字节
数据段 节点要发送的原始信息 由 0~8 个字节组成,从最高位(MSB)开始输出
CRC 段 用于检查帧传输错误 由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)组成
ACK 段 用来确认是否正常接收 由ACK槽(ACK Slot)和ACK界定符2个位组成
帧结束 EOF,由发送节点发送的 7 个隐性位表示结束 7 个数据位(隐性电平)

其他报文结构

CAN总线学习笔记 | CAN基础知识介绍

二、CAN控制器

STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN),它支持 CAN 协议 2.0A 和 2.0B 标准。该 CAN 控制器支持最高的通讯速率为 1Mb/s;可以自动地接收和发送 CAN 报文,支持使用标准ID和扩展ID的报文;外设中有 3 个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间;有 2 个 3 级深度的接收 FIFO,可使用过滤功能只接收或不接收某些 ID 号的报文;可配置成自动重发;不支持使用 DMA 进行数据收发。框架示意图如下:

CAN总线学习笔记 | CAN基础知识介绍

STM32 有两组 CAN 控制器,其中 CAN1 是主设备,框图中的“存储访问控制器”是由 CAN1控制的,CAN2 无法直接访问存储区域,所以使用 CAN2 的时候必须使能 CAN1 外设的时钟。框图中主要包含 CAN 控制内核、发送邮箱、接收 FIFO 以及验收筛选器,下面对框图中的各个部分进行介绍。

2.1 CAN控制内核
  • 主控寄存器 CAN_MCR:负责管理 CAN 的工作模式

CAN总线学习笔记 | CAN基础知识介绍

INRQ位:用来控制初始化请求,在CAN初始化时,先设置该位为1,进行初始化,之后再设置该位为0,让CAN进入正常工作模式

  • 位时序寄存器 CAN_BTR:用于配置测试模式、波特率以及各种位内的段参数

CAN总线学习笔记 | CAN基础知识介绍

位名称 作用 备注
SILM 静默模式 0:正常工作 1:静默模式
LBKM 环回模式 0:禁止环回模式 1:使能环回模式
SJW 再同步跳转宽度 再同步时最多可将位加长或缩短的时间片数目
TS2 时间段2 相当于 PBS2
TS1 时间段1 相当于 PTS + PBS1
BRP 波特率预分频器 用于配置单个时间片的长度 Tq

CAN波特率的计算公式:只需要知道BS1和BS2的设置,以及APB1的时钟频率,就可以方便的计算出波特率。比如设置TS1=9、TS2=5和BRP=6,在APB1频率为45Mhz的条件下,即可得到CAN通信的波特率=45000/6/(5+9+1)=500Kbps
CAN总线学习笔记 | CAN基础知识介绍

2.2 CAN发送邮箱

CAN 共有 3 个发送邮箱,即最多可以缓存 3 个待发送的报文。每个发送邮箱中包含有标识符寄存器 CAN_TIxR、数据长度控制寄存器 CAN_TDTxR 及 2 个数据寄存器 CAN_TDLxR、CAN_TDHxR,如下图

CAN总线学习笔记 | CAN基础知识介绍
当使用 CAN 外设发送报文时,需要把报文的各个段分解,按位置写入到这些寄存器中,并对标识符寄存器 CAN_TIxR 中的发送请求寄存器位 TMIDxR_TXRQ 置 1,即可把数据发送出去。其中标识符寄存器 CAN_TIxR 中的 STDID 寄存器位比较特别。我们知道 CAN 的标准标识符的总位数为 11 位,而扩展标识符的总位数为 29 位的。当报文使用扩展标识符的时候,标识符寄存器 CAN_TIxR 中的 STDID[10:0] 等效于 EXTID[18:28] 位,它与 EXTID[17:0] 共同组成完整的 29位扩展标识符。

  • 发送邮箱标识符寄存器 CAN_TIxR

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
STID[10:0]/EXID[28:18] 标准标识符或扩展标识符的 MSB
EXID[17:0] 扩展标识符的 LSB
IDE 定义邮箱中消息的标识符类型
RTR 远程发送请求 (Remote transmission request)
TXRQ 发送邮箱请求
  • 发送邮箱数据长度和时间戳寄存器 CAN_TDTxR

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
TIME[15:0] 消息时间戳,包含在进行 SOF 发送时所捕获的 16 位定时器值
TGT 发送全局时间,只有硬件处于时间触发通信模式时,此位才会激活
DLC[3:0] 定义数据帧或遥控帧请求中的数据字节数
  • 发送邮箱低字节数据寄存器 CAN_TDLxR

CAN总线学习笔记 | CAN基础知识介绍

  • 发送邮箱高字节数据寄存器 CAN_TDHxR

CAN总线学习笔记 | CAN基础知识介绍

2.3 CAN接收FIFO

CAN 共有 2 个接收 FIFO,每个 FIFO 中有 3 个邮箱,即最多可以缓存 6 个接收到的报文。当接收到报文时,FIFO 的报文计数器会自增,而 STM32 内部读取 FIFO 数据之后,报文计数器会自减,通过状态寄存器可获知报文计数器的值,而通过前面主控制寄存器的 RFLM 位,可设置锁定模式,锁定模式下 FIFO溢出时会丢弃新报文,非锁定模式下 FIFO 溢出时新报文会覆盖旧报文。跟发送邮箱类似,每个接收 FIFO 中包含有标识符寄存器 CAN_RIxR、数据长度控制寄存器CAN_RDTxR 及 2 个数据寄存器 CAN_RDLxR、CAN_RDHxR,它们的功能见下表

CAN总线学习笔记 | CAN基础知识介绍
通过中断或状态寄存器知道接收 FIFO 有数据后,我们再读取这些寄存器的值即可把接收到的报文加载到 STM32 的内存中

  • 接收FIFO邮箱标识符寄存器 CAN_RIxR

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
STID[10:0]/EXID[28:18] 标准标识符或扩展标识符的 MSB
EXID[17:0] 扩展标识符的 LSB
IDE 定义邮箱中消息的标识符类型
RTR 远程发送请求 (Remote transmission request)
  • 接收FIFO邮箱数据长度和时间戳寄存器 CAN_RDTxR

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
TIME[15:0] 消息时间戳,包含在进行 SOF 发送时所捕获的 16 位定时器值
FMI[7:0] 筛选器匹配索引
DLC[3:0] 定义数据帧所包含的数据字节数,远程帧为0
  • 接收FIFO邮箱低字节数据寄存器 CAN_RDLxR

CAN总线学习笔记 | CAN基础知识介绍

  • 接收FIFO邮箱高字节数据寄存器 CAN_RDHxR

CAN总线学习笔记 | CAN基础知识介绍

2.4 CAN验收筛选器

CAN 验收筛选器,共有 28 个筛选器组,每个筛选器组有 2 个寄存器,CAN1 和 CAN2 共用筛选器。CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作,STM32 的 CAN 外设接收报文前会先使用验收筛选器检查,只接收需要的报文到 FIFO中。筛选器工作的时候,可以调整筛选 ID 的长度及过滤模式。

根据筛选 ID 长度来分类有有以下两种:

  • 检查 STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位,共 31 位

  • 检查 STDID[10:0]、RTR、IDE 和 EXTID[17:15],共 16 位

根据过滤的方法分为以下两种模式:

  • 标识符列表模式,它把要接收报文的 ID 列成一个表,要求报文 ID 与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。

  • 掩码模式,它把可接收报文 ID 的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码 (关键字) 相同,就符合要求,报文就会被保存到接收 FIFO。

通过配置筛选模式寄存器 CAN_FM1R 的 FBMx 位可以设置筛选器工作在哪个模式。通过配置筛选尺度寄存器 CAN_FS1R 的 FSCx 位可以设置筛选器工作在哪个尺度。不同的尺度和不同的过滤方法可使筛选器工作在图 的 4 种状态。

CAN总线学习笔记 | CAN基础知识介绍
每组筛选器包含 2 个 32 位的寄存器,分别为 CAN_FxR1 和 CAN_FxR2,它们用来存储要筛选的ID 或掩码,各个寄存器位代表的意义与图中两个寄存器下面“映射”的一栏一致,各个模式的说明见表

CAN总线学习笔记 | CAN基础知识介绍

例如下面的表格所示,在掩码模式时,第一个寄存器存储要筛选的 ID,第二个寄存器存储掩码,掩码为 1 的部分表示该位必须与 ID 中的内容一致,筛选的结果为表中第三行的 ID 值,它是一组包含多个的 ID 值,其中 x 表示该位可以为 1 可以为 0。

CAN总线学习笔记 | CAN基础知识介绍

而工作在标识符模式时,2 个寄存器存储的都是要筛选的 ID,它只包含 2 个要筛选的 ID 值 (32位模式时)。如果使能了筛选器,且报文的 ID 与所有筛选器的配置都不匹配,CAN 外设会丢弃该报文,不存入接收 FIFO。

  • 过滤器模式寄存器 CAN_FM1R

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
FBMx 0:筛选器存储区 x 的两个 32 位寄存器处于标识符屏蔽模式。1:筛选器存储区 x 的两个 32 位寄存器处于标识符列表模式。
  • 过滤器尺度寄存器 CAN_FS1R

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
FSCx 0:双 16 位尺度配置;1:单 32 位尺度配置
  • 过滤器FIFO分配寄存器 CAN_FFA1R

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
FFAx 筛选器 x 的筛选器 FIFO 分配,通过此筛选器的消息将存储在指定的 FIFO 中
  • 过滤器激活寄存器 CAN_FA1R

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
ACTx 筛选器激活,软件将此位置 1 可激活筛选器 x
  • 过滤器组i的寄存器x CAN_FiRx

CAN总线学习笔记 | CAN基础知识介绍

名称 作用
FB[31:0] 筛选器位

介绍完了CAN的基础知识,将在后续文章中介绍STM32芯片的CAN通信实例文章来源地址https://www.toymoban.com/news/detail-407239.html

到了这里,关于CAN总线学习笔记 | CAN基础知识介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IPV6网络协议基础知识 IPV6地址和IPV6报文格式详细介绍

    由于互联网的快速发展与普及,原有的IPV4地址已不能满足网络用户的需求,虽然NAT可以缓解IPV4地址的耗尽,但NAT破坏了网络环境的开放、透明以及端到端的特性,因此IPV6地址协议应运而生。IPV6协议使用128位地址替代32位的IPV4地址,这样大约可以产生340万亿亿亿亿(3.4*1038)个

    2024年02月08日
    浏览(63)
  • 深度学习基础知识笔记

    怎么样提特征 (1)无人驾驶, 计算机视觉 (2)人脸识别 移动端-计算量太大,速度慢,卡。 参数:成千上百万的。 (3)医学 (4)变脸 (5)图像自动上色 有监督的问题, 1 分类: 挑战:照射角度,形状改变,部分遮挡,背景混入 套路:收集数据给定标签,训练分类器

    2024年02月13日
    浏览(61)
  • (学习笔记)TCP基础知识

    TCP 是 面向连接的、可靠的、基于字节流 的传输层通信协议。 面向连接:一定是[一对一]才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的; 可靠的:无论网络链路中出现了怎样的链路变化,TCP都可以保证一个报文一定能够到达接收

    2024年02月16日
    浏览(56)
  • 【TypeScript】基础知识学习笔记

    TypeScript的特点: JavaScript的超集,满足所有的JS语法 含有面向对象的静态类型 起步安装:1、npm i typescript -g 2、tsc 文件名 一、TS的基本数据类型 基本数据类型:number、boolean、string、undefined、null、symbol、bigint、void 当中的类型有大小写的区分:大写的类型是给对象使用,小写

    2024年02月09日
    浏览(54)
  • 模电基础知识学习笔记

    文章目录: 一:基本元器件介绍  1.二极管 1.1 普通二极管特性测试  1.2 稳压二极管测试 1.3 整流二极管 1.4 开关二极管 2.电容 3.三极管(电流控制) 3.1 介绍  3.2 类型(PNP、NPN)  3.3 三种工作状态:放大状态、截止状态、饱和状态 4.场效应管(电压控制) 4.1 介绍  4.2 类型(耗尽

    2024年02月15日
    浏览(66)
  • Zookeeper学习笔记(1)—— 基础知识

    Zookeeper 是一个开源的分布式的, 为分布式框架提供协调服务 的 Apache 项目 Zookeeper从设计模式角度来理解:是一个基于 观察者模式 设计的 分布式服务管理框架 ,它 负责存储和管理大家都关心的数据 ,然后 接受观察者的注 册 ,一旦这些数据的状态发生变化,Zookeeper就 将负

    2024年02月05日
    浏览(36)
  • golang学习笔记(defer基础知识)

    defer语句用于golang程序中延迟函数的调用, 每次defer都会把一个函数压入栈中, 函数返回前再把延迟的函数取出并执行。 为了方便描述, 我们把创建defer的函数称为主函数, defer语句后面的函数称为延迟函数。延迟函数可能有输入参数, 这些参数可能来源于定义defer的函数,

    2024年04月25日
    浏览(46)
  • (学习笔记-IP)IP基础知识

    IP在TCP/IP参考模型中处于第三层,也就是 网络层。 网络层的主要作用是: 实现主机与主机之间的通信,也叫点对点的通信。  网络层与数据链路层的关系: MAC的作用是实现 直连 的两个设备之间通信,而IP负责 没有直连 的两个网络之间进行通信传输  因此 计算机网络中需要

    2024年02月16日
    浏览(49)
  • Android ContentProvider基础知识学习笔记

    1、动态申请权限 2、读取手机联系人 3、创建自己的ContentProvider (1) onCreate()。初始化ContentProvider的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回true表示ContentProvider初始化成功,返回false则表示失败。 (2) query()。从ContentProvider中查询数据。uri参数用于确定查

    2024年04月10日
    浏览(43)
  • HTTP基础:学习HTTP协议的基本知识,了解请求和响应的过程

    HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,它是Web中最基本的协议。 HTTP请求和响应都是由客户端和服务器之间进行的。 一个完整的HTTP请求由以下几个部分组成: 请求行:包括请求方法(GET、POST等)、请求的URI和HTTP协

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包