1.1CAN简介
CAN芯片是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
1.2 CAN 物理层
CAN与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。我们来看一个示意图
1.3电气参数
a)参考通信距离及传输速度
通信距离(米)波特率
251M
70500K
280125K
350100K
45080K
70050K
200018K
30009K
b)CAN总线上的节点数可达110个。
c)总线状态
总线状态 总线有“显性”和“隐性”两个状态,“显性”对应逻辑“0”,“隐性”对应逻辑“1”。
差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示。
(1)显性(dominant): ----逻辑0
CANH----高电平 --------------3.0-4.25V ----典型值3.6V
CANL----低电平 ---------------0.5-1.75V ----典型值1.4V
Vdiff---------------------------------------------------------2.25V
(2)隐性(recessive): ----逻辑1
CANH----高电平 ----0.5VCC(2.0-3.0V) ----典型值2.5V
CANL----低电平 ----0.5VCC(2.0-3.0V) ----典型值2.5V
Vdiff-------------------------------------------------------------0V
1.4CAN 协议层
1.4.1 CAN 的波特率及位同步
由于 CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯。
1.4.2 位时序分解
位时序逻辑将监视串行总线,执行采样并调整采样点,在调整采样点时,需要在起始位边沿进行同步并后续的边沿进行再同步。通过将标称位时间划分为以下三段,即可解释其工作过程:
同步段 (SYNC_SEG):位变化应该在此时间段内发生。它只有一个时间片的固定长度 (1 x tCAN)。
位段 1 (BS1):定义采样点的位置。它包括 CAN 标准的 PROP_SEG 和 PHASE_SEG1。其持续长度可以在 1 到 16 个时间片之间调整,但也可以自动加长,以补偿不同网络节点的频率差异所导致的正相位漂移。
位段 2 (BS2):定义发送点的位置。它代表 CAN 标准的 PHASE_SEG2。其持续长度可以在 1 到 8 个时间片之间调整。
再同步跳转宽度 (SJW) 定义位段加长或缩短的上限。它可以在 1 到 4 个时间片之间调整。
如果在 BS1 而不是 SYNC_SEG 中检测到有效边沿,则 BS1 会延长最多 SJW, 以便延迟采样点。
相反地,如果在 BS2 而不是 SYNC_SEG 中检测到有效边沿,则 BS2 会缩短最多 SJW, 以便提前发送点。
例子:
假如要配置波特率为100k,所用单片机的APB时钟为42MHz,则:
NominalBitTime:1/100000s即10us
t(PCLK):1/42000000S,即1/42us.
此时只需((TS1[3:0] + 1)+ (TS2[2:0] + 1)+1)* (BRP[9:0] + 1) =420
我们可令t(q)=1us,即(BRP[9:0] + 1)=42,,则
TS1[3:0] + TS2[2:0] =7
1.4.3 CAN 的报文种类及结构
为了更有效地控制通讯,CAN 一共规定了 5 种类型的帧,它们的类型及用途说明如表
1.5 STM32中的CAN框架
STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN),它支持 CAN 协议 2.0A 和 2.0B 标准。该 CAN 控制器支持最高的通讯速率为 1Mb/s;可以自动地接收和发送 CAN 报文,支持使用标准ID 和扩展 ID 的报文;外设中具有 3 个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间;具有 2 个 3 级深度的接收 FIFO,可使用过滤功能只接收或不接收某些 ID 号的报文;可配置成自动重发;不支持使用 DMA 进行数据收发。框架示意图如下:
STM32 的有两组 CAN 控制器,其中 CAN1 是主设备,框图中的“存储访问控制器”是由 CAN1控制的,CAN2 无法直接访问存储区域,所以使用 CAN2 的时候必须使能 CAN1 外设的时钟。框图中主要包含 CAN 控制内核、发送邮箱、接收 FIFO 以及验收筛选器。
bxCAN 工作模式
bxCAN 有三种主要的工作模式: 初始化、 正常和睡眠。
a)初始化模式
当硬件处于初始化模式时,可以进行软件初始化。筛选器的初始化可以在初始化模式之外进行。
b)正常模式
一旦初始化完成,软件必须向硬件请求进入正常模式,这样才能在 CAN 总线上进行同步,并开始接收和发送。筛选器尺度和模式配置必须在进入正常模式之前完成。
c)睡眠模式(低功耗)
为降低能耗功耗, bxCAN 具有低功耗模式,称为睡眠模式。