您现在正在浏览:首页 > 职教文章 > 职教论文 > CAN 控制器状态机的分析与实现

CAN 控制器状态机的分析与实现

日期: 2012/1/14 浏览: 1 来源: 学海网收集整理 作者: 佚名

兵工自动化 自动测量与控制 O. I. Automation

2008 年第 27 卷第 3 期 Automatic Measurement and Control 2008, Vol. 27, No. 3

·82·

文章编号:1006-1576(2008)03-0082-03

CAN 控制器状态机的分析与实现

雷蕾 1,谷小刚 2

(1. 湖南城市学院,物理与电信工程系,湖南 益阳 413000;

2. 中国工程物理研究院 电子工程研究所,四川 绵阳 621900)

摘要:CAN 状态机包含:总线脱离、总线启动、总线空闲、模式选择、发送模式、接收模式、错误模式、间

歇模式、超载模式及挂起模式等状态。CAN 状态机的状态编码采用一种类似 One-Hot 的编码方式。其只有外部硬

件复位采用异步方式,其余信号均用全局时钟进行同步。把状态机逻辑和算术逻辑及数据通道分开,把状态机纯

粹当作控制逻辑电路来使用,从而改善其性能。

关键词:CAN;控制器;状态机

中图分类号:TP391.8 文献标识码:A

Analyzing and Implementing of State Machine in CAN Controller

LEI Lei1, GU Xiao-gang2

(1. Dept. of Physics & Electronic Information Engineering, Hunan City University, Yiyang 413000, China;

2. Institute of Electronic Engineering, China Academy of Engineering Physics, Mianyang 621900, China)

Abstract: States of CAN state machine consist of bus off, start up, bus vacancy, mode selection, transmit mode, receive

mode, error manage, intermission, overload mode and suspend transfers. One encoding way similar to One-Hot encoding is

adopted to encode the states of CAN state machine. All signals but external hardware restoration signal are sampled by the

global clock. Separate state logics from arithmetic operation and data channels and use state machine as simplex logic

controller to improve the performances of the CAN state machine.

Keywords: CAN; Controller; State machine

0 引言

阐述了实现 CAN 控制器状态机的设计思路。

详细分析了状态机的各种状态及状态转移,说明了

实现状态机的技术通径和验证状态机的思路。

1 CAN 控制器总体设计

根据实际需要以及 CAN2.0A 协议实现 CAN 控

制器。CAN 控制器原理如图 1。



复位

接收

FIFO

CS_LOW CR CMR SR IR

控制、状态寄存器

ACR AMR

接收逻辑



微控

制器

接口

ALE

WR_LOW

RD_LOW

CDR 时钟

发生器

CLK_OUT

CLK

RST_LOW

错误管

理逻辑

CAN

状态机

BTR0 BTR1

同步电路

TRAN_BUFFER 发送缓冲器 发送逻辑 TXD

RXD

AD0~

AD7



图 1 CAN 控制器原理框图

在外部微控制器需要发送数据时,首先判断发

送缓冲器 TRAN_BUFFER 是否为空,若为空,将数

据(LLC 帧+RTR 位)送到发送缓冲器中并发出请

求发送命令 TR,CAN 状态机在总线空闲时,将发

送命令下达给发送逻辑,发送逻辑对 LLC 帧+RTR

位根据编码规则添加附加位组成 MAC 帧并通过总

线仲裁在获得总线占有权时将报文发送出去,接收

逻辑则对发送的数据进行监视,若出错,CAN 控制

器则丢弃当前报文,在总线空闲时将发送出错或丢

失仲裁的报文重发。

在没有接收到正确应答信号

时,CAN 控制器也会自动重发报文。

当监视到总线上有有效报文时,接收逻辑先对

报文进行滤波,报文滤波通过后,将拆帧后的报文

传送到接收 FIFO 中,若报文有错,错误管理逻辑

通知接收 FIFO 将出错报文丢弃。接收 FIFO 中含

有效数据时,会通过中断方式或状态方式通知外部

微控制器将数据取走,数据取走后,接收 FIFO 收

到的来自外部微控制器的清除接收缓冲器命令时,

会将该段空间清空以备后续接收数据存入。

在 CAN 控制器的运行过程中,CAN 状态机是

控制 CAN 控制器运行的核心部件,控制 CAN 控制

器的状态及状态转移,为其余相关部件下达动作命

令,并给控制、状态寄存器模块提供发送状态 TS

和接收状态 RS 信息。

2 CAN 状态机的状态分析

在实现 CAN 控制器时,要正确实现 CAN 控制

器状态机,必须清楚 CAN 控制器的各种状态及其

相互转移关系。CAN 状态机的状态转移如图 2。



收稿日期:2007-12-15;修回日期:2008-01-15

作者简介:雷蕾(1979-),女,陕西人,助教,2003 年毕业于西北大学,从事信息工程研究。

兵工自动化 自动测量与控制 O. I. Automation

2008 年第 27 卷第 3 期 Automatic Measurement and Control 2008, Vol. 27, No. 3

·83·

CAN 状态机包含以下状态:总线脱离、总线启动、

总线空闲、模式选择、发送模式、接收模式、错误

模式、间歇模式、超载模式及挂起模式。

(1) Bus_off Start_up

(0)

Bus_idle

(2)

Mode_select

(5)

(4)

Error_manage

(15)

(24) Overload_mode

(17)

intermission (19) Suspend_tranmit

(7) Transmit_mode Receive_mode

(18)

(3) (16) (25)

(14)

(20) (23)

(21)

(10) (13)

(12) (9)

(8)

(22) (6)

图 2 CAN 状态机状态转移图

2.1 总线脱离 bus_off

任何一种复位,包括外部硬件复位、外部微控

制器软件复位和因过多错误累积而造成的总线脱离

复位,使复位请求置位(转移条件(0)),从而 CAN

状态机会进入其初始状态,即总线脱离。另外,如

果 CAN 状态机进入了未定义状态,会在工作时钟

的下一个上升沿进入总线脱离状态,等待外部硬件

或微控制器软件重启 CAN 控制器。

当复位请求清零(即图中的转移条件(1))时,

CAN 状态机由总线脱离状态进入总线启动状态。

2.2 总线启动 start_up

转移条件(2):若先前的复位由外部硬件复位或

外部微控制器软件复位造成,总线启动的最短时间

为监测到总线上有 1 次连续 11 个隐性位;若先前

的复位是由过多的本地错误使得总线脱离而造成

的,则总线启动的最短时间为监测到总线上有 128

次连续 11 个隐性位。满足转移条件(2)时,CAN 状

态机会进入总线空闲状态 bus_idle。

2.3 总线空闲 bus_idle

处于总线空闲状态的时间为任意长度。当处于

总线空闲状态时,任何需要发送数据的节点均可访

问总线。

当总线上出现显性位,且 CAN 控制器没有正

在等待发送的数据(转移条件(6))时,CAN 状态机

会进入接收模式。

当总线上出现显性位,且 CAN 控制器有数据

在等待发送(转移条件(5)),CAN 状态机会进入模

式选择来参与总线竞争。

2.4 模式选择 mode_select

模式选择状态是针对发送器而言的,该时间段

的最大长度为 11 位标识位+RTR 位所经历的时间,

若期间出错或者丢失仲裁,则该时间段会缩短。设

定模式选择状态,有利于清晰判断总线仲裁之后,

CAN 状态机的状态走向。

模式选择(仲裁)期间,若出现了位错误或填

充错误(转移条件(9)),CAN 状态机会进入错误模

式;若丢失仲裁(转移条件(8)),会进入接收模式;

若最终获得总线控制权(转移条件(7)),CAN 状态

机会进入发送模式。

2.5 发送模式 transmit_mode

发送模式状态下,CAN 控制器已经获得总线占

有权,可继续发送数据。

在此状态下,若出现了位错误或填充错误或

CRC 错误或格式错误或应答错误(转移条件(12)),

CAN 状态机会进入错误模式。

在此状态下,若结束场的最后一位为显性位(转

移条件(11)),CAN 状态机会进入超载模式。

在此状态下,若结束场的最后一位也为隐性位

(转移条件((10)),则报文正常结束,CAN 状态机

会进入间歇模式。

2.6 接收模式 receive_mode

在此状态下,本节点必定为接收器,如果节点

工作在自发自收模式,将节点定义为发送器。

在此状态下,若遇到填充错误或 CRC 错误或格

式错误或应答位期间的接收器位错误(转移条件

(15)),CAN 状态机会进入错误模式。

在此状态下,若结束场的最后一位为显性位(转

移条件(14)),CAN 状态机会进入超载模式。

在此状态下,若结束场的最后一位仍为隐性位,

则数据帧正常结束(转移条件(13)),CAN 状态机会

进入间歇模式。

2.7 错误模式 error_manage

若错误帧出错,会重新启动错误帧。

若一个错误使节点由活动错误节点变成认可错

误节点,则由该错误启动的错误帧为活动错误帧。

若错误界定符的最后一位检测到显性位(转移

条件(17)),CAN 状态机会进入超载模式。

若在错误界定符的最后一位仍检测到隐性位

(转移条件(16)),CAN 状态机会进入间歇模式。

2.8 间歇模式 intermission

在此状态下,若间歇场的前 2 位检测到显性位

(转移条件(21)),CAN 状态机会进入超载模式。

在此状态下,间歇场的前 2 位检测到隐性位,

而第 3 位为显性位,若有数据在等待发送,且节点

不为认可发送器;或者间歇场的 3 位均为隐性位,

若节点为活动节点或者为接收器且有数据正在等待

兵工自动化 自动测量与控制 O. I. Automation

2008 年第 27 卷第 3 期 Automatic Measurement and Control 2008, Vol. 27, No. 3

·84·

发送;以上 2 种条件下(转移条件(18)),CAN 状态

机会进入模式选择状态。

在此状态下,间歇场的前 2 位均为隐性位,第

3 位为显性位,若无数据在等待发送,或者节点为

认可节点且为接收器(转移条件(20)),CAN 状态机

会进入接收状态。

在此状态下,间歇场的 3 位均为隐性位,若节

点为认可节点且为发送器(转移条件(19)),CAN

状态机会进入挂起模式。

在此状态下,间歇场的 3 位均为隐性位,若节

点为活动节点且无数据正在等待发送(转移条件

(3)),则进入总线空闲状态。

2.9 超载模式 overload_mode

在此状态下,如果超载帧出错(转移条件(24)),

CAN 状态机会进入错误模式;如果超载帧正常结束

(转移条件(25)),CAN 状态机进入间歇模式;如果

超载帧界定符的最后一位为显性, CAN 状态机再次

进入超载模式。

2.10 挂起模式 suspend_transmit

如果一个节点是发送器且为认可节点,它发送

了一帧数据(不管是否成功发送),经过间歇场之后

会进入挂起模式。

在此状态下,如果暂停发送场有显性信号出现

(转移条件(23)),CAN 控制器认为有别的节点启动

了一帧数据帧或远程帧,它会硬同步于这个节点,

并转入接收模式。

在此状态下,如果暂停发送场的所有 8 位均为

隐性,且本节点有数据在等待发送(转移条件(22)),

CAN 状态机进入模式选择使本节点争取发送数据。

在此状态下,如果暂停发送场的所有 8 位均为

隐性,且本节点没有数据正在等待发送(转移条件

(4)),CAN 状态机将进入总线空闲状态。

3 CAN 状态机实现和验证

设计输入采用 EDA 流行的 VHDL 语言对 CAN

状态机进行设计。由于 CAN 总线可用于工业现场

控制,传输信息需要很强的时实性,这需要设计的

CAN 状态机具有较高的运行速度,故应改善其性

能:在设计中,只有外部硬件复位采用异步方式,

其余信号均用全局时钟进行同步;把状态机逻辑和

算术逻辑以及数据通道分开,把状态机纯粹当作控

制逻辑电路来使用,从而改善其性能;CAN 状态机

的状态编码采用了类似 One-Hot 的编码方式,以优

化电路,这样译码逻辑扇入系数小,性能较好;完

成设计后,允许跨越功能块边界对设计优化;将逻

辑较复杂的电路拆分,中间插入一级或多级时钟,

牺牲了面积,但电路的执行速度提高。图 3 和图 4

是 CAN 状态机模块 state_mahcine 在仿真软 件

ModelSim SE 5.6a 下的部分测试波形。Current_state

代表状 态 机的状 态 ,状态编 码如下:bus_off:

"0000000000"(0) ; start_up : "0000000011" (3) ;

bus_idle : "0000000101"(5) ; mode_select :

"0000001001"(9) ; transmit_mode : "0000010001"

(17); receive_mode: "0000100001"(3); overload_

mode: "0001000001"(65) ; error_manage:

"0010000001"(129) ; intermission : "0100000001"

(257);suspend_ transmit:"1000000001"(513)。由波

形图可见,在各种激励作用下,CAN 状态机所处的

状态 Current_state 在该次仿真中的变化依次为:

bus_off→start_up→bus_idle→mode_select→transmit

_mode→intermission→bus_idle→receive_mode。



图 3 state_mahcine 功能仿真波形图 1





图 4 state_mahcine 功能仿真波形图 2

4 结论

利用 FPGA 和 VHDL 语言实现了 CAN2.0A 协

议,并实现了该 CAN 控制器与 MCS-51 单片机的

接口电路,门数为 5.6 万门,进行了充分的功能和

时序仿真,并在 25MHz 外部时钟时对设计的 CAN

控制器进行了自发自收功能的硬件调试和验证,位

速率达到 250kbps, CAN 控制器自发自收功能正常。

可开展在多节点在线通信、接收 FIFO 溢出、总线

脱离等下对所设计的 CAN 状态机进行验证。

参考文献:

[1] Bosch. CAN Specification Version 2.0 [S]. Robert Bosch

GmbH, 1991.

[2] 邬宽明. CAN 总线原理和应用系统设计[M]. 北京: 北

京航空航天大学出版社, 1996.

[3] 侯伯亨, 顾新. VHDL 硬件描述语言与数字逻辑电路设

计[M]. 西安: 西安电子科技大学出版社, 1997.


CAN 控制器状态机的分析与实现.pdf

返回顶部