STM32 高级 物联网通信之CAN通讯

目录

CAN通讯介绍

物理层

协议层

CAN的帧(报文)种类

1 数据帧(发送单元->接受单元)

2 远程帧(接受单元->发送单元)

3 错误帧(发送方发送数据错误会发送的状态帧)

4 过载帧(接收方放不下会发送到的状态帧)

5 帧间隔(状态)

数据帧介绍

远程帧介绍

CAN总线仲裁

CAN的位时序

STM32的CAN外设

CAN外设(CAN控制器)介绍

CAN控制器的3种工作模式

CAN控制器的3种测试模式

功能框图

主动内核

发送邮箱

接收FIFO

接收滤波器(过滤器)

STM32中 CAN的位时序


CAN通讯介绍

参考:CAN协议|Kvaser中文官网免费CAN协议教程

CAN(Controller Area Network 控制器局域网,简称CAN或者CAN bus)是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。

它基于消息传递协议(给消息添加了类型),设计之初在车辆上复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。

CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。

物理层

CAN网络节点

一个CAN控制器:

  • 一般由MCU提供,STM32内部提供了一个CAN控制器

  • 一个CAN收发器:

  • 收发器一般需要专门芯片提供。这里采用PD1050收发器芯片

  • 控制器和收发器之间通过CAN_Tx及CAN_Rx信号线相连。

    收发器与CAN总线之间使用CAN_High及CAN_Low信号线相连。

  • 这两根线做一个差值来表示收发和发

  • 流程:

  • 发数据:。。。

  • 收数据:。。。

  • CAN总线网络

  • 闭环总线网络:遵循ISO 11898标准的高速短距离,最高传输距离40m,通讯速度最高为1Mbps,总线两端要求有一个120Ω的电阻。

  • 开环总线网络:遵循ISO11519-2标准的低速、远距离。最高传输距离1Km,通讯速度最高为125Kbps,两根总线串联两个2.2KΩ的电阻。

  • 差分信号:

  • 两根信号线:振幅相同,相位相反,然后进行相减,

  • 再电路板要求:差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。

  • 优点:抗干扰能力强。能有效抑制电磁干扰(EMI)

  • 缺点:差分信号一定要走两根等长、等宽、紧密靠近、且在同一层面的线。对电路板比较小,走线比较紧张的情况下,给布线带来挑战。差分信号线具有这些优点,在 USB 协议、485 协议、以太网协议及 CAN 协议的物理层中,都使用了差分信号传输。

  • 举例

  • 逻辑1(隐性电平)

  • CAN_High =CAN_Low = 2.5V

  • 电压差 VH-VL=0V

  • 逻辑 0 (显性电平)

  • CAN_High=3.5V,CAN_Low =1.5V

  • 电压差为 VH-VL=2V

  • 协议层

    CAN的帧(报文)种类

    CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点;所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。

    CAN使用短报文,最大实用负载是94位。报文中没有任何明确的地址;相反,可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址。

    CAN总线上有5种不同的报文类型(或“帧”):数据帧、远程帧、错误帧、过载帧和帧间隔。

    1 数据帧(发送单元->接受单元)

    数据帧是最常见的报文类型,用于发送单元向接收单元发送数据。

    2 远程帧(接受单元->发送单元)

    远程帧用于接收单元向具有相同id的发送单元请求发送数据。

    3 错误帧(发送方发送数据错误会发送的状态帧)

    错误帧当检测出错误时向其他单元通知错误的帧。

    4 过载帧(接收方放不下会发送到的状态帧)

    过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧。

    5 帧间隔(状态)

    用于将数据帧及遥控帧与前面的帧分离开来的帧

    其中错误帧、过载帧、帧间隔都是由硬件自动完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧与遥控帧。数据帧和遥控帧有标准格式与扩展格式。标准格式有11位标识符,扩展格式有29位标识符。

    数据帧介绍

    标准帧(11位消息准类)

  • 帧起始:Start Of Frame-SOF:

  • 1位,显性信号(逻辑0)。

  • 表示数据帧(或远程帧)的开始。

  • 只能在总线空闲的时候(检测到7位1表示空闲)才可以发送帧起始。

  • 仲裁段(Arbitration Field)包括两部分:

  • 标识符位(Identifier field-ID):11位

  • 远程发送请求位(Remote Transfer Request-RTR):1位,用于区分该帧是数据帧还是远程帧:显性信号(0)代表数据帧(Data Frame),隐性信号(1)代表远程帧(Remote Frame)

  • 控制段(Control Field):一共6位

  • IDE位(Identifier Extension):1位。区分标准格式与扩展格式。显性电平时表示标准格式。隐性电平时表示扩展格式。

  • DLC段(Data Length Code):4位。表示本报文中的数据段含有多少个字节。用于DLC段表示的数字为0~8。

  • R0位:1位。保留位,以后使用。

  • 数据段(DATA Field):数据帧的核心内容,它是节点要发送的原始信息。由 0~8个字节组成。高位先行。

  • CRC段(CRC Field):包含2部分

  • CRC校验码:15 bits,用于校验传输是否正确。

  • 界定符:隐性位,表示校验码的结束。

  • ACK段(ACK Field):包含2部分

  • ACK确认位:发送端的ACK确认位是隐性位,接收端收到正确的CRC校验位后,把这一位置为显性位(相当于一个插槽)

  • 界定符:1位隐性位,用于与后面的帧结束隔开。

  • EOF段( End Of Frame )

  • 帧结束,帧结束段由发送节点发送的 7 个隐性位表示结束

  • 扩展帧(29位2的29次方=512M信息准类)

    远程帧介绍

    远程帧与数据帧相比没有数据段。

    CAN总线仲裁

    CAN总线处于空闲状态的时候,最先发送消息的单元获得发送权。

    多个单元同时开始发送时,从仲裁段(报文id)的第一位开始进行仲裁。连续输出显性电平最多的单元可以继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收。(即报文id小的优先级高)。

    竞争失败,会自动检测总线空闲,在第一时间再次尝试发送。

    CAN的位时序

    位同步:CAN中提出了位同步的方式来确保通讯时序。

  • 一帧中包含了很多个位。

  • CAN把每1位分为4段(从时间角度划分)

  • 同步段(SS:Synchronization Segment)

  • 传播时间段(PTS:Propagation Time Segment)

  • 相位缓冲段 1(PBS1:Phase Buffer Segment 1)

  • 相位缓冲段 2(PBS2:Phase Buffer Segment 2)

  • 4段的总时间段构成了位时间(Bit Time),就是传输一个位所需的总时间。

  • 位时间通常被分为若干等长的时间单元,称为时间量化器(Time Quanta, Tq)。

  • 一个Tq的长度可以根据传输速率的需要设置。

  • 在STM32的CAN外设中,通过设置波特率分频器的值来确定Tq的大小。

  • 同步段(SS:Synchronization Segment):做同步的,

  • SS 段的大小固定为 1Tq。

  • 若通讯节点检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的

  • 传播时间段(PTS:Propagation Time Segment):解决如果没有同步,照样捕捉,会提示后面进行处理。

  • 传播时间段(PTS:Propagation Time Segment)

  • 比如发送单元的发送延迟、总线上信号的传播延迟、接收单元的输入延迟等。

  • PTS段就是用来补偿这些因素产生的时间延迟。

  • PTS段长度至少为1个Tq。一般1-8Tq。

  • 相位缓冲段 1(PBS1:Phase Buffer Segment 1),也就是延长取样。

  • 主要用来补偿边沿阶段的误差。

  • 它的时间长度在重新同步阶段的时候可以被自动加长。

  • PBS1段的初始大小可以为1~8Tq。

  • 相位缓冲段 2(PBS2:Phase Buffer Segment 2),下一位的同步段会提前。

  • 另一个相位缓冲段,也是用来补偿边沿阶段误差的

  • 它的时间长度在重新同步阶段时可以缩短

  • PBS2 段的初始大小可以为 2~8Tq。

  • 采样点:采样点位于PBS1和PBS2的交界处。

    数据同步:根据同步方式差异,CAN 的数据同步分为硬同步和再同步。

  • 硬同步:当一个节点检测到起始位时,它会执行硬同步,以便将其内部的时间基准与数据帧的时间基准对齐。在硬同步过程中,控制器的时间基准会立即调整为与检测到的边沿对齐。

  • 再同步:在检测到总线上的时序与节点使用的时序有相位差时(即总线上的跳变沿不在节点时序的 SS 段范围)通过延长 PBS1 段或缩短 PBS2 段,来获得同步。

  • 所有的同步都是由CAN控制器硬件自动完成的。

  • CAN的波特率:各个通讯节点约定好1个Tq 的时间长度以及每一位占据多少个 Tq,就可以确定CAN通讯的波特率。

    位填充:发送方再发送过程时,若持续0或1时,发送方会在固定位填充一个跳变沿。

    STM32的CAN外设

    CAN外设(CAN控制器)介绍

    STM32的芯片中具有bxCAN控制器(Basic Extended CAN),它支持CAN协议2.0A 和2.0B Active标准。(CAN2.0A只能处理标准数据帧且扩展帧的内容会识别错误。而CAN2.0 B Active可以处理标准数据帧和扩展数据帧。CAN2.0 B Passive只能处理标准数据帧而扩展帧的内容会被忽略)。

    该CAN控制器支持最高的通讯速率为1Mb/s;

    可以自动地接收和发送CAN报文,支持使用标准ID和扩展ID的报文;

    外设中具有3个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间;

    具有2个3级深度的接收FIFO(先进先出的队列),可使用过滤功能只接收或不接收某些ID号的报文;

    可配置成自动重发;不支持使用DMA进行数据收发。

    CAN控制器的3种工作模式

    CAN控制器有3种工作模式:初始化模式、正常模式、睡眠模式。

    上电复位后CAN控制器默认会进入睡眠模式,作用是降低功耗。当需要将进行初始的时候(配置寄存器),会进入初始化模式。当需要通讯的时候,就进入正常模式。

    CAN控制器的3种测试模式

    CAN控制器有3种测试模式静默模式、环回模式、环回静默模式。当控制器进入初始化模式的时候才可以配置测试模式。

    静默模式(只收不发)可以用于检测总线的数据流量。

    环回模式(对外只发不收,且自发自收)可以用于自检(影响总线)。

    环回静默模式(对外不发不收,且自发自收)也是用于自检,不会影响到总线。

    功能框图

    主动内核

    含各种控制/状态/配置寄存器,可以配置模式、波特率等。在STM32CubeMx中可以非常方便的配置。

    发送邮箱

    用来缓存待发送的报文,最多可以缓存3个报文。发送调度决定报文的发送顺序。

    接收FIFO

    共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。

    接收滤波器(过滤器)

    作用:对接到的报文进行过滤,最后放入FIFO 0或FIFO 1。

    当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。

    有2种过滤模式:

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

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

    如果使能了过滤器,且报文的ID与所有过滤器的配置都不匹配,CAN外设会丢弃该报文,不存入接收FIFO。

    每个CAN提供了14个位宽可变的、可配置的过滤器组(13~0)。每个过滤器组x由2个32位寄存器,CAN_FxR1和 CAN_FxR2组成。

    STM32中 CAN的位时序

    stm32中的位时序,将传播时间段和相位缓冲段1做了合并。

    作者:雁过留声花欲落

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 高级 物联网通信之CAN通讯

    发表回复